首页 > 编程知识 正文

keras lstm维度,循环神经网络示例代码keras

时间:2023-05-06 08:20:47 阅读:18227 作者:3956

前言基于keras的双重LSTM网络和双向LSTM网络使用LSTM层。 主要参数如下:

LTM(units,input_shape,return_sequences=False ) units )非显示层神经元数input_shape=(time_step, input_feature ) ) ) ) ) ) ) 65值为False,取意味着只返回最后时间步的值的本文以MNIST手写数字分类为例,有助于实现双重LSTM网络和双向LSTM网络有关MNIST数据集的说明,请参阅使用TensorFlow分类MNIST数据集。

笔者的工作空间如下。

代码资源--请参阅双隐藏层LSTM和双向LSTM

2双工LSTM网络双工LSTM网络结构DoubleLSTM.py

fromtensorflow.examples.tutorials.mnistimportinput _ data from keras.modelsimportsequentialfromkeras.layersimportdenstens 加载数据defread_data(path ) : Mn ist=input _ data.read _ data _ sets ) path,one_hot=True ) train_x,min valid _ y=Mn ist.validation.images.reshape (-1,28,28 ),mnist.validation 28 ),Mn ist.test.labels return traratation test_y#双重LSTM模型defDoublelect test_y ) : #模型model=sequential (创建model.add (lstm (64,input_shape=) 233365 ) return _ sequences=TRR rape return _ sequences=false ) #返回最后一个节点的输出model.add (dense (10, activation='softmax ' )网络结构model.summary ) #显示编译模型的loss='categorical_crossentropy ',metrics=[ ' accocs batch_sizing valid_y(#评估模型pre=model.evaluate(test_x,test_y,batch_size=500,verbose=2)打印

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _。

12416 _________________________________________________________________dense_5 (Dense) (None, 10) 330 =================================================================Total params: 36,554Trainable params: 36,554Non-trainable params: 0

由于第一个LSTM层设置了 return_sequences=True,每个节点的输出值都会返回,因此输出尺寸为 (None, 28, 64) 

由于第二个LSTM层设置了 return_sequences=False,只有最后一个节点的输出值会返回,因此输出尺寸为 (None, 32) 

 训练结果:

Epoch 13/15 - 17s - loss: 0.0684 - acc: 0.9796 - val_loss: 0.0723 - val_acc: 0.9792Epoch 14/15 - 18s - loss: 0.0633 - acc: 0.9811 - val_loss: 0.0659 - val_acc: 0.9822Epoch 15/15 - 17s - loss: 0.0597 - acc: 0.9821 - val_loss: 0.0670 - val_acc: 0.9812test_loss: 0.0714278114028275 - test_acc: 0.9789000034332276 3 双向LSTM网络 双向LSTM网络结构 from tensorflow.examples.tutorials.mnist import input_datafrom keras.models import Sequentialfrom keras.layers import Dense,LSTM,Bidirectional#载入数据def read_data(path): mnist=input_data.read_data_sets(path,one_hot=True) train_x,train_y=mnist.train.images.reshape(-1,28,28),mnist.train.labels, valid_x,valid_y=mnist.validation.images.reshape(-1,28,28),mnist.validation.labels, test_x,test_y=mnist.test.images.reshape(-1,28,28),mnist.test.labels return train_x,train_y,valid_x,valid_y,test_x,test_y#双向LSTM模型def BiLSTM(train_x,train_y,valid_x,valid_y,test_x,test_y): #创建模型 model=Sequential() lstm=LSTM(64,input_shape=(28,28),return_sequences=False) #返回最后一个节点的输出 model.add(Bidirectional(lstm)) #双向LSTM model.add(Dense(10,activation='softmax')) #编译模型 model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy']) #训练模型 model.fit(train_x,train_y,batch_size=500,nb_epoch=15,verbose=2,validation_data=(valid_x,valid_y)) #查看网络结构 model.summary() #评估模型 pre=model.evaluate(test_x,test_y,batch_size=500,verbose=2) print('test_loss:',pre[0],'- test_acc:',pre[1]) train_x,train_y,valid_x,valid_y,test_x,test_y=read_data('MNIST_data')BiLSTM(train_x,train_y,valid_x,valid_y,test_x,test_y)

 每层网络输出尺寸:

_________________________________________________________________Layer (type) Output Shape Param # =================================================================bidirectional_5 (Bidirection (None, 128) 47616 _________________________________________________________________dense_6 (Dense) (None, 10) 1290 =================================================================Total params: 48,906Trainable params: 48,906Non-trainable params: 0

由于LSTM层设置了 return_sequences=False,只有最后一个节点的输出值会返回,每层LSTM返回64维向量,两层合并共128维,因此输出尺寸为 (None, 128) 

训练结果: 

Epoch 13/15 - 22s - loss: 0.0512 - acc: 0.9839 - val_loss: 0.0632 - val_acc: 0.9790Epoch 14/15 - 22s - loss: 0.0453 - acc: 0.9865 - val_loss: 0.0534 - val_acc: 0.9832Epoch 15/15 - 22s - loss: 0.0418 - acc: 0.9869 - val_loss: 0.0527 - val_acc: 0.9830test_loss: 0.06457789749838412 - test_acc: 0.9795000076293945

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。