首页 文章

输入LSTM seq2seq网络 - Tensorflow

提问于
浏览
0

使用Tensorflow seq2seq教程代码我创建了一个基于字符的聊天机器人 . 我不使用文字嵌入 . 我有一系列字符(字母和一些标点符号)和特殊符号,如GO,EOS和UNK符号 .

因为我没有使用字嵌入,所以我使用标准 tf.nn.seq2seq.basic_rnn_seq2seq() seq2seq模型 . 但是,我对 encoder_inputsdecoder_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 回答

  • 0

    lstm单元格的输入数量是在实例化事物时作为输入传递给 tf.rnn 函数的任何张量的维数 .

    size 参数是您的lstm中隐藏单位的数量(因此较大的数字较慢但可以导致更准确的模型) .

    我需要一个更大的堆栈跟踪来理解这些错误 .

  • 0

    事实证明,传递给 BasicLSTMCellsize 参数表示LSTM的隐藏状态的大小和输入层的大小 . 因此,如果您需要与输入大小不同的隐藏大小,则可以先通过其他投影图层传播输入,或使用内置的seq2seq字嵌入功能 .

相关问题