作业2:反向传播、训练神经网络和卷积神经网络

在本作业中(2018版),将练习编写反向传播代码,训练神经网络和卷积神经网络。本作业的目标如下:

  • 理解神经网络及其分层结构
  • 理解并实现(向量化)反向传播
  • 实现多个用于神经网络最优化的更新方法
  • 实现用于训练深度网络的批量归一化( batch normalization )和层归一化(Layer Normalization)。
  • 实现随机失活(dropout)。
  • 进行高效的交叉验证并为神经网络结构找到最好的超参数
  • 理解卷积神经网络的结构,并积累在数据集上训练此类模型的经验。
  • 获得主要深度学习框架的经验,例如TensorFlowPyTorch

注:本次作业在本地完成。

本人作业代码点击这里

0 环境搭建

  1. 本次作业都是在本地Windows10系统上完成。

  2. 最后一个问题需要使用TensorFlow或PyTorch训练卷积神经网络,所以首先需要能有NVIDIA GPU,(我的是GTX 860M,很差的显卡,凑合能用。)如果有先百度一下自己的显卡能否支持TensorFlow GPU版本。理论上也可以在没有GPU的情况下完成整个任务,尽管这会使训练变得更慢。参考代码在没有GPU的双核笔记本电脑上运行10-15分钟。

  3. 如果符合硬件要求,建议安装TensorFlow GPU版本,这样训练速度会很快。安装需要先搭建其工作环境,包括显卡驱动、CUDA、cuDNN等。详细的搭建教程请参考本人的一篇相关攻略:点击这里(不过最后一步建议安装tensorflow1.9版本,因为版本过高cuDNN会出问题:pip install tensorflow-gpu==1.9.0

  4. 下载作业并解压(2018年版本2):点击这里.

  5. 下载 CIFAR-10 数据。有三种方式,一是可以去Linux系统,按照官方操作,进入assignment2文件夹,执行:

cd cs231n/datasets
./get_datasets.sh

将下载的数据拷贝到Windows下相同位置即可;二是直接去官网下载,解压到cs231n/datasets,下载地址点击这里;三是如果已完成作业一,可以直接将作业一里的数据集拷贝到作业二相同位置。

  1. 在assignment2目录下启用IPython notebook服务器,输入指令:jupyter notebook,自动进入浏览器打开Notebook,选择相应的 .ipynb文件即可。

1 全连接神经网络

要求:IPython Notebook文件FullyConnectedNets.ipynb将会介绍模块化设计,然后使用不同的层来构建任意深度的全连接网络。为了对模型进行最优化,还需要实现几个常用的更新方法。

要点
1. 数据结构与之前的不同,这次是4维的,比如(50000, 3, 32, 32);
2. 全连接、ReLU、softmax/svm损失都比较简单,和之前类似;
3. 合理性检查、梯度检查、更新方式,按说明做即可;
4. 专门用于训练的Solver模块设计的很巧妙,要能看懂!
5. 不定深度的全连接网络注意分析网络初始化特点,采用循环结构。

2 批量归一化

要求:在IPython Notebook文件BatchNormalization.ipynb中需要实现批量归一化,然后将其应用于深度全连接网络的训练中。

要点
1. 批量归一化的前向传播反向传播一定要参考论文!
2. 理解批量归一化对权重初始化的作用,以及批量大小对批量归一化的影响;
3. 层归一化是为了解决批量尺寸的问题,实现过程就是批量归一化的转置。
4. 将批量/层归一化加到全连接网络,理清逻辑。

3 随机失活(Dropout)

要求:IPython Notebook文件Dropout.ipynb将会实现随机失活,然后在模型泛化中检查它的效果。

要点
1. 随机失活的实现很简单,前向反向都承掩模即可,对抑制过拟合效果特别好;
2. 将随机失活加入到全连接网络时,可以自定义一组新的前向传播反向传播函数,包含全连接 - 批量归一化 - Dropout - ReLU。

4 卷积神经网络

要求:在IPython Notebook文件ConvolutionalNetworks.ipynb中实现几个卷积神经网络中常用的新的层。

要点
1. 卷积层的实现比较复杂,不考虑速度时可以使用4层循环嵌套;
2. 卷积层反向传播原理在本人作业中有详细介绍;
3. 池化层相对来说比较简单,也需要使用循环;
4. 以上的实现不用考虑速度,因为早已有了快速的卷积池化,可以直接用;
5. 空间批量归一化可以变换数据后直接调用批量归一化;
6. 组归一化的实现逻辑和层归一化很相似。

5 使用PyTorch / TensorFlow

要求:对于最后一部分,使用TensorFlow或PyTorch这两个流行且功能强大的深度学习框架。只需要完成这两个笔记本中的一个,不需要同时执行这两项工作。打开PyTorch.ipynbTensorFlow.ipynb。 在那里了解框架的工作原理,最终在CIFAR-10上训练自己设计的卷积网络,以获得最佳性能。

要点
1. 选择TensorFlow环境:
打开命令行输入:

activate tensorflow  # 激活自己的TensorFlow环境
conda install ipykernel  
python -m ipykernel install --user --name tensorflow --display-name "Python tensorflow"
pip install matplotlib  # 安装需要的包

这样再次使用jupyter notebook命令打开笔记时就可以选择conda环境了,方法是进入TensorFlow.ipynb点击上方 kernel->change kernel ->Python tensorflow,选中的kernel只对当前的文件有效。如果遇到cuDNN初始化失败的错误,一般来说是因为TensorFlow版本过高,建议安装1.9版本:pip install tensorflow-gpu==1.9.0
2. 第一次运行需要下载数据,耐心等待,以后就不用再下载了。处理后的数据是:
(50000, 32, 32, 3)格式
3. 剩下的跟着步骤做即可,基本都是以两层神经网络为例,模仿者实现三层卷积网络,内容很相似;
4. 注意TensorFlow的静态图结构,所有的节点在计算图上,运行时提供数据实现真正的计算;API的层次会越来越高,用起来也会越来越方便;
5. 最后一步自由训练时,提示中说不能使用层对象构建批量归一化和Dropout,否则train_34()函数失效,实际上没有问题;由于图片数据尺寸很小,不建议使用大的卷积核,最大5x5就可以了;如果使用很深的网络,建议一定要使用Dropout来抑制过拟合;通过全连接网络时,需要使用flatten()函数展平数据;主要调节的超参数就是学习率、随机失活比、卷积核尺寸、卷积核数量等;本人的方法可以在5次epoch之内达到73%的验证准确率,感兴趣可以参考。

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