Neural Network(双层神经网络)
- 配合神经网络训练过程理论知识博客一起食用更好~
- 配合【深度学习】cs231n计算机视觉 Neural Network(两层神经网络)(1)完整理解整个过程~
实现一个神经网络
该神经网络的要求是:
input - fully connected layer - ReLU - fully connected layer - softmax
1. 初始化
2.计算损失和梯度:
(1)前向传播
计算损失函数值值:
(2)计算反向传播
计算梯度值:
3. 训练过程
4. predict过程
整体过程
1. 创建一个小的试验网络
2. 正向传播:计算scores误差是否在可控范围内
3. 正向传播:计算loss误差是否在可控范围内
4. 反向传播:计算梯度误差是否在可控范围内
5. 训练这个小网络
以上验证该网络正确;
6. 加载数据集(CIFAR-10)
7. 训练网络
8. debug这个训练过程
使用上面默认参数,准确率大概在0.27,很低,深入了解该问题的一种策略是在优化过程中在训练集和验证集上绘制损失函数和准确性;另一种策略是可视化在网络第一层中学习到的权重。
本来的情况:
分析图表认为学习率太小,调整学习率,重新训练,得到下图:
分析图二,认为正则化过小,导致训练集验证集之间准确率差别较大,调整正则化系数后,训练完成如下:
8. 优化超参数
不断缩小最好的超参数的范围,来得到较好的超参数:
可视化权重: