手撕神经网络

手撕神经网络

实验报告

代码见 https://github.com/pgcai/DoraPy

  • 姓名:蔡普光

  • 学号:*********

神经网络框架

手撕神经网络

实验一(拟合函数)

实验目的

尝试使用不同的n(神经元层数)和Ti(参数个数)参数定义神经网络。然后在定义域范围内随机采样作为输入,拟合定义域为-pi到pi的目标函数 y = a·cos(bx) + c·sin(dx),a、b、c、d自己设置。然后评估拟合效果,将拟合到的函数可视化并与目标函数对比。

数据准备

train

手撕神经网络

手撕神经网络

test

手撕神经网络

手撕神经网络

网络设计

net_1

手撕神经网络

手撕神经网络

net_2

手撕神经网络

手撕神经网络

训练方法

​ 对真实数据标记与模型预测标记之间的误差目标函数最小化利用梯度下降算法更新参数,在模型隐层和卷积池化层的参数利用误差反向传播算法计算它们的更新值。

实验结果

运行实验代码

lr = 1e-3
batch_size = 32 
batch = int(train_x.shape[0]/batch_size)
epoch = 2000

net = fc_model()
loss = nn.loss.MSE()
optimizer = nn.optimizer.Adam(lr=lr)

手撕神经网络

实验结果分析

net_1

手撕神经网络

net_2

手撕神经网络

rmse = 0.013692547631695478
mae = 0.009944943695638564

实验二(手写数字识别)

实验目的

选择一个小的图像数据集如人脸or MNIST,使用选择的数据集对该神经网络进行训练和测试。评估测试结果。

数据准备

60000个训练样本

手撕神经网络

10000个测试样本

手撕神经网络

网络设计

手撕神经网络

手撕神经网络

训练方法

对真实数据标记与模型预测标记之间的误差目标函数最小化利用梯度下降算法更新参数,在模型隐层和卷积池化层的参数利用误差反向传播算法计算它们的更新值。轮询输入每个batch的MNIST训练数据,每次输入更新一次模型参数,最后利用更新好的模型参数在所有测试数据上进行准确率计算。

实验结果

运行实验代码

手撕神经网络

实验结果分析

手撕神经网络

总结及体会

挺好玩的。

上一篇:Pytorch——Dataset类和DataLoader类


下一篇:linux-进程的父sshd进程终止时会发生什么?