最近想把一个用到Tensorflow的LSTM的模型改成Keras,崩溃,好在解决了问题,小笔记记录一下
目的
让Keras
的LSTM
的输出
与
Tensorflow
的用LSTMCell
和dynamic_rnn
组成的LSTM
结果一样。
首先是固定seed然后做一个简单的tf
的LSTM的模型,如下
令人抓狂的过程
Tensorflow参考例
这边的输出当作Keras
的配置的正确答案
其权重当作Keras
的初始权重
看看输出的答案是否与正确答案
一样
forget_bias
设置为0的原因在于keras
中并没有提供。(但是不影响bias的训练)
import tensorflow as tf
from tensorflow.contrib.rnn import LSTMCell, LSTMStateTuple
import numpy as np
np.random.seed(0)
tf.set_random_seed(0)
batch_size = 1
seq_length = 5
inputs = tf.placeholder(shape=[None, seq_length, 1], dtype=tf.float32)
cell = LSTMCell(num_units=1,
state_is_tuple=True,
forget_bias=0.0,
initializer=None)
rnn_outputs, rnn_states = tf.nn.dynamic_rnn(
cell=cell,
dtype=tf.float32,
sequence_length=[seq_length] * batch_size,
inputs=inputs)
sess = tf.Session()
sess.run(tf.global_variables_initializer())
total_parameters = 0
for variable in tf.trainable_variables():
print("---- ", variable, " ----")
print(repr(sess.run(variable)))
print("===========================================")
rnn_outputs_, rnn_states_ = sess.run([rnn_outputs, rnn_states],
feed