2
2
# @Author: Arunabh Sharma
3
3
# @Date: 2024-02-19 23:14:58
4
4
# @Last Modified by: Arunabh Sharma
5
- # @Last Modified time: 2024-02-21 00:31:38
5
+ # @Last Modified time: 2024-02-21 23:16:35
6
6
7
7
8
8
# Basic quadratic autograd example
11
11
import torchvision
12
12
import cv2
13
13
14
+ device = torch .device ("cuda" if torch .cuda .is_available () else "cpu" )
15
+
14
16
15
17
def quadratic_function ():
16
18
x = torch .tensor (8.0 , requires_grad = True )
@@ -134,14 +136,18 @@ def transfer_learning(train_loader, model_save=True):
134
136
resnet .fc = torch .nn .Linear (resnet .fc .in_features , 10 )
135
137
print (resnet )
136
138
137
- n_iter = 5
139
+ resnet = resnet .to (device )
140
+
141
+ epoch = 5
138
142
criterion = torch .nn .CrossEntropyLoss ()
139
- optimizer = torch .optim .SGD (resnet .parameters (), lr = 1e-6 )
143
+ optimizer = torch .optim .Adam (resnet .parameters ())
140
144
141
- for i in range (n_iter ):
145
+ for i in range (epoch ):
142
146
data_iter = iter (train_loader )
143
147
while (ret := next (data_iter , None )) is not None :
144
148
images , labels = ret [0 ], ret [1 ]
149
+ images = images .to (device )
150
+ labels = labels .to (device )
145
151
loss = criterion (resnet (images ), labels )
146
152
147
153
print (f"Iteration: { i } , Loss: { loss .item ()} " )
@@ -155,8 +161,8 @@ def transfer_learning(train_loader, model_save=True):
155
161
return resnet
156
162
157
163
158
- def explore_transfer_learning (test_loader ):
159
- model = torch .load ("model.ckpt " )
164
+ def explore_transfer_learning (test_loader , model_name ):
165
+ model = torch .load (model_name ). to ( "cpu " )
160
166
model .eval ()
161
167
162
168
window_name = "Image"
@@ -179,6 +185,8 @@ def explore_transfer_learning(test_loader):
179
185
180
186
with torch .no_grad ():
181
187
for image , label in test_loader :
188
+ # image_r = image.reshape(-1, 28 * 28)
189
+ # pred_label = model(image_r)
182
190
pred_label = model (image )
183
191
img = image [0 ].numpy ().transpose (1 , 2 , 0 )
184
192
img = cv2 .resize (img , (800 , 800 ))
@@ -211,7 +219,45 @@ def explore_transfer_learning(test_loader):
211
219
exit (0 )
212
220
213
221
222
+ class NeuralNetwork (torch .nn .Module ):
223
+ def __init__ (self ):
224
+ super (NeuralNetwork , self ).__init__ ()
225
+ self .fc0 = torch .nn .Linear (28 * 28 , 128 )
226
+ self .nl1 = torch .nn .ReLU ()
227
+ self .fc1 = torch .nn .Linear (128 , 10 )
228
+
229
+ def forward (self , x ):
230
+ return self .fc1 (self .nl1 (self .fc0 (x )))
231
+
232
+
233
+ def train_nn (train_loader , model_save = True ):
234
+ model = NeuralNetwork ().to (device )
235
+
236
+ epoch = 1
237
+ criterion = torch .nn .CrossEntropyLoss ()
238
+ optimizer = torch .optim .Adam (model .parameters ())
239
+
240
+ for i in range (epoch ):
241
+ data_iter = iter (train_loader )
242
+ while (ret := next (data_iter , None )) is not None :
243
+ images , labels = ret [0 ], ret [1 ]
244
+ images = images .reshape (- 1 , 28 * 28 ).to (device )
245
+ labels = labels .to (device )
246
+ loss = criterion (model (images ), labels )
247
+
248
+ print (f"Iteration: { i } , Loss: { loss .item ()} " )
249
+
250
+ optimizer .zero_grad ()
251
+ loss .backward ()
252
+ optimizer .step ()
253
+ if model_save :
254
+ torch .save (model , "nn.ckpt" )
255
+
256
+ return model
257
+
258
+
214
259
if __name__ == "__main__" :
215
260
train_loader , test_loader = torch_dataset_loader (False )
216
- # _ = transfer_learning(train_loader)
217
- explore_transfer_learning (test_loader )
261
+ _ = transfer_learning (train_loader )
262
+ explore_transfer_learning (test_loader , "model.ckpt" )
263
+ # explore_transfer_learning(test_loader, "nn.ckpt")
0 commit comments