基于Tensorflow和keras的RNN网络

1.简单的RNN网络:RNN的公式可以是y=φ(wh+b),简单的RNN网络也被称为Elman网络。
2.改进的RNN网络:当输出取决于序列的前一个和后一个元素时,使用双向RNN(BRNN)。BRNN通过堆叠两个RNN(前向层和后向层)来实现,并且输出都是RNN隐藏状态的结果。在前向层中,记忆状态h从时间步长t流向时间步长t+1,而在后向层中记忆状态从步长t流向时间步长t-1。两个层在时间步长t处采用相同的输入x,但在时间步长t处共同产生输出。
深度双向RNN(DBRNN):进一步扩展了BRNN,添加了多个网络层,通过堆叠BRNN,可以让DBRNN具有层次结构,在BRNN中同一层的每个单元格使用相同的参数,但在DBRNN中每个退跌使用不同的参数。
3.LSTM网络:通过增加用于控制对过去信息访问的门来解决梯度消失或梯度爆炸的问题。构建LSTM网络的模块称为单元(cell),当长序列通过时,LSTM单元通过选择性的学习或删除信息以便能更有效的训练模型。组成单元的函数被称为门。前面有节RNN的博客也说到了LSTM网络,并且有内部流动图https://blog.csdn.net/RuiMengMeng1/article/details/104632913
4.GRU网络:由于LSTM网络计算量比较大,又发现了与LSTM具有相同结构的门控循坏单元,也就是GRU网络,在GRU网络中,并不会使用工作记忆和长期记忆,而只是一种记忆,即h(隐藏状态)。GRU单元将信息添加到该状态记忆或通过重置和更新门从该状态的记忆中移除信息。
5.基于tensorflow的RNN:①首先创建形状或者输入和输出的占位符;②为输入的占位符创建一个列表;③通过tf.rnn.rnn_cell创建一个RNN单元;④创建的单元和输入的张量列表;⑤输出权值和偏置值,定义优化器和损失函数;⑥给定循坏次数,使用损失函数和优化器训练模型。RNN的单元类以及封装类:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
6.基于keras的RNN:
要构建RNN模型,必须通过keras.layers.recurrent模块来添加网络层,在keras.layers.recurrent中keras提供了循环层:SimpleRNN;LSTM;GUR。在有状态的模型中,为输入指定的批次大小必须是固定值。如果想在训练期间的某个时候重置内存,通过调用model.reset_states()或layer.reset_states()函数。
7.RNN的应用:自然语言建模;声音和语音识别;图片或视频描述或生成摘要;时间序列数据。
8.将基于keras的RNN用于MNIST数据:
对于MNIST数据,图像大小为28*28像素,可以将MNIST图像想象成28个时间步长,每个步长具有28个特征。
导入模块

import keras
import os
import sklearn.datasets as detasetslib
from keras.models import Sequential
from keras.layers import Dense,Activation
from keras.layers.recurrent import SimpleRNN
from keras.optimizers import RMSprop
from keras.optimizers import SGD

获取MNIST数据并从一维结构中的784像素转化为二维结构中28*28像素

from tensorflow.examples.tutorials.mnist import input_data
# mnist=input_data.read_data_sets(os.path.join(datasetslib.datasets_root,'mnist'),one_hot=True)
mnist=input_data.read_data_sets('MNIST_data',one_hot=True)

x_train=mnist.train.images
x_test=mnist.test.images
y_train=mnist.train.labels
y_test=mnist.test.labels
n_classes=10
x_train=x_train.reshape(-1,28,28)
x_test=x_test.reshape(-1,28,28)

在keras中构建SimpleRNN模型

#创建SimpleRNN模型
model=Sequential()
model.add(SimpleRNN(units=16,activation='relu',input_shape=(28,28)))
model.add(Dense(n_classes))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy',
             optimizer=RMSprop(lr=0.01),
             metrics=['accuracy'])
model.summary()

在这里插入图片描述
训练模型并输出测试数据集的分类精度

model.fit(x_train,y_train,
         batch_size=100,epochs=20)
score=model.evaluate(x_test,y_test)
print('\nTest loss:',score[0])
print('Test accuracy:',score[1])

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值