日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

【Kaggle-MNIST之路】CNN+改进过的损失函数+多次的epoch(四)

發布時間:2025/4/16 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Kaggle-MNIST之路】CNN+改进过的损失函数+多次的epoch(四) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡述

  • 上一個代碼

在看完很多版本的代碼,看了下,發現一個問題,隨著epoch的次數逐漸上升,精度會一定程度上上升。(有時候也不一定)

所以,懷疑自己的這個代碼還有改進的空間,所以,在提高了一下epoch的次數。但是要稍微降低一下Learning Rate。

邏輯解釋

  • 稍微降低一下Learning Rate的原因:
    假設是一個簡單的優化問題,擔心LR太大,就直接滑動過去了。。

目前成績

  • 分數:0.9790
  • 排名:1500+

代碼

import pandas as pd import torch.utils.data as data import torch import torch.nn as nnfile = './all/train.csv' LR = 0.0008class MNISTCSVDataset(data.Dataset):def __init__(self, csv_file, Train=True):self.dataframe = pd.read_csv(csv_file, iterator=True)self.Train = Traindef __len__(self):if self.Train:return 42000else:return 28000def __getitem__(self, idx):data = self.dataframe.get_chunk(100)ylabel = data['label'].as_matrix().astype('float')xdata = data.ix[:, 1:].as_matrix().astype('float')return ylabel, xdataclass CNN(nn.Module):def __init__(self):super(CNN, self).__init__()self.layer1 = nn.Sequential(# (1, 28, 28)nn.Conv2d(in_channels=1,out_channels=16,kernel_size=5, # 卷積filter, 移動塊長stride=1, # filter的每次移動步長padding=2,groups=1),# nn.BatchNorm2d(16),# (16, 28, 38)nn.ReLU(),nn.MaxPool2d(kernel_size=2)# (16, 14, 14))self.layer2 = nn.Sequential(nn.Conv2d(in_channels=16,out_channels=32,kernel_size=5,stride=1,padding=2),# nn.BatchNorm2d(32),nn.ReLU(),nn.MaxPool2d(kernel_size=2))self.layer3 = nn.Linear(32 * 7 * 7, 10)def forward(self, x):# print(x.shape)x = self.layer1(x)# print(x.shape)x = self.layer2(x)# print(x.shape)x = x.view(x.size(0), -1)# print(x.shape)x = self.layer3(x)# print(x.shape)return xnet = CNN()loss_function = nn.MultiMarginLoss() optimizer = torch.optim.Adam(net.parameters(), lr=LR) EPOCH = 5 for epo in range(EPOCH):mydataset = MNISTCSVDataset(file)train_loader = torch.utils.data.DataLoader(mydataset, batch_size=1, shuffle=True)for step, (yl, xd) in enumerate(train_loader):xd = xd.reshape(100, 1, 28, 28).float()output = net(xd)yl = yl.long()loss = loss_function(output, yl.squeeze())optimizer.zero_grad()loss.backward()optimizer.step()if step % 20 == 0:print('step %d-%d' % (step, epo), loss)torch.save(net, 'divided-net.pkl')

總結

到這里,就很容易搞懂了,為什么大家都喜歡單獨把模型的放在一個固定的文件夾中。現在也是理解了。
因為如果要改那個生成數據的py文件的話,重新加載是需要有復制這個類到另外生成數據的py文件下的。

這樣就很麻煩了,所以大家就會提出搞一個模型文件夾。然后只需要加載的時候的模型參數就好了。

此外,提高一下epoch的次數,可以提高精度。但是理論上這個是有限的。
接下來只能改模型,改損失函數,改讀取數據方式來提高了。

總結

以上是生活随笔為你收集整理的【Kaggle-MNIST之路】CNN+改进过的损失函数+多次的epoch(四)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。