1.利用pytorch的nn.Module快速构建简单CNN识别自己的手写数字图片

最近在学习pytorch,在学过了linear分类以后尝试入门cnn,但是网上的教程基本都是使用别人标注好的手写数据集。于是我看了下读入图片的数据格式,发现是一个n*1*size*size的数组,了解到这个基本情况以后,我们可以尝试不用导入mnist数据集而使用自己的训练模型来帮助我们更好的理解相关参数的意义。

我们主要使用pytorch包装好的nn.Module来训练我们的神经网络,手工做的暂不做讨论,同时我也推荐使用这种方式来训练神经网络。

由于简书不支持代码块的引入,我会把代码放在文末链接。

本教程适用于pytorch 0.3.0 python 3.6.5

首先在开头把需要的包引入


这是pytorch基本的几个包

随后我们写下第一行:

torch.set_default_tensor_type("torch.DoubleTensor")

如果没有这句代码pytorch就会提示RuntimeError: Expected object of type torch.DoubleTensor but found type torch.FloatTensor for argument #2 'weight',大家可以试试去掉这一句


随后,我们就要开始定义我们的“训练模型了”

trainx就是两张要作为输入的5*5的图片,一个是1,一个是2。我先解释为什么有一个数字是0.0,因为pytorch要求均是小数格式,加了一个0.0,整个数组就会自动转换成为float了。trainy也有两组数据,第一组输出[1,0]表示输出的是1,第二组输出的是[0,1]表示输出的是2,10的话就往上推广即可。至此我们的训练数据就准备好了。按照前面所说是一个n*1*size*size的数组,满足这个条件就可以了,因为从mnist里面读取进来的数据也是这样的。

准备好训练数据以后,就要开始定义最重要的类了:


先来讲解__init__ 的内容:

第一步是执行父类的构造函数,没毛病

13行,定义第一个卷积层,我比较推荐使用nn.Sequential方式,这样当在调用的时候conv1(x),他就会自动按照顺序执行括号里的步骤:卷积归一激活池化

18行定义第二个卷积层,同上

23行定义一层全连接层,输出2个结果,即[1,0]还是[0,1]的形式

关键我要详细说说前两个卷积层的结构


第一个卷积层,1,16,其含义是我们将会给他输入一张5*5的图片,他会输出16个特征层,什么是特征层呢?类似下图

特征层就是左边第一个conv,看到了吧【当然这张图是我在网上找来参考的】,一张图片连了16根线到16个conv层上,这就是第一个步骤,代码中我们定义了kernel_size=5,padding=1,那么经过这一步以后,一张5*5的图片会输出3*3的一个结果

所谓padding,就是在图片周围补上一圈其他的数,kernel就是视野大小,如果不太清楚这两个概念的可以百度一下补补概念


在经过卷积以后,5*5变成了3*3,随后是归一化和激活,在最后一步是最大池化,池化的kernel为2,那么一个3*3的会变为2*2的输出

那么经过self.conv1函数以后,现在得到了16张2*2的特征图


那么给下一层的输入就是16张2*2的特征图了,第二个卷积层就要对输入作出一点改变了


我们可以看到,第二个卷积层接受来自上一层的16个特征图输入,同时输出32个特征图,那么此时kernel_size就要按照2*2来设计了,我们可以设置 kernel_size=2,padding=1,那么输出就为32个3*3的特征图,再经过池化以后,得到32个1*1的输出 


那么最后一层就是一个全连接层把32个输出连接到2个输出节点来,这就是整个网络的结构

网络定义好了,我们接下来就要定义数据正向传播的forward函数,pytorch内部拥有自动求导机制,所以求导的机制不用我们特别理解,我们只需定义好正向传播即可


我们依次来解说:

第一步,直接把x放入conv1中运算

第二步,接着把第一层的输出放到第二层中运算

第三部,最重要的,out.view,在out=self.conv2(out),经过第二层卷积操作以后,现在我们得到的是一个2*32*1*1的矩阵,我们若要全连接,则要把矩阵从2*32*1*1化为2*32,那么我们就要用到view函数

其实pytorch和numpy里面关于矩阵reshape的函数很多,视情况使用。

在我们统一了矩阵以后,就可以接着把结果放入FullConnection层中进行运算了,函数的最后返回结果。

好了,这就是CLASS的核心定义,我们开始训练这个神经网络。


好了那大概就是这样了~滑稽

代码地址 点我进入!!!!!

有问题希望一起讨论。

码字不易,如果你觉得对你有帮助,希望可以动手赞助一下~你的支持是更新的动力

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,692评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,482评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,995评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,223评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,245评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,208评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,091评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,929评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,346评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,570评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,739评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,437评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,037评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,677评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,833评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,760评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,647评论 2 354

推荐阅读更多精彩内容

  • 每过一段时间,总会有一个python库被开发出来,改变深度学习领域。而PyTorch就是这样一个库。 在过去的几周...
    AiTechYun阅读 4,019评论 0 4
  • CNN on TensorFlow 本文大部分内容均参考于: An Intuitive Explanation o...
    _Randolph_阅读 7,696评论 2 31
  • 嗨,来自95后的一个小女孩,噢不,老女孩~~随着时间的流逝,好多东西都在改变,都在失去,那些每天我们总会习以为常的...
    小奕_f7f8阅读 297评论 1 0
  • 前情回顾 二十 陌生男人 苏寻离无殇在府丞的带领下去了关押罗重庆的牢房。 是个魁梧的汉子,坐在墙角打瞌睡,头发凌乱...
    薛英葰阅读 531评论 0 2
  • 如果有一天我上班迟到了,不知道我可否告诉我的老板,我不是故意的,我只是陷入了梦境,因留恋而徘徊在那里无法苏醒。 梦...
    晓婷子阅读 349评论 3 1