assignment2
Q1: Fully-connected Neural Network (25 points)
- “独立完成” Fully-connected Neural Network 作业,还是挺开心的
- 5 层 Fully-connected Neural Network 加上 dropout 后的准确效率为 52% 左右,加了 batch_norm 后的准确率只有 10% 。 另外一个同学的作业结果刚好相反,他的加上 batch norm 效果会很好, 但是他的加上 dropout 后的准确率只有 10%。一直不理解这是为什么? 经过一番努力总算修改加上 batch norm 后准确率只有 10% 的问题(应该是之前修改下标越界, bn_param 赋值为 self.bn_params[0]. 导致 running_var 和 running_mean 这两个变量在后续得不到有效的更新——一直在瞎更新)。batch norm 能有效地加快学习速度, dropout 则是能起到一定抑制过拟合的作用
Q2: Batch Normalization (25 points)
- 看着别人的答案才写出来的
- 最后的三张图分析:weight_scale 初始化矩阵 w 的系数,可以看出 weight_scale 和 train_loss、val_loss 有很大关系,在 weight_loss 达到一定值时 没有经过 batch norm 的计算无法收敛。先不说原因吧,就图中现象而言—— weight scale 最好取 10-2 左右。现在来看下网络结构和 weight_scale 的关系, 简单地改下网络结构发现 图片中的现象没有变化(待会找下,看看有没有论文解释这个现象)。将初始网络结构由 [50, 50, 50, 50, 50, 50, 50 ] 中的 50 全修改为 200, 结论依然成立且因为网络过于复杂经过 batch norm 的模型产生了过拟合。弱数据关系中可能隐藏着强数据关系。以上采用的优化器是 adam, 采用 sgd_momentum 和 rmsprop 优化器也出现了类似的现象。 将 batch norm 版本和非 batch norm 版本的权重矩阵打印出来可以看出 2 个有意思的现象:1)batch norm 版本基本每次迭代都会更新 7 层矩阵数值, 非 batch norm 大部分时候都是更新最后一层的系数(需要好好研究一下 solver 这个函数的工作原理)。 2) batch norm 版本的 权重矩阵有点特殊, 基本是 2 种数值分布矩阵交替迭代 一个是近似 全 1 矩阵, 另外一个矩阵的数值基本分布在 0.01 ~ 0.03 间。还需要好好研究为什么~
Q3: Dropout (10 points)
Q4: Convolutional Networks (30 points)
- layers.py 中的卷积网络代码 copy 自网络, 因为这些代码原理简单但是实现复杂,所以 copy from the network。 batch normalization 和 dropu out 的代码是自己写的(是为了了解这 2 个概念到底是怎么实现的, 但是卷积网络的概念已经理解,没有必要死磕!)
- 对 numpy 的要求还是挺高的,如果 numpy 功底不够。写的代码会很繁琐(我现在的 numpy 功底不够,不如抄一题答案,消化后再解答下一题)。
- spatial batch normalization : forward 是自己写的, backward 是抄的
- cnn.py 直接放弃,不想写。累的荒。还是自己写吧!
- 收获: 会用 tuple 版本的 axis !layers.py 的卷积部分共 2 个函数是抄网友的, max_pool 和其它部分则是自己写的。如果以后有机会可以使用 cs231n 中自带的 im2col 加快卷积计算速度
Q5: PyTorch / TensorFlow on CIFAR-10 (10 points)
Q6: Do something extra! (up to +10 points)
探索项目
- 图片的风格转换
- 用卷积网络代替传统的图片处理方法处理图片——暂不限项目
- 卷积为了在图像处理上有哪些好玩的点子
- 做 assignment3 时才发现,原来 assignment2 中很多题目在 assignment3 都有答案!!
转载于:https://www.cnblogs.com/tmortred/p/8641498.html