深度学习入门笔记4-训练我们的模型
好,那么迄今为止,我们已经成功构建了一个两层的神经网络模型,那么现在呢,我们将使用我们的数据局对这个模型进行训练。废话不多说,直接上代码。
import mnist
import TwoLayerNet as net
import numpy as np
import matplotlib.pyplot as plt
(x_train, t_train), (x_test, t_test) = mnist.load_mnist(
normalize=True, one_hot_label=True
)
network = net.TwoLayerNet(input_size=784, hidden_size=50, output_size=10)
iters_num = 10000
train_size = x_train.shape[0]
batch_size = 100
learning_rate = 0.1
train_loss_list = []
train_acc_list = []
test_acc_list = []
loss_list = []
x = []
iter_per_epoch = max(train_size / batch_size, 1)
首先通过我们的数据集模块mnist.load_mnist
,进行数据集的加载。
接着我们构建一个我们神经网络模型的对象,输入大小为784,隐藏层的大小是50,输出层的大小是10。这里的输入层对应着我们数据集。
接下来我们定义一些变量用于训练过程中的记录。
训练次数10000次,批大小为100,学习率为0.1。
for i in range(iters_num):
batch_maks = np.random.choice(train_size,batch_size)
x_batch = x_train[batch_maks]
t_batch = t_train[batch_maks]
grad = network.gradient(x_batch,t_batch)
# 更新
for key in ('W1','b1','W2','b2'):
network.params[key] -= learning_rate*grad[key]
loss = network.loss(x_batch,t_batch)
train_loss_list.append(loss)
if i % (iter_per_epoch/5) == 0:
epoch = float(i)/iter_per_epoch
x.append(epoch)
train_acc = network.accuracy(x_train,t_train)
test_acc = network.accuracy(x_test,t_test)
train_acc_list.append(train_acc)
test_acc_list.append(test_acc)
loss_list.append(loss)
这里进行训练,每次从数据集中取出数据,进行前向遍历与反向遍历。
然后对权重进行更新。
这里我每1/5个epoch记录一下数据。
plt.plot(x,loss_list,label="loss")
plt.plot(x,test_acc_list,label="test_acc")
plt.xlabel("epoch")
plt.ylabel("acc & loss")
plt.legend()
plt.show()
print("最终正确率:",float(test_acc_list[-1]))
最终输出记录的数据为图表。
结果:
最终正确率: 0.9708
所有代码以及数据已存储到网盘:
网盘连接:
链接:https://pan.baidu.com/s/1QEOOxHv1wP0Dwu5VVtZfrg?pwd=1024
提取码:1024
–来自百度网盘超级会员V2的分享