我正在观看本教程,他为MNIST分类编写了张量流代码 这是RNN模型:
batch_size = 128
chunk_size = 28
n_chunks = 28
rnn_size = 128
def recurrent_neural_network(x):
layer = {'weights':tf.Variable(tf.random_normal([rnn_size,n_classes])),
'biases':tf.Variable(tf.random_normal([n_classes]))}
x = tf.transpose(x, [1,0,2])
x = tf.reshape(x, [-1, chunk_size])
x = tf.split(x, n_chunks, 0)
lstm_cell = rnn.BasicLSTMCell(rnn_size,state_is_tuple=True)
outputs, states = rnn.static_rnn(lstm_cell, x, dtype=tf.float32)
output = tf.matmul(outputs[-1],layer['weights']) + layer['biases']
return output,outputs,states
之后我分别打印出输出和状态的尺寸 像这样:
print("\n", len(outputs),"\n",len(outputs[0]),"\n",len(outputs[0][0]))
print("\n", len(states),"\n",len(states[0]),"\n",len(states[0][0]))
我得到print语句的输出为:
28个
128个
128
2
128个
128
据我所知,输出形状为28x128x128(time_steps x rnn_size x batch_size)
但我不明白"州的形状" ?
答案 0 :(得分:1)
查看这篇关于LSTM如何运作的非常好的博文:http://colah.github.io/posts/2015-08-Understanding-LSTMs/
LSTM有一个隐藏状态,但也有一个存储单元状态;因此states
变量(2)的第一个维度的大小。以下维度的大小为batch_size
,然后是rnn_size
。
答案 1 :(得分:1)
答案 2 :(得分:0)
每个LSTM都有两个状态,长期状态为0,短期状态为第1。 BasicRNNCell,总是有一个状态,即短期状态。
你已经解释过了:
128 :神经元数量或者可以说你的情况下是rnn_size。
128 :批量大小,即每个输入的一个输出。