{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "%reload_ext autoreload\n", "%autoreload 2" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from nb_005 import *" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# STL-10" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Basic data aug" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "PATH = Path('data/stl10')\n", "\n", "data_mean, data_std = map(tensor, ([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]))\n", "data_norm,data_denorm = normalize_funcs(data_mean,data_std)\n", "\n", "train_ds = ImageDataset.from_folder(PATH/'train')\n", "valid_ds = ImageDataset.from_folder(PATH/'valid')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "x=valid_ds[0][0]\n", "x.show()\n", "x.shape" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "size=96\n", "tfms = get_transforms(do_flip=True, max_rotate=10, max_lighting=0.2, max_warp=0.15, max_zoom=1.2)\n", "# tfms = get_transforms(do_flip=True, max_rotate=10, max_lighting=0.2)\n", "tds = transform_datasets(train_ds, valid_ds, tfms, size=size)#, padding_mode='zeros')\n", "data = DataBunch.create(*tds, bs=32, num_workers=8, tfms=data_norm)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "(x,y) = next(iter(data.valid_dl))\n", "\n", "_,axs = plt.subplots(4,4,figsize=(12,12))\n", "for i,ax in enumerate(axs.flatten()): show_image(data_denorm(x[i].cpu()), ax)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "(x,y) = next(iter(data.train_dl))\n", "\n", "_,axs = plt.subplots(4,4,figsize=(12,12))\n", "for i,ax in enumerate(axs.flatten()): show_image(data_denorm(x[i].cpu()), ax)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "_,axs = plt.subplots(4,4,figsize=(12,12))\n", "for i,ax in enumerate(axs.flat): tds[0][1][0].show(ax)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Train" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from torchvision.models import resnet18, resnet34, resnet50\n", "arch = resnet50" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "lr = 2e-3" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "learn = ConvLearner(data, arch, 2 , wd=1e-2) #, train_bn=False #, callback_fns=[BnFreeze]\n", "# , opt_fn=partial(optim.SGD, momentum=0.9))\n", "learn.metrics = [accuracy]\n", "learn.split(lambda m: (m[0][6], m[1]))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "lr_find(learn)\n", "learn.recorder.plot()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "learn.fit_one_cycle(6, slice(lr))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "learn.save('0')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Gradual unfreezing" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "learn.load('0')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "learn.unfreeze()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "lr = 2e-4" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "learn.fit_one_cycle(6, slice(lr/100,lr), pct_start=0.05)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "learn.save('1')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "learn.recorder.plot_losses()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Fin" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "csv = pd.read_csv(PATH/'default.csv')\n", "is_valid = csv['2']=='valid'\n", "valid_df,train_df = csv[is_valid],csv[~is_valid]\n", "len(valid_df),len(train_df)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "len(valid_ds)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "train_fns,train_lbls,valid_fns,valid_lbls = map(np.array,\n", " (train_df['0'],train_df['1'],valid_df['0'],valid_df['1']))\n", "\n", "train_fns = [PATH/o for o in train_fns]\n", "valid_fns = [PATH/o for o in valid_fns]\n", "\n", "train_ds = ImageDataset(train_fns,train_lbls)\n", "valid_ds = ImageDataset(valid_fns,valid_lbls, classes=train_ds.classes)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" } }, "nbformat": 4, "nbformat_minor": 2 }