深度学习入门笔记4#训练我们的模型

深度学习入门笔记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的分享

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值