|
1 | 1 | {
|
2 | 2 | "cells": [
|
| 3 | + { |
| 4 | + "cell_type": "markdown", |
| 5 | + "metadata": {}, |
| 6 | + "source": [ |
| 7 | + "# Tranfer Learning over Shufflnetv2\n", |
| 8 | + "\n", |
| 9 | + "Fine Tuning a Shufflenet model (pre-trained over Imagenet) on the CIFAR-10 Dataset." |
| 10 | + ] |
| 11 | + }, |
3 | 12 | {
|
4 | 13 | "cell_type": "code",
|
5 | 14 | "execution_count": 2,
|
|
18 | 27 | "from torchsummary import summary\n"
|
19 | 28 | ]
|
20 | 29 | },
|
| 30 | + { |
| 31 | + "cell_type": "markdown", |
| 32 | + "metadata": {}, |
| 33 | + "source": [ |
| 34 | + "#### Training, Valiation Loop" |
| 35 | + ] |
| 36 | + }, |
21 | 37 | {
|
22 | 38 | "cell_type": "code",
|
23 | 39 | "execution_count": 13,
|
|
47 | 63 | " outputs = model(inputs) # prediction\n",
|
48 | 64 | " _loss = loss(outputs, labels) # loss\n",
|
49 | 65 | " _, pred = torch.max(outputs, 1)\n",
|
50 |
| - " \n", |
| 66 | + "\n", |
51 | 67 | " # backpropr\n",
|
52 | 68 | " _loss.backward()\n",
|
53 | 69 | " optim.step()\n",
|
|
83 | 99 | " print(f'Epoch #{epoch+1}, '\n",
|
84 | 100 | " f'Validation Loss: {valid_loss/len(testload.dataset):.2f}, '\n",
|
85 | 101 | " f'Validation Acc: {valid_acc.double()/len(testload.dataset):.2f}')\n",
|
86 |
| - " \n", |
| 102 | + "\n", |
87 | 103 | " # Save losses for plotting\n",
|
88 | 104 | " train_losses.append(running_loss/len(trainload.dataset))\n",
|
89 | 105 | " valid_losses.append(valid_loss/len(testload.dataset))\n",
|
90 |
| - " \n", |
| 106 | + "\n", |
91 | 107 | " print(f'Training time: {start_time - time()}')\n",
|
92 | 108 | " print('Savin model')\n",
|
93 | 109 | " torch.save(model.state_dict(), 'my_shufflenet.pt')\n",
|
|
314 | 330 | "device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')"
|
315 | 331 | ]
|
316 | 332 | },
|
| 333 | + { |
| 334 | + "cell_type": "markdown", |
| 335 | + "metadata": {}, |
| 336 | + "source": [ |
| 337 | + "#### Freeze network params\n", |
| 338 | + "- Freeze all params in the network\n", |
| 339 | + "- Replace the final classification layer with a new one to train." |
| 340 | + ] |
| 341 | + }, |
317 | 342 | {
|
318 | 343 | "cell_type": "code",
|
319 | 344 | "execution_count": 10,
|
|
330 | 355 | "model = model.to(device)"
|
331 | 356 | ]
|
332 | 357 | },
|
| 358 | + { |
| 359 | + "cell_type": "markdown", |
| 360 | + "metadata": {}, |
| 361 | + "source": [ |
| 362 | + "#### Default transformations" |
| 363 | + ] |
| 364 | + }, |
333 | 365 | {
|
334 | 366 | "cell_type": "code",
|
335 | 367 | "execution_count": 11,
|
|
357 | 389 | "])"
|
358 | 390 | ]
|
359 | 391 | },
|
| 392 | + { |
| 393 | + "cell_type": "markdown", |
| 394 | + "metadata": {}, |
| 395 | + "source": [ |
| 396 | + "#### Dataloaders" |
| 397 | + ] |
| 398 | + }, |
360 | 399 | {
|
361 | 400 | "cell_type": "code",
|
362 | 401 | "execution_count": 12,
|
|
0 commit comments