Python 解释tensorflow动态rnn输出的困难

Python 解释tensorflow动态rnn输出的困难,python,tensorflow,recurrent-neural-network,Python,Tensorflow,Recurrent Neural Network,我正在尝试在tensorflow中实现一个基于LSTM单元的RNN。我在每一行中都有一个单词序列,它构成了特征,还有一个名为labels的列,它可以是1,也可以是0,作为目标。我在解释dynamic RNN的输出时面临困难。动态RNN返回输出和状态。 我已将数据分成256个批次。我已经补好/切掉了 每行的统一长度为160。然后我用手套把它们嵌入,这样每个单词都变成了一个百维向量。在这之后,我的每个例子都变成了一个160×100的矩阵,RNN函数的每个批次都变成了一个-256、160、100形状的

我正在尝试在tensorflow中实现一个基于LSTM单元的RNN。我在每一行中都有一个单词序列,它构成了特征,还有一个名为labels的列,它可以是1,也可以是0,作为目标。我在解释dynamic RNN的输出时面临困难。动态RNN返回输出和状态。 我已将数据分成256个批次。我已经补好/切掉了 每行的统一长度为160。然后我用手套把它们嵌入,这样每个单词都变成了一个百维向量。在这之后,我的每个例子都变成了一个160×100的矩阵,RNN函数的每个批次都变成了一个-256、160、100形状的张量。现在,假定LSTM单元的隐藏_维度设置为300,则大小为160 x 100的每个示例的隐藏状态向量的预期维度为1 x 300。但是,当我检查rnn_states.h的形状时,我得到以下结果-

TensorShape([Dimension(None), Dimension(300)])
我希望尺寸是256 x 300。我不知道如何进一步进行

我在下面添加了一些我使用的代码和它们的形状。我有两个张量-训练上下文和训练话语。我分别选取了128个样本,然后嵌入并连接它们,形成一个256个的输入批。你能告诉我哪里出了问题吗

train_context.get_shape()
# TensorShape([Dimension(128), Dimension(160)])

train_utterance.get_shape()
# TensorShape([Dimension(128), Dimension(160)])

context_embedded = tf.cast(tf.nn.embedding_lookup(embeddings_W,\
train_context, name="embed_context"), dtype = tf.float64)

utterance_embedded = tf.cast(tf.nn.embedding_lookup(embeddings_W,\ 
train_utterance, name="embed_utterance"), dtype = tf.float64)

context_embedded.get_shape()
# TensorShape([Dimension(128), Dimension(160), Dimension(100)])
utterance_embedded.get_shape()
# TensorShape([Dimension(128), Dimension(160), Dimension(100)])

inputs = tf.concat(0, [context_embedded, utterance_embedded])
inputs.get_shape()
# TensorShape([Dimension(256), Dimension(160), Dimension(100)])

cell = tf.nn.rnn_cell.LSTMCell(300, forget_bias=2.0, use_peepholes=True,\ 
state_is_tuple=True)

cell.state_size
# LSTMStateTuple(c=300, h=300)

rnn_outputs, rnn_states = tf.nn.dynamic_rnn(cell, inputs, dtype=tf.float64,\
parallel_iterations=64, time_major=False)


rnn_states.h.get_shape()
# TensorShape([Dimension(None), Dimension(300)])
我无法理解为什么尺寸为None x 300。我原以为是256 x 300。提前感谢。

保持身材是最好的努力。一般来说,Tensorflow在图形构造时并不总是知道张量的大小。None仅仅意味着维度在构建时是未知的

从Python中找到张量形状的唯一保证方法是运行图,例如通过session.run或.eval将张量计算为特定值,您可以检查其形状

如果要使用图形中的形状,还有tf.shape

希望有帮助