LSTM seq2seq网络的输入-Tensorflow
Input of LSTM seq2seq network - Tensorflow
我正在使用 Tensorflow seq2seq 教程代码创建一个基于字符的聊天机器人。我不使用词嵌入。我有一组字符(字母表和一些标点符号)和特殊符号,如 GO、EOS 和 UNK 符号。
因为我没有使用词嵌入,所以我使用标准 tf.nn.seq2seq.basic_rnn_seq2seq()
seq2seq 模型。但是,我对 encoder_inputs
和 decoder_inputs
应该有什么形状感到困惑。它们应该是一个整数数组,对应于字母数组中字符的索引,还是应该先将这些整数转换为单热向量?
一个 LSTM 单元有多少个输入节点?你能具体说明吗?因为我想在我的例子中,LSTM 单元应该为字母表中的每个字母都有一个输入神经元(因此是单热向量?)。
另外,你必须在构造函数中传递的 LSTM "size" 是什么 tf.nn.rnn_cell.BasicLSTMCell(size)
?
谢谢。
附录:这些是我正在尝试修复的错误。
当我使用下面的代码时,根据教程:
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.
lstm 单元的输入数量是实例化事物时作为输入传递给 tf.rnn
函数的任何张量的维数。
size
参数是 lstm 中隐藏单元的数量(因此数字越大速度越慢,但可以得到更准确的模型)。
我需要更大的堆栈跟踪才能理解这些错误。
事实证明,传递给 BasicLSTMCell
的 size
参数表示 LSTM 隐藏状态的大小和输入层的大小。因此,如果你想要一个不同于输入大小的隐藏大小,你可以先通过一个额外的投影层传播你的输入,或者使用内置的 seq2seq 词嵌入函数。
我正在使用 Tensorflow seq2seq 教程代码创建一个基于字符的聊天机器人。我不使用词嵌入。我有一组字符(字母表和一些标点符号)和特殊符号,如 GO、EOS 和 UNK 符号。
因为我没有使用词嵌入,所以我使用标准 tf.nn.seq2seq.basic_rnn_seq2seq()
seq2seq 模型。但是,我对 encoder_inputs
和 decoder_inputs
应该有什么形状感到困惑。它们应该是一个整数数组,对应于字母数组中字符的索引,还是应该先将这些整数转换为单热向量?
一个 LSTM 单元有多少个输入节点?你能具体说明吗?因为我想在我的例子中,LSTM 单元应该为字母表中的每个字母都有一个输入神经元(因此是单热向量?)。
另外,你必须在构造函数中传递的 LSTM "size" 是什么 tf.nn.rnn_cell.BasicLSTMCell(size)
?
谢谢。
附录:这些是我正在尝试修复的错误。
当我使用下面的代码时,根据教程:
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.
lstm 单元的输入数量是实例化事物时作为输入传递给 tf.rnn
函数的任何张量的维数。
size
参数是 lstm 中隐藏单元的数量(因此数字越大速度越慢,但可以得到更准确的模型)。
我需要更大的堆栈跟踪才能理解这些错误。
事实证明,传递给 BasicLSTMCell
的 size
参数表示 LSTM 隐藏状态的大小和输入层的大小。因此,如果你想要一个不同于输入大小的隐藏大小,你可以先通过一个额外的投影层传播你的输入,或者使用内置的 seq2seq 词嵌入函数。