小言_互联网的博客

tensorflow中LSTM和GRU的用法分析

362人阅读  评论(0)

tensorflow中LSTM和GRU层的用法分析

说明

本文所用的实例基于python3.6。tensorflow1.14.0

LSTM

import tensorflow as tf 
import numpy as np 

#units,表示每个时间步的输出维度,比如输入的每个时间步是一个3维向量,则输出是一个6维向量
#return_sequences,控制是否输出全部时间步的隐藏层(h_t)
#return_state,控制是否输出最后一个时间步的状态(c_t)
#stateful,控制记忆状态是否在不同样本间保持,默认False,不保持
#recurrent_activation:门函数的激活函数(sigmoid/hard_softmax)
#activation:输出函数(隐藏状态)的激活函数/内部状态函数的激活函数,常用tanh,比如隐藏层输出 h_t = Z_o * tanh * c_t,内部函数的激活函数也是用tanh

UNITS = 6
data = np.random.rand(1,5,3)

model = tf.keras.Sequential([
    #只输出最后一个时间步的隐藏层,是一个UNITS维度的向量,输出shape(1,6)
    tf.keras.layers.LSTM(UNITS,return_sequences = False,return_state = False,input_shape=(5,3))
])
predict = model.predict(data)
print(predict)
print(predict.shape)

input = tf.keras.Input(shape=(5,3))
#输出array数组。第一个元素:每个时间步输出的隐藏层,shape(1,5,6);第二个元素最后一个时间步的隐藏层(1,6);第三个元素是最后一个时间步的输出状态
LSTM2 = tf.keras.layers.LSTM(UNITS,return_sequences = True,return_state = True)(input)
model2 = tf.keras.Model(inputs = input,outputs = LSTM2)
predict2 = model2.predict(data)
print(predict2)
print(len(predict2))
print(predict2[0].shape)
print(predict2[1].shape)
print(predict2[2].shape)

#输出array数组,第一个元素:最后一个时间步的隐藏层,shape(1,6);第二个元素:最后一个时间步的隐藏层,shape(1,6);第三个元素:最后一个时间步的输出状态(1,6)
LSTM3 = tf.keras.layers.LSTM(UNITS,return_sequences = False,return_state = True)(input)
model3 = tf.keras.Model(inputs = input,outputs = LSTM3)
predict3 = model3.predict(data)
print(predict3)
print(len(predict3))
print(predict3[0].shape)
print(predict3[1].shape)
print(predict3[2].shape)

#输出所有时间步的隐藏层,shape(1,5,6)
LSTM4 = tf.keras.layers.LSTM(UNITS,return_sequences = True,return_state = False,)(input)
model4 = tf.keras.Model(inputs = input,outputs = LSTM4)
predict4 = model4.predict(data)
print(predict4.shape)

GRU

import tensorflow as tf  
import numpy as np 
print(tf.__version__)

UNITS =6
data = np.random.rand(1,5,3)
input = tf.keras.Input(shape=(5,3))

#只输出最后一个神经元的隐藏层,输出shape(1,6)
model1 = tf.keras.Sequential([
    tf.keras.layers.GRU(UNITS,return_sequences=False,return_state=False,input_shape=(5,3))
])
predict1 = model1.predict(data)
# print(predict1)

#第一个元素返回全部时间步的隐藏层,第二个元素最后一个时间步的隐藏层。因为GRU结构的隐藏层 = 记忆状态。所以没有第三个元素
#通过此例子可以看出,GRU和LSTM的区别:当return_state = True的时候,LSTM返回三个元素,GRU返回两个元素,因为对于GRU来说记忆状态等于隐藏层
#因此其它几种情况下,可以通过参考LSTM结构的返回值推导出。这里不再复述。
GRU2 = tf.keras.layers.GRU(UNITS,return_sequences=True,return_state=True)(input)
model2 = tf.keras.Model(inputs = input,outputs = GRU2)
predict2 = model2.predict(data)
print(predict2)
print(len(predict2))
print(predict2[0].shape)
print(predict2[1].shape)

转载:https://blog.csdn.net/changcongying/article/details/101028210
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场