今天起個早8:00開車前往台中參加同齡堂姊的訂婚家宴,出門前發現昨晚訓練結果居然還沒跑完,想一想好像也暫時不能做啥,決定就放著繼續跑。晚上回到家已經19:00真的累~但看到準新娘和準新郎幸福的樣子,覺得心生羨慕呀~~ 祝福堂姊新婚愉快幸福 ???
1.確認昨天AlexNet訓練結果
2.新學習: 模型儲存&模型測試(Test)
(1)經過一個晚上約8小時的訓練,以為會跑完10個Epoch,殊不知竟然只完成一個(暈~~
原來Train_dat共有7162個batch,所以跑一輪訓練(1個Epoch)就要約8個小時。因為若要訓練完10個Epoch,要約3.5天實在不能接受,這樣鐵人賽就直接完結了。最終跑到第3個Epoch就終止訓練,並將模型存起來,進行第二部分的測試。
(1)模型儲存
方法1:只保存模型參數
# model_alexnet為經過遷移式學習的AlexNet模型
AlexNet_path_state_dict = str(output_path + "./ALL_AlexNet_model_dict.pkl")
torch.save(model_alexnet.state_dict(), AlexNet_path_state_dict)
方法2:保存整個模型(耗費內存)
AlexNet_path_model = str(output_path + "./ALL_AlexNet_model.pkl")
torch.save(model_alexnet, AlexNet_path_model)
(2)模型測試(Test)
def test(model, test_loader, optimizer):
print(model)
model.eval()
test_loss = 0
correct = 0
with torch.no_grad():
print(len(test_loader))
for i, data in islice(enumerate(test_loader),0,10): # 只用89個batch來測試
#for i, data in enumerate(test_loader, 0): # 所有batch都用來測試
#print(i)
x, y = data
x = x.cuda()
y = y.cuda()
optimizer.zero_grad()
y_hat = model(x)
test_loss += criterion(y_hat, y).item()
pred = y_hat.max(1, keepdim=True)[1]
correct += pred.eq(y.view_as(pred)).sum().item()
test_loss /= (i+1)
len_test_data = batch_size*(i+1)
print("Test_data用來測試的batxh數量: {}".format(i+1))
print("Lens of test_data: {}".format(len_test_data))
print('Test set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\n'.format(
test_loss, correct, len_test_data, 100. * correct / len_test_data))
if test_flag:
model = torch.load(save_model_path, map_location='cuda:0') # 載入儲存的模型
test(model, test_loader, optimizer)
model.eval()
完成AlexNet設定。
研究進階設定: early stopping, checkpoint訓練中暫存機制、選用之前提及更輕量型&準確率更高的模型進行訓練。
心得小語:
今天時間蠻短暫的,但還是盡力的做學習和統整,明天又是新的一周,不論是工作還是鐵人賽都要繼續加油&精進!
今日工時50min*2
愛人和被人愛著都是人生最大的幸福
To love and to be loved is the greatest happiness of existence.