基于简单RNN循环神经网络的数字识别模型

一、RNN的简介

RNN的基本结构是BP神经网络的结构,也具备输入层、隐藏层和输出层。只不过在RNN中,隐藏层的输出不仅可以传到输出层,也可以传到下一时刻是隐藏层,其结构如下
rnn结构

二、模型准备

2.1首先,导入手写数字数据集,此数据集为60000张手写数字,为白底黑字,结果如下:

from tensorflow.keras.datasets import mnist

2.2其次从keras的layers中导入相应的简单的RNN模型和全连接层,以及keras模式中导入顺序结构,标签转化等包:

from keras.utils import np_utils#标签转化
from keras.models import Sequential#顺序结构
from keras.layers import Dense#全连接层
from keras.layers.recurrent import SimpleRNN#循环神经网络
from tensorflow.keras.optimizers import Adam#优化器

2.3设置输入数据大小,以及隐藏层的神经元cell个数:

#数据长度有一行28个像素
input_size=28
#一共28行
time_steps=28
#隐藏层cell个数
cell_size=50

2.4载入手写数字数据,并且归一化,归一化的目的是减少运算量,加快模型的训练:

#载入数据
(x_train,y_train),(x_test,y_test)=mnist.load_data()
#(60000,28,28)
#归一化
x_train=x_train/255
x_test=x_test/255

2.5对标签进行转化,因为手写数字识别模型最终得到0-9,因此最终结构为10个类,所以转化如下:

#转化标签为one hot
y_train=np_utils.to_categorical(y_train,num_classes=10)
y_test=np_utils.to_categorical(y_test,num_classes=10)

2.6模型的创建,首先创建顺序模型:

model=Sequential()

2.7在创建的顺序模型中加入简单RNN模型,并且设置输入输入输出的平面大小和隐藏神经元个数:

model.add(SimpleRNN(
    units=cell_size,#输出到隐藏层,隐藏层有50个神经元
    input_shape=(time_steps,input_size)#输入
))

2.8定义优化器

#定义优化器
adam=Adam(learning_rate=1e-4)
#定义优化器,loss方选,计算准确率
model.compile(optimizer=adam,loss='categorical_crossentropy',metrics=['accuracy'])

2.9训练设置,每次64张图,总共10个周期

#训练模式
model.fit(x_train,y_train,batch_size=64,epochs=10)

2.10模型评估并且保存模型

#模型评估
loss,accuracy=model.evaluate(x_test,y_test)
print('test loss',loss)
print('test accuracy',accuracy)
#保存文件
model.save('model.h5')


三、试验结果

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一无所知的小白·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值