【问题标题】:Input of LSTM seq2seq network - TensorflowLSTM seq2seq 网络的输入 - Tensorflow
【发布时间】:2016-10-23 13:06:01
【问题描述】:

使用 Tensorflow seq2seq 教程代码,我正在创建一个基于字符的聊天机器人。我不使用词嵌入。我有一组字符(字母和一些标点符号)和特殊符号,如 GO、EOS 和 UNK 符号。

因为我没有使用词嵌入,所以我使用标准的tf.nn.seq2seq.basic_rnn_seq2seq()seq2seq 模型。但是,我对 encoder_inputsdecoder_inputs 应该有什么形状感到困惑。它们应该是一个整数数组,对应于字母数组中字符的索引,还是应该先将这些整数转换为 one-hot 向量?

一个 LSTM 单元有多少个输入节点?你能具体说明吗?因为我猜在我的情况下,LSTM 单元应该为字母表中的每个字母都有一个输入神经元(因此是 one-hot 向量?)。 另外,您必须在构造函数tf.nn.rnn_cell.BasicLSTMCell(size) 中传递的 LSTM“大小”是多少?

谢谢。

附录:这些是我正在尝试修复的错误。

当我使用以下代码时,根据教程:

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.

【问题讨论】:

    标签: machine-learning tensorflow recurrent-neural-network lstm


    【解决方案1】:

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

    size 参数是 lstm 中隐藏单元的数量(因此数字越大越慢,但可以产生更准确的模型)。

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

    【讨论】:

      【解决方案2】:

      事实证明,传递给BasicLSTMCellsize 参数既代表了LSTM 的隐藏状态的大小,也代表了输入层的大小。因此,如果您想要与输入大小不同的隐藏大小,您可以首先通过额外的投影层传播您的输入,或者使用内置的 seq2seq 词嵌入函数。

      【讨论】:

        猜你喜欢
        • 2020-11-29
        • 2016-06-22
        • 2016-05-05
        • 2016-10-05
        • 2019-09-16
        • 1970-01-01
        • 1970-01-01
        • 2019-07-03
        • 1970-01-01
        相关资源
        最近更新 更多