使用Tensorflow seq2seq教程代码我创建了一个基于字符的聊天机器人 . 我不使用文字嵌入 . 我有一系列字符(字母和一些标点符号)和特殊符号,如GO,EOS和UNK符号 .
因为我没有使用字嵌入,所以我使用标准 tf.nn.seq2seq.basic_rnn_seq2seq()
seq2seq模型 . 但是,我对 encoder_inputs
和 decoder_inputs
的形状感到困惑 . 它们应该是一个整数数组,对应于字母数组中字符的索引,还是应该先将这些整数转换成一个热矢量?
一个LSTM单元有多少个输入节点?你能说明一下吗?因为我想在我的情况下,LSTM单元应该为字母表中的每个字母都有一个输入神经元(因此是单热矢量?) . 另外,你必须在构造函数 tf.nn.rnn_cell.BasicLSTMCell(size)
中传递什么是LSTM _1684699?
谢谢 .
附录:这些是我想要解决的错误 .
当我使用以下代码时,根据教程:
for i in xrange(buckets[-1][0]): # Last bucket is the biggest one.
self.encoder_inputs.append(tf.placeholder(tf.int32, shape=[None], name="encoder{0}".format(i)))
for i in xrange(buckets[-1][1] + 1):
self.decoder_inputs.append(tf.placeholder(tf.int32, shape=[None], name="decoder{0}".format(i)))
self.target_weights.append(tf.placeholder(dtype, shape=[None], name="weight{0}".format(i)))
并运行 self_test()
函数,我收到错误: ValueError: Linear is expecting 2D arguments: [[None], [None, 32]]
然后,当我将上面代码中的形状更改为 shape=[None, 32]
时,我收到此错误: TypeError: Expected int32, got -0.21650635094610965 of type 'float' instead.
2 回答
lstm单元格的输入数量是在实例化事物时作为输入传递给
tf.rnn
函数的任何张量的维数 .size
参数是您的lstm中隐藏单位的数量(因此较大的数字较慢但可以导致更准确的模型) .我需要一个更大的堆栈跟踪来理解这些错误 .
事实证明,传递给
BasicLSTMCell
的size
参数表示LSTM的隐藏状态的大小和输入层的大小 . 因此,如果您需要与输入大小不同的隐藏大小,则可以先通过其他投影图层传播输入,或使用内置的seq2seq字嵌入功能 .