日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

簡述

  • 上一個代碼

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

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

邏輯解釋

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

目前成績

  • 分數(shù):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')

總結(jié)

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

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

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

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。