【Kaggle-MNIST之路】CNN+改进过的损失函数(三)
简述
在上一个版本上的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+改进过的损失函数(三)相关推荐
- 【Kaggle-MNIST之路】CNN+改进过的损失函数+多次的epoch(四)
简述 上一个代码 在看完很多版本的代码,看了下,发现一个问题,随着epoch的次数逐渐上升,精度会一定程度上上升.(有时候也不一定) 所以,怀疑自己的这个代码还有改进的空间,所以,在提高了一下epoc ...
- 【Kaggle-MNIST之路】CNN结构改进+改进过的损失函数(五)
简述 基于之前的框架,修改了一下CNN的结构 [Kaggle-MNIST之路]CNN+改进过的损失函数+多次的epoch(四) 评分:0.988 排名:1200+ 代码 和之前的一样,会把模型生成出来 ...
- 【Kaggle-MNIST之路】CNN结构再改进+交叉熵损失函数(六)
简述 这里再添加了一个卷积层.用一个kernal=4的卷积层做一个卷积之后,再做映射. 基于之前的一个版本 [Kaggle-MNIST之路]CNN结构改进+改进过的损失函数(五) 成绩:0.9898 ...
- CV之CNN:基于tensorflow框架采用CNN(改进的AlexNet,训练/评估/推理)卷积神经网络算法实现猫狗图像分类识别
CV之CNN:基于tensorflow框架采用CNN(改进的AlexNet,训练/评估/推理)卷积神经网络算法实现猫狗图像分类识别 目录 基于tensorflow框架采用CNN(改进的AlexNet, ...
- 多种深度模型实现手写字母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 ...
- python机器学习及实践_机器学习入门之《Python机器学习及实践:从零开始通往Kaggle竞赛之路》...
本文主要向大家介绍了机器学习入门之<Python机器学习及实践:从零开始通往Kaggle竞赛之路>,通过具体的内容向大家展现,希望对大家学习机器学习入门有所帮助. <Python 机 ...
- alin的学习之路(Linux系统编程:三)(vim,gcc,库,gdb)
alin的学习之路(Linux系统编程:三)(vim,gcc,库,gdb) 1.vim的使用 vim有三种模式:命令模式,末行模式,编辑模式 光标的移动[命令模式] h 向左 ,j 向下,k 向上,l ...
- 回顾一些重要的CNN改进模型(你真的了解 Convolutional Neural Networks 么)
转载自: 干货 | 你真的了解 Convolutional Neural Networks 么 https://mp.weixin.qq.com/s?__biz=MzAwMjM3MTc5OA==&am ...
- Keras在mnist上的CNN实践,并且自定义loss函数曲线图
使用keras实现CNN,直接上代码: from keras.datasets import mnist from keras.models import Sequential from keras. ...
最新文章
- 通讯组基本管理任务一
- 18怎么确定板子形状_板绘怎么画线条排线?板绘小白画线不稳怎么办?
- 图解手动全面检查管理本机端口
- linux学习笔记(5)
- spring基于XML的AOP-编写必要的代码
- 配置管理-SVN使用指南-Linux
- 蚂蚁的开放:想办法摸到10米的篮筐
- MySQL全文索引Match Against与Like比较
- JAVA(-Xms,Xmx,Xmn-XX:newSize,-XX:MaxnewSize,-XX:PermSize,-XX:MaxPermSize)区别
- Java——全局变量与局部变量的区别
- 实现Pow(x,n),报错超出最大堆栈Maximum stack exceeded 以及 Math.floor用法(记录走过的坑)
- PTA - 厘米换算英尺英寸(C语言)
- 项目管理中用什么工具可以增强团队协作?
- grldr文件引导windows xp、ubuntu系统
- 日照分析的计算机精度,日照分析的部分参数详解
- 基于SSM的大学生创业众筹平台网站 毕业设计-附源码212000
- 关于安装公司监控软件后导致Mac电脑需要每天重启4次才能连网的解决办法
- 「TCG 规范解读」初识基础设施工作组
- 怎样使用1M的内存排序100万个8位数
- 赛桨PaddleScience v1.0 Beta:基于飞桨核心框架的科学计算通用求解器
热门文章
- 哪个是更早的时间 date_淘宝用户行为分析(漏斗模型+pv,uv,pv/uv,复购率,用户活跃时间段)...
- leetcode-169.求众数
- 认真了解一下javascript
- 电子商务java b2b b2c o2o平台
- 搭建本地Yum软件源安装Cloudera Manager 5
- 思科:四分之三的物联网项目将以失败告终
- JAVA学习笔记--初始化与清理
- 深入理解Javascript闭包(一)
- Visual C#之核心语言
- 《JAVA与模式》之责任链模式