我想创建一个基本的LSTM网络,它接受5维向量序列(例如nx5数组)并返回相应的4维隐藏和单元向量序列(nx4数组),其中N是时间步数。你知道吗
我怎样才能做到张量流?你知道吗
添加了
到目前为止,我得到了以下代码:
num_units = 4
lstm = tf.nn.rnn_cell.LSTMCell(num_units = num_units)
timesteps = 18
num_input = 5
X = tf.placeholder("float", [None, timesteps, num_input])
x = tf.unstack(X, timesteps, 1)
outputs, states = tf.contrib.rnn.static_rnn(lstm, x, dtype=tf.float32)
sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)
x_val = np.random.normal(size = (12,18,5))
res = sess.run(outputs, feed_dict = {X:x_val})
sess.close()
然而,还有许多悬而未决的问题:
如果您想接受任意长度的序列,我建议使用
dynamic_rnn
,您可以参考here来理解它们之间的区别。你知道吗例如:
dynamic_rnn
在一个批处理中需要相同的长度,但是在一个批处理中需要任意长度时,可以在填充批处理数据之后使用sequence_length
参数指定每个长度。你知道吗只是
static_rnn
需要用unstack
分割数据,这取决于它们不同的输入需求。static_rnn
的输入形状是[timesteps,batch_size, features]
,这是形状[batch_size, features]
的2D张量列表。但是dynamic_rnn
的输入形状是[timesteps,batch_size, features]
或[batch_size,timesteps, features]
,取决于time_major
是真是假。你知道吗在LSTMCell中,
states
的形状是[2,batch_size,num_units ]
,一个[batch_size, num_units ]
表示C,另一个[batch_size, num_units ]
表示h。你可以看到下面的图片。你知道吗同样,您将得到GRUCell中的
states
is[batch_size, num_units ]
的形状。你知道吗outputs
表示每个时间步的输出,因此默认情况下(time\u major=False)其形状是[batch_size, timesteps, num_units]
。你很容易得出结论state[1, batch_size, : ] == outputs[ batch_size, -1, : ]
。你知道吗相关问题 更多 >
编程相关推荐