简述

在上一个版本上的CNN的框架的基础上。

  • 上一个版本
  • 卷积神经网络CNN入门【pytorch学习】

调用了上面的框架。

目前:

  • 分数:0.9160
  • 排名:2400+

框架代码

import pandas as pd
import torch.utils.data as data
import torch
import torch.nn as nnfile = './all/train.csv'
LR = 0.01class 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, xdatamydataset = MNISTCSVDataset(file)train_loader = torch.utils.data.DataLoader(mydataset, batch_size=1, shuffle=True)class 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)
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' % step, loss)torch.save(net, 'divided-net.pkl')

生成数据的代码也需要改改

import torch
import torch.utils.data as data
import pandas as pd
import csv
import torch.nn as nnfile = './all/test.csv'class MNISTCSVDataset(data.Dataset):def __init__(self, csv_file, Train=False):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)xdata = data.as_matrix().astype('float')return 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 = torch.load('divided-net.pkl')myMnist = MNISTCSVDataset(file)
test_loader = torch.utils.data.DataLoader(myMnist, batch_size=1, shuffle=False)values = []
for _, xd in enumerate(test_loader):xd = xd.reshape(100, 1, 28, 28).float()output = net(xd)values = values + output.argmax(dim=1).numpy().tolist()with open('./all/sample_submission.csv', 'r') as fp_in, open('newfile.csv', 'w', newline='') as fp_out:reader = csv.reader(fp_in)writer = csv.writer(fp_out)header = 0for i, row in enumerate(reader):if i == 0:writer.writerow(row)else:row[-1] = str(values[i - 1])writer.writerow(row)

【Kaggle-MNIST之路】CNN+改进过的损失函数(三)相关推荐

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

    简述 上一个代码 在看完很多版本的代码,看了下,发现一个问题,随着epoch的次数逐渐上升,精度会一定程度上上升.(有时候也不一定) 所以,怀疑自己的这个代码还有改进的空间,所以,在提高了一下epoc ...

  2. 【Kaggle-MNIST之路】CNN结构改进+改进过的损失函数(五)

    简述 基于之前的框架,修改了一下CNN的结构 [Kaggle-MNIST之路]CNN+改进过的损失函数+多次的epoch(四) 评分:0.988 排名:1200+ 代码 和之前的一样,会把模型生成出来 ...

  3. 【Kaggle-MNIST之路】CNN结构再改进+交叉熵损失函数(六)

    简述 这里再添加了一个卷积层.用一个kernal=4的卷积层做一个卷积之后,再做映射. 基于之前的一个版本 [Kaggle-MNIST之路]CNN结构改进+改进过的损失函数(五) 成绩:0.9898 ...

  4. CV之CNN:基于tensorflow框架采用CNN(改进的AlexNet,训练/评估/推理)卷积神经网络算法实现猫狗图像分类识别

    CV之CNN:基于tensorflow框架采用CNN(改进的AlexNet,训练/评估/推理)卷积神经网络算法实现猫狗图像分类识别 目录 基于tensorflow框架采用CNN(改进的AlexNet, ...

  5. 多种深度模型实现手写字母MNIST的识别(CNN,RNN,DNN,逻辑回归,CRNN,LSTM/Bi-LSTM,GRU/Bi-GRU)

    多种深度模型实现手写字母MNIST的识别(CNN,RNN,DNN,逻辑回归,CRNN,LSTM/Bi-LSTM,GRU/Bi-GRU 1.CNN模型 1.1 代码 1.2 运行结果 2.RNN模型 2 ...

  6. python机器学习及实践_机器学习入门之《Python机器学习及实践:从零开始通往Kaggle竞赛之路》...

    本文主要向大家介绍了机器学习入门之<Python机器学习及实践:从零开始通往Kaggle竞赛之路>,通过具体的内容向大家展现,希望对大家学习机器学习入门有所帮助. <Python 机 ...

  7. alin的学习之路(Linux系统编程:三)(vim,gcc,库,gdb)

    alin的学习之路(Linux系统编程:三)(vim,gcc,库,gdb) 1.vim的使用 vim有三种模式:命令模式,末行模式,编辑模式 光标的移动[命令模式] h 向左 ,j 向下,k 向上,l ...

  8. 回顾一些重要的CNN改进模型(你真的了解 Convolutional Neural Networks 么)

    转载自: 干货 | 你真的了解 Convolutional Neural Networks 么 https://mp.weixin.qq.com/s?__biz=MzAwMjM3MTc5OA==&am ...

  9. Keras在mnist上的CNN实践,并且自定义loss函数曲线图

    使用keras实现CNN,直接上代码: from keras.datasets import mnist from keras.models import Sequential from keras. ...

最新文章

  1. 通讯组基本管理任务一
  2. 18怎么确定板子形状_板绘怎么画线条排线?板绘小白画线不稳怎么办?
  3. 图解手动全面检查管理本机端口
  4. linux学习笔记(5)
  5. spring基于XML的AOP-编写必要的代码
  6. 配置管理-SVN使用指南-Linux
  7. 蚂蚁的开放:想办法摸到10米的篮筐
  8. MySQL全文索引Match Against与Like比较
  9. JAVA(-Xms,Xmx,Xmn-XX:newSize,-XX:MaxnewSize,-XX:PermSize,-XX:MaxPermSize)区别
  10. Java——全局变量与局部变量的区别
  11. 实现Pow(x,n),报错超出最大堆栈Maximum stack exceeded 以及 Math.floor用法(记录走过的坑)
  12. PTA - 厘米换算英尺英寸(C语言)
  13. 项目管理中用什么工具可以增强团队协作?
  14. grldr文件引导windows xp、ubuntu系统
  15. 日照分析的计算机精度,日照分析的部分参数详解
  16. 基于SSM的大学生创业众筹平台网站 毕业设计-附源码212000
  17. 关于安装公司监控软件后导致Mac电脑需要每天重启4次才能连网的解决办法
  18. 「TCG 规范解读」初识基础设施工作组
  19. 怎样使用1M的内存排序100万个8位数
  20. 赛桨PaddleScience v1.0 Beta:基于飞桨核心框架的科学计算通用求解器

热门文章

  1. 哪个是更早的时间 date_淘宝用户行为分析(漏斗模型+pv,uv,pv/uv,复购率,用户活跃时间段)...
  2. leetcode-169.求众数
  3. 认真了解一下javascript
  4. 电子商务java b2b b2c o2o平台
  5. 搭建本地Yum软件源安装Cloudera Manager 5
  6. 思科:四分之三的物联网项目将以失败告终
  7. JAVA学习笔记--初始化与清理
  8. 深入理解Javascript闭包(一)
  9. Visual C#之核心语言
  10. 《JAVA与模式》之责任链模式