jannatulferdaws commited on
Commit
0d7cee1
·
verified ·
1 Parent(s): d848bf4

Train the model

Browse files
Files changed (1) hide show
  1. notebook/code.ipynb +582 -1
notebook/code.ipynb CHANGED
@@ -2,7 +2,7 @@
2
  "cells": [
3
  {
4
  "cell_type": "code",
5
- "execution_count": 1,
6
  "metadata": {},
7
  "outputs": [],
8
  "source": [
@@ -17,6 +17,587 @@
17
  "import numpy as np"
18
  ]
19
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
  {
21
  "cell_type": "code",
22
  "execution_count": null,
 
2
  "cells": [
3
  {
4
  "cell_type": "code",
5
+ "execution_count": 2,
6
  "metadata": {},
7
  "outputs": [],
8
  "source": [
 
17
  "import numpy as np"
18
  ]
19
  },
20
+ {
21
+ "cell_type": "code",
22
+ "execution_count": 3,
23
+ "metadata": {},
24
+ "outputs": [],
25
+ "source": [
26
+ "# import resnet from torch\n",
27
+ "import torch.library\n",
28
+ "from torchvision.models import squeezenet1_1\n",
29
+ "from torchvision.models import resnet50\n",
30
+ "from torchvision.models import resnet18\n",
31
+ "from torchvision.models import mobilenet_v2\n",
32
+ "from torchvision import transforms\n",
33
+ "from torchvision.datasets import ImageFolder\n",
34
+ "from torch.utils.data import DataLoader"
35
+ ]
36
+ },
37
+ {
38
+ "cell_type": "code",
39
+ "execution_count": 4,
40
+ "metadata": {},
41
+ "outputs": [],
42
+ "source": [
43
+ "class_num = 5\n",
44
+ "classes = ['Ak', 'Ala_Idris', 'Buzgulu', 'Dimnit', 'Nazli']"
45
+ ]
46
+ },
47
+ {
48
+ "cell_type": "code",
49
+ "execution_count": 5,
50
+ "metadata": {},
51
+ "outputs": [
52
+ {
53
+ "name": "stderr",
54
+ "output_type": "stream",
55
+ "text": [
56
+ "d:\\Softwares\\Anaconda3\\lib\\site-packages\\torchvision\\models\\_utils.py:208: UserWarning: The parameter 'pretrained' is deprecated since 0.13 and may be removed in the future, please use 'weights' instead.\n",
57
+ " warnings.warn(\n",
58
+ "d:\\Softwares\\Anaconda3\\lib\\site-packages\\torchvision\\models\\_utils.py:223: UserWarning: Arguments other than a weight enum or `None` for 'weights' are deprecated since 0.13 and may be removed in the future. The current behavior is equivalent to passing `weights=MobileNet_V2_Weights.IMAGENET1K_V1`. You can also use `weights=MobileNet_V2_Weights.DEFAULT` to get the most up-to-date weights.\n",
59
+ " warnings.warn(msg)\n"
60
+ ]
61
+ }
62
+ ],
63
+ "source": [
64
+ "model = mobilenet_v2(pretrained=True)"
65
+ ]
66
+ },
67
+ {
68
+ "cell_type": "code",
69
+ "execution_count": 9,
70
+ "metadata": {},
71
+ "outputs": [
72
+ {
73
+ "name": "stdout",
74
+ "output_type": "stream",
75
+ "text": [
76
+ "MobileNetV2(\n",
77
+ " (features): Sequential(\n",
78
+ " (0): Conv2dNormActivation(\n",
79
+ " (0): Conv2d(3, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
80
+ " (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
81
+ " (2): ReLU6(inplace=True)\n",
82
+ " )\n",
83
+ " (1): InvertedResidual(\n",
84
+ " (conv): Sequential(\n",
85
+ " (0): Conv2dNormActivation(\n",
86
+ " (0): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=32, bias=False)\n",
87
+ " (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
88
+ " (2): ReLU6(inplace=True)\n",
89
+ " )\n",
90
+ " (1): Conv2d(32, 16, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
91
+ " (2): BatchNorm2d(16, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
92
+ " )\n",
93
+ " )\n",
94
+ " (2): InvertedResidual(\n",
95
+ " (conv): Sequential(\n",
96
+ " (0): Conv2dNormActivation(\n",
97
+ " (0): Conv2d(16, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
98
+ " (1): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
99
+ " (2): ReLU6(inplace=True)\n",
100
+ " )\n",
101
+ " (1): Conv2dNormActivation(\n",
102
+ " (0): Conv2d(96, 96, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), groups=96, bias=False)\n",
103
+ " (1): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
104
+ " (2): ReLU6(inplace=True)\n",
105
+ " )\n",
106
+ " (2): Conv2d(96, 24, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
107
+ " (3): BatchNorm2d(24, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
108
+ " )\n",
109
+ " )\n",
110
+ " (3): InvertedResidual(\n",
111
+ " (conv): Sequential(\n",
112
+ " (0): Conv2dNormActivation(\n",
113
+ " (0): Conv2d(24, 144, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
114
+ " (1): BatchNorm2d(144, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
115
+ " (2): ReLU6(inplace=True)\n",
116
+ " )\n",
117
+ " (1): Conv2dNormActivation(\n",
118
+ " (0): Conv2d(144, 144, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=144, bias=False)\n",
119
+ " (1): BatchNorm2d(144, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
120
+ " (2): ReLU6(inplace=True)\n",
121
+ " )\n",
122
+ " (2): Conv2d(144, 24, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
123
+ " (3): BatchNorm2d(24, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
124
+ " )\n",
125
+ " )\n",
126
+ " (4): InvertedResidual(\n",
127
+ " (conv): Sequential(\n",
128
+ " (0): Conv2dNormActivation(\n",
129
+ " (0): Conv2d(24, 144, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
130
+ " (1): BatchNorm2d(144, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
131
+ " (2): ReLU6(inplace=True)\n",
132
+ " )\n",
133
+ " (1): Conv2dNormActivation(\n",
134
+ " (0): Conv2d(144, 144, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), groups=144, bias=False)\n",
135
+ " (1): BatchNorm2d(144, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
136
+ " (2): ReLU6(inplace=True)\n",
137
+ " )\n",
138
+ " (2): Conv2d(144, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
139
+ " (3): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
140
+ " )\n",
141
+ " )\n",
142
+ " (5): InvertedResidual(\n",
143
+ " (conv): Sequential(\n",
144
+ " (0): Conv2dNormActivation(\n",
145
+ " (0): Conv2d(32, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
146
+ " (1): BatchNorm2d(192, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
147
+ " (2): ReLU6(inplace=True)\n",
148
+ " )\n",
149
+ " (1): Conv2dNormActivation(\n",
150
+ " (0): Conv2d(192, 192, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=192, bias=False)\n",
151
+ " (1): BatchNorm2d(192, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
152
+ " (2): ReLU6(inplace=True)\n",
153
+ " )\n",
154
+ " (2): Conv2d(192, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
155
+ " (3): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
156
+ " )\n",
157
+ " )\n",
158
+ " (6): InvertedResidual(\n",
159
+ " (conv): Sequential(\n",
160
+ " (0): Conv2dNormActivation(\n",
161
+ " (0): Conv2d(32, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
162
+ " (1): BatchNorm2d(192, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
163
+ " (2): ReLU6(inplace=True)\n",
164
+ " )\n",
165
+ " (1): Conv2dNormActivation(\n",
166
+ " (0): Conv2d(192, 192, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=192, bias=False)\n",
167
+ " (1): BatchNorm2d(192, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
168
+ " (2): ReLU6(inplace=True)\n",
169
+ " )\n",
170
+ " (2): Conv2d(192, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
171
+ " (3): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
172
+ " )\n",
173
+ " )\n",
174
+ " (7): InvertedResidual(\n",
175
+ " (conv): Sequential(\n",
176
+ " (0): Conv2dNormActivation(\n",
177
+ " (0): Conv2d(32, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
178
+ " (1): BatchNorm2d(192, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
179
+ " (2): ReLU6(inplace=True)\n",
180
+ " )\n",
181
+ " (1): Conv2dNormActivation(\n",
182
+ " (0): Conv2d(192, 192, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), groups=192, bias=False)\n",
183
+ " (1): BatchNorm2d(192, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
184
+ " (2): ReLU6(inplace=True)\n",
185
+ " )\n",
186
+ " (2): Conv2d(192, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
187
+ " (3): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
188
+ " )\n",
189
+ " )\n",
190
+ " (8): InvertedResidual(\n",
191
+ " (conv): Sequential(\n",
192
+ " (0): Conv2dNormActivation(\n",
193
+ " (0): Conv2d(64, 384, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
194
+ " (1): BatchNorm2d(384, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
195
+ " (2): ReLU6(inplace=True)\n",
196
+ " )\n",
197
+ " (1): Conv2dNormActivation(\n",
198
+ " (0): Conv2d(384, 384, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=384, bias=False)\n",
199
+ " (1): BatchNorm2d(384, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
200
+ " (2): ReLU6(inplace=True)\n",
201
+ " )\n",
202
+ " (2): Conv2d(384, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
203
+ " (3): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
204
+ " )\n",
205
+ " )\n",
206
+ " (9): InvertedResidual(\n",
207
+ " (conv): Sequential(\n",
208
+ " (0): Conv2dNormActivation(\n",
209
+ " (0): Conv2d(64, 384, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
210
+ " (1): BatchNorm2d(384, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
211
+ " (2): ReLU6(inplace=True)\n",
212
+ " )\n",
213
+ " (1): Conv2dNormActivation(\n",
214
+ " (0): Conv2d(384, 384, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=384, bias=False)\n",
215
+ " (1): BatchNorm2d(384, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
216
+ " (2): ReLU6(inplace=True)\n",
217
+ " )\n",
218
+ " (2): Conv2d(384, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
219
+ " (3): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
220
+ " )\n",
221
+ " )\n",
222
+ " (10): InvertedResidual(\n",
223
+ " (conv): Sequential(\n",
224
+ " (0): Conv2dNormActivation(\n",
225
+ " (0): Conv2d(64, 384, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
226
+ " (1): BatchNorm2d(384, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
227
+ " (2): ReLU6(inplace=True)\n",
228
+ " )\n",
229
+ " (1): Conv2dNormActivation(\n",
230
+ " (0): Conv2d(384, 384, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=384, bias=False)\n",
231
+ " (1): BatchNorm2d(384, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
232
+ " (2): ReLU6(inplace=True)\n",
233
+ " )\n",
234
+ " (2): Conv2d(384, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
235
+ " (3): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
236
+ " )\n",
237
+ " )\n",
238
+ " (11): InvertedResidual(\n",
239
+ " (conv): Sequential(\n",
240
+ " (0): Conv2dNormActivation(\n",
241
+ " (0): Conv2d(64, 384, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
242
+ " (1): BatchNorm2d(384, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
243
+ " (2): ReLU6(inplace=True)\n",
244
+ " )\n",
245
+ " (1): Conv2dNormActivation(\n",
246
+ " (0): Conv2d(384, 384, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=384, bias=False)\n",
247
+ " (1): BatchNorm2d(384, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
248
+ " (2): ReLU6(inplace=True)\n",
249
+ " )\n",
250
+ " (2): Conv2d(384, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
251
+ " (3): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
252
+ " )\n",
253
+ " )\n",
254
+ " (12): InvertedResidual(\n",
255
+ " (conv): Sequential(\n",
256
+ " (0): Conv2dNormActivation(\n",
257
+ " (0): Conv2d(96, 576, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
258
+ " (1): BatchNorm2d(576, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
259
+ " (2): ReLU6(inplace=True)\n",
260
+ " )\n",
261
+ " (1): Conv2dNormActivation(\n",
262
+ " (0): Conv2d(576, 576, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=576, bias=False)\n",
263
+ " (1): BatchNorm2d(576, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
264
+ " (2): ReLU6(inplace=True)\n",
265
+ " )\n",
266
+ " (2): Conv2d(576, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
267
+ " (3): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
268
+ " )\n",
269
+ " )\n",
270
+ " (13): InvertedResidual(\n",
271
+ " (conv): Sequential(\n",
272
+ " (0): Conv2dNormActivation(\n",
273
+ " (0): Conv2d(96, 576, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
274
+ " (1): BatchNorm2d(576, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
275
+ " (2): ReLU6(inplace=True)\n",
276
+ " )\n",
277
+ " (1): Conv2dNormActivation(\n",
278
+ " (0): Conv2d(576, 576, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=576, bias=False)\n",
279
+ " (1): BatchNorm2d(576, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
280
+ " (2): ReLU6(inplace=True)\n",
281
+ " )\n",
282
+ " (2): Conv2d(576, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
283
+ " (3): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
284
+ " )\n",
285
+ " )\n",
286
+ " (14): InvertedResidual(\n",
287
+ " (conv): Sequential(\n",
288
+ " (0): Conv2dNormActivation(\n",
289
+ " (0): Conv2d(96, 576, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
290
+ " (1): BatchNorm2d(576, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
291
+ " (2): ReLU6(inplace=True)\n",
292
+ " )\n",
293
+ " (1): Conv2dNormActivation(\n",
294
+ " (0): Conv2d(576, 576, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), groups=576, bias=False)\n",
295
+ " (1): BatchNorm2d(576, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
296
+ " (2): ReLU6(inplace=True)\n",
297
+ " )\n",
298
+ " (2): Conv2d(576, 160, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
299
+ " (3): BatchNorm2d(160, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
300
+ " )\n",
301
+ " )\n",
302
+ " (15): InvertedResidual(\n",
303
+ " (conv): Sequential(\n",
304
+ " (0): Conv2dNormActivation(\n",
305
+ " (0): Conv2d(160, 960, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
306
+ " (1): BatchNorm2d(960, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
307
+ " (2): ReLU6(inplace=True)\n",
308
+ " )\n",
309
+ " (1): Conv2dNormActivation(\n",
310
+ " (0): Conv2d(960, 960, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=960, bias=False)\n",
311
+ " (1): BatchNorm2d(960, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
312
+ " (2): ReLU6(inplace=True)\n",
313
+ " )\n",
314
+ " (2): Conv2d(960, 160, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
315
+ " (3): BatchNorm2d(160, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
316
+ " )\n",
317
+ " )\n",
318
+ " (16): InvertedResidual(\n",
319
+ " (conv): Sequential(\n",
320
+ " (0): Conv2dNormActivation(\n",
321
+ " (0): Conv2d(160, 960, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
322
+ " (1): BatchNorm2d(960, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
323
+ " (2): ReLU6(inplace=True)\n",
324
+ " )\n",
325
+ " (1): Conv2dNormActivation(\n",
326
+ " (0): Conv2d(960, 960, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=960, bias=False)\n",
327
+ " (1): BatchNorm2d(960, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
328
+ " (2): ReLU6(inplace=True)\n",
329
+ " )\n",
330
+ " (2): Conv2d(960, 160, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
331
+ " (3): BatchNorm2d(160, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
332
+ " )\n",
333
+ " )\n",
334
+ " (17): InvertedResidual(\n",
335
+ " (conv): Sequential(\n",
336
+ " (0): Conv2dNormActivation(\n",
337
+ " (0): Conv2d(160, 960, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
338
+ " (1): BatchNorm2d(960, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
339
+ " (2): ReLU6(inplace=True)\n",
340
+ " )\n",
341
+ " (1): Conv2dNormActivation(\n",
342
+ " (0): Conv2d(960, 960, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=960, bias=False)\n",
343
+ " (1): BatchNorm2d(960, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
344
+ " (2): ReLU6(inplace=True)\n",
345
+ " )\n",
346
+ " (2): Conv2d(960, 320, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
347
+ " (3): BatchNorm2d(320, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
348
+ " )\n",
349
+ " )\n",
350
+ " (18): Conv2dNormActivation(\n",
351
+ " (0): Conv2d(320, 1280, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
352
+ " (1): BatchNorm2d(1280, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
353
+ " (2): ReLU6(inplace=True)\n",
354
+ " )\n",
355
+ " )\n",
356
+ " (classifier): Sequential(\n",
357
+ " (0): Dropout(p=0.2, inplace=False)\n",
358
+ " (1): Linear(in_features=1280, out_features=1000, bias=True)\n",
359
+ " )\n",
360
+ ")\n"
361
+ ]
362
+ }
363
+ ],
364
+ "source": [
365
+ "print(model)"
366
+ ]
367
+ },
368
+ {
369
+ "cell_type": "code",
370
+ "execution_count": 7,
371
+ "metadata": {},
372
+ "outputs": [],
373
+ "source": [
374
+ "transform = transforms.Compose([\n",
375
+ " transforms.RandomResizedCrop(224),\n",
376
+ " transforms.RandomHorizontalFlip(),\n",
377
+ " transforms.ToTensor(),\n",
378
+ " transforms.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225])\n",
379
+ "])"
380
+ ]
381
+ },
382
+ {
383
+ "cell_type": "code",
384
+ "execution_count": 8,
385
+ "metadata": {},
386
+ "outputs": [],
387
+ "source": [
388
+ "training_set = ImageFolder('../data/train', transform=transform)\n",
389
+ "test_set = ImageFolder('../data/test', transform=transform)\n",
390
+ "val_set = ImageFolder('../data/val', transform=transform)"
391
+ ]
392
+ },
393
+ {
394
+ "cell_type": "code",
395
+ "execution_count": 47,
396
+ "metadata": {},
397
+ "outputs": [],
398
+ "source": [
399
+ "batch_size = 8\n",
400
+ "epochs = 5\n",
401
+ "lr = 1e-5\n",
402
+ "loss_fn = nn.CrossEntropyLoss()\n",
403
+ "optimizer = optim.Adam(model.parameters(), lr=lr)"
404
+ ]
405
+ },
406
+ {
407
+ "cell_type": "code",
408
+ "execution_count": 48,
409
+ "metadata": {},
410
+ "outputs": [],
411
+ "source": [
412
+ "train_loader = DataLoader(training_set, batch_size=batch_size, shuffle=True)\n",
413
+ "test_loader = DataLoader(test_set, batch_size=batch_size)\n",
414
+ "val_loader = DataLoader(val_set, batch_size=batch_size)"
415
+ ]
416
+ },
417
+ {
418
+ "cell_type": "code",
419
+ "execution_count": 49,
420
+ "metadata": {},
421
+ "outputs": [],
422
+ "source": [
423
+ "model.classifier[1] = nn.Linear(in_features=1280, out_features=class_num)"
424
+ ]
425
+ },
426
+ {
427
+ "cell_type": "code",
428
+ "execution_count": 52,
429
+ "metadata": {},
430
+ "outputs": [],
431
+ "source": [
432
+ "epochs = 1"
433
+ ]
434
+ },
435
+ {
436
+ "cell_type": "code",
437
+ "execution_count": 55,
438
+ "metadata": {},
439
+ "outputs": [
440
+ {
441
+ "name": "stdout",
442
+ "output_type": "stream",
443
+ "text": [
444
+ "Out: [2, 3, 1, 1, 0, 4, 0, 2]\n",
445
+ "Target: tensor([2, 3, 1, 1, 0, 2, 1, 2])\n",
446
+ "Epoch: 0 [0/400 (0%)]\tLoss: 0.918071\n",
447
+ "Out: [3, 3, 4, 2, 2, 0, 1, 4]\n",
448
+ "Target: tensor([3, 3, 4, 0, 0, 0, 1, 4])\n",
449
+ "Out: [1, 4, 4, 1, 4, 4, 2, 3]\n",
450
+ "Target: tensor([1, 4, 4, 1, 4, 4, 2, 3])\n",
451
+ "Out: [4, 2, 4, 0, 1, 3, 3, 1]\n",
452
+ "Target: tensor([4, 2, 4, 0, 2, 3, 3, 2])\n",
453
+ "Out: [0, 2, 3, 4, 1, 4, 3, 1]\n",
454
+ "Target: tensor([1, 1, 3, 1, 1, 4, 3, 1])\n",
455
+ "Out: [4, 2, 0, 0, 4, 4, 1, 3]\n",
456
+ "Target: tensor([0, 2, 0, 0, 4, 2, 0, 3])\n",
457
+ "Out: [3, 1, 1, 4, 4, 3, 0, 1]\n",
458
+ "Target: tensor([2, 2, 1, 2, 4, 3, 0, 1])\n",
459
+ "Out: [2, 4, 3, 1, 1, 0, 4, 3]\n",
460
+ "Target: tensor([2, 1, 3, 1, 1, 0, 4, 3])\n",
461
+ "Out: [4, 4, 1, 1, 4, 2, 0, 3]\n",
462
+ "Target: tensor([4, 3, 1, 1, 4, 2, 0, 3])\n",
463
+ "Out: [1, 0, 0, 4, 3, 2, 3, 2]\n",
464
+ "Target: tensor([2, 0, 2, 4, 3, 2, 3, 2])\n",
465
+ "Out: [2, 2, 0, 3, 1, 4, 0, 4]\n",
466
+ "Target: tensor([2, 2, 0, 0, 1, 4, 0, 3])\n",
467
+ "Epoch: 0 [80/400 (20%)]\tLoss: 0.715335\n",
468
+ "Out: [0, 4, 4, 3, 1, 2, 0, 1]\n",
469
+ "Target: tensor([1, 4, 2, 0, 1, 2, 0, 1])\n",
470
+ "Out: [3, 2, 4, 4, 0, 2, 0, 3]\n",
471
+ "Target: tensor([3, 2, 4, 4, 3, 2, 1, 3])\n",
472
+ "Out: [0, 0, 3, 4, 1, 4, 2, 2]\n",
473
+ "Target: tensor([0, 0, 3, 4, 1, 4, 2, 2])\n",
474
+ "Out: [0, 4, 0, 2, 4, 1, 2, 4]\n",
475
+ "Target: tensor([0, 3, 0, 2, 0, 1, 3, 3])\n",
476
+ "Out: [3, 2, 4, 4, 1, 3, 4, 3]\n",
477
+ "Target: tensor([2, 2, 2, 4, 1, 3, 2, 3])\n",
478
+ "Out: [4, 1, 3, 2, 3, 3, 4, 0]\n",
479
+ "Target: tensor([4, 1, 2, 1, 3, 1, 4, 1])\n",
480
+ "Out: [4, 2, 4, 4, 0, 0, 3, 1]\n",
481
+ "Target: tensor([4, 2, 4, 4, 1, 0, 3, 1])\n",
482
+ "Out: [4, 0, 3, 1, 1, 3, 4, 2]\n",
483
+ "Target: tensor([4, 1, 0, 1, 1, 3, 0, 2])\n",
484
+ "Out: [1, 0, 0, 3, 2, 4, 2, 4]\n",
485
+ "Target: tensor([1, 3, 0, 3, 2, 2, 2, 2])\n",
486
+ "Out: [4, 4, 3, 1, 4, 0, 2, 3]\n",
487
+ "Target: tensor([4, 4, 3, 1, 4, 0, 2, 4])\n",
488
+ "Epoch: 0 [160/400 (40%)]\tLoss: 0.672349\n",
489
+ "Out: [3, 2, 2, 0, 3, 1, 4, 4]\n",
490
+ "Target: tensor([3, 2, 2, 0, 3, 0, 3, 4])\n",
491
+ "Out: [1, 1, 3, 0, 2, 4, 0, 3]\n",
492
+ "Target: tensor([1, 1, 4, 0, 0, 4, 0, 3])\n",
493
+ "Out: [4, 2, 4, 1, 1, 1, 4, 3]\n",
494
+ "Target: tensor([4, 1, 4, 1, 1, 1, 4, 3])\n",
495
+ "Out: [1, 4, 0, 3, 3, 4, 2, 2]\n",
496
+ "Target: tensor([1, 4, 3, 3, 3, 3, 3, 2])\n",
497
+ "Out: [3, 2, 0, 2, 1, 4, 0, 4]\n",
498
+ "Target: tensor([3, 2, 0, 1, 1, 2, 0, 0])\n",
499
+ "Out: [3, 4, 4, 1, 1, 1, 3, 2]\n",
500
+ "Target: tensor([3, 4, 4, 1, 1, 1, 2, 1])\n",
501
+ "Out: [4, 1, 2, 1, 4, 3, 4, 2]\n",
502
+ "Target: tensor([4, 1, 2, 1, 4, 3, 4, 1])\n",
503
+ "Out: [0, 3, 4, 2, 0, 3, 3, 3]\n",
504
+ "Target: tensor([0, 0, 4, 2, 0, 3, 3, 3])\n",
505
+ "Out: [3, 2, 2, 4, 0, 4, 1, 2]\n",
506
+ "Target: tensor([3, 2, 2, 4, 0, 4, 0, 2])\n",
507
+ "Out: [1, 2, 4, 2, 1, 4, 3, 0]\n",
508
+ "Target: tensor([1, 1, 4, 1, 1, 0, 0, 0])\n",
509
+ "Epoch: 0 [240/400 (60%)]\tLoss: 1.097419\n",
510
+ "Out: [4, 4, 1, 3, 4, 1, 0, 3]\n",
511
+ "Target: tensor([4, 4, 1, 3, 4, 1, 0, 3])\n",
512
+ "Out: [0, 3, 3, 3, 4, 1, 2, 2]\n",
513
+ "Target: tensor([0, 3, 0, 0, 4, 2, 2, 2])\n",
514
+ "Out: [3, 4, 3, 2, 0, 4, 2, 0]\n",
515
+ "Target: tensor([3, 4, 0, 0, 0, 4, 2, 0])\n",
516
+ "Out: [3, 1, 3, 0, 1, 3, 4, 1]\n",
517
+ "Target: tensor([1, 0, 3, 0, 1, 3, 0, 1])\n",
518
+ "Out: [4, 3, 2, 0, 4, 2, 1, 2]\n",
519
+ "Target: tensor([4, 3, 2, 0, 4, 2, 2, 2])\n",
520
+ "Out: [3, 4, 3, 2, 4, 1, 3, 0]\n",
521
+ "Target: tensor([3, 4, 3, 2, 4, 1, 3, 0])\n",
522
+ "Out: [0, 0, 3, 2, 1, 0, 4, 4]\n",
523
+ "Target: tensor([0, 0, 3, 2, 2, 0, 4, 4])\n",
524
+ "Out: [4, 0, 4, 0, 3, 2, 3, 3]\n",
525
+ "Target: tensor([4, 3, 4, 0, 3, 2, 3, 0])\n",
526
+ "Out: [1, 0, 3, 4, 0, 1, 2, 2]\n",
527
+ "Target: tensor([1, 0, 3, 4, 0, 0, 2, 2])\n",
528
+ "Out: [1, 2, 4, 3, 2, 3, 4, 0]\n",
529
+ "Target: tensor([1, 2, 3, 3, 2, 3, 4, 0])\n",
530
+ "Epoch: 0 [320/400 (80%)]\tLoss: 0.581446\n",
531
+ "Out: [4, 3, 1, 2, 1, 4, 1, 4]\n",
532
+ "Target: tensor([4, 1, 1, 2, 1, 3, 2, 2])\n",
533
+ "Out: [0, 3, 3, 0, 1, 4, 2, 1]\n",
534
+ "Target: tensor([3, 3, 3, 0, 1, 4, 2, 1])\n",
535
+ "Out: [1, 3, 4, 3, 2, 2, 0, 4]\n",
536
+ "Target: tensor([1, 3, 0, 3, 1, 2, 0, 4])\n",
537
+ "Out: [2, 0, 3, 4, 3, 0, 4, 2]\n",
538
+ "Target: tensor([2, 0, 0, 4, 4, 0, 4, 2])\n",
539
+ "Out: [3, 4, 0, 4, 3, 4, 2, 0]\n",
540
+ "Target: tensor([3, 4, 0, 4, 3, 4, 0, 0])\n",
541
+ "Out: [1, 0, 3, 2, 2, 0, 1, 4]\n",
542
+ "Target: tensor([1, 0, 3, 2, 2, 0, 1, 4])\n",
543
+ "Out: [0, 1, 2, 1, 4, 3, 1, 2]\n",
544
+ "Target: tensor([0, 1, 2, 1, 4, 3, 1, 2])\n",
545
+ "Out: [3, 4, 1, 1, 0, 4, 2, 2]\n",
546
+ "Target: tensor([3, 4, 1, 1, 0, 3, 2, 4])\n",
547
+ "Out: [4, 4, 2, 1, 2, 3, 0, 4]\n",
548
+ "Target: tensor([4, 4, 2, 1, 2, 3, 0, 4])\n",
549
+ "\n",
550
+ "Test set: Avg. loss: 0.0947, Accuracy: 43/50 (86%)\n",
551
+ "\n"
552
+ ]
553
+ }
554
+ ],
555
+ "source": [
556
+ "# train the model\n",
557
+ "for epoch in range(epochs):\n",
558
+ " model.train()\n",
559
+ " for batch_idx, (data, target) in enumerate(train_loader):\n",
560
+ " optimizer.zero_grad()\n",
561
+ " output = model(data)\n",
562
+ " print(\"Out: \", [a.argmax().item() for a in output])\n",
563
+ " print(\"Target: \", target)\n",
564
+ " loss = loss_fn(output, target)\n",
565
+ " loss.backward()\n",
566
+ " optimizer.step()\n",
567
+ " if batch_idx % 10 == 0:\n",
568
+ " print('Epoch: {} [{}/{} ({:.0f}%)]\\tLoss: {:.6f}'.format(\n",
569
+ " epoch, batch_idx * len(data), len(train_loader.dataset),\n",
570
+ " 100. * batch_idx / len(train_loader), loss.item()\n",
571
+ " ))\n",
572
+ "\n",
573
+ " # test the model\n",
574
+ " model.eval()\n",
575
+ " test_loss = 0\n",
576
+ " correct = 0\n",
577
+ " with torch.no_grad():\n",
578
+ " for data, target in test_loader:\n",
579
+ " output = model(data)\n",
580
+ " test_loss += loss_fn(output, target).item()\n",
581
+ " pred = output.argmax(dim=1, keepdim=True)\n",
582
+ " correct += pred.eq(target.view_as(pred)).sum().item()\n",
583
+ "\n",
584
+ " test_loss /= len(test_loader.dataset)\n",
585
+ " print('\\nTest set: Avg. loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\\n'.format(\n",
586
+ " test_loss, correct, len(test_loader.dataset),\n",
587
+ " 100. * correct / len(test_loader.dataset)\n",
588
+ " ))"
589
+ ]
590
+ },
591
+ {
592
+ "cell_type": "code",
593
+ "execution_count": 51,
594
+ "metadata": {},
595
+ "outputs": [],
596
+ "source": [
597
+ "model_scripted = torch.jit.script(model)\n",
598
+ "model_scripted.save('../models/mobilenet.pt')"
599
+ ]
600
+ },
601
  {
602
  "cell_type": "code",
603
  "execution_count": null,