尝试在TensorFlow中使用BasicLSTMCell和dynamic_rnn设置网络时的ValueError

时间:2017-11-09 15:10:22

标签: python tensorflow deep-learning lstm

我想训练一个逐字符生成文本的神经网络。经过一些研究后,我决定使用LSTM网络完成这项任务。

我的输入结构如下: 我有一个文本(大约90,000,000个字符)的文件,我切成50个字符的重叠序列。考虑这个例句:

this.userInfo = this.afs.collection('collection', ref => ref.where('value', '==', true).limit(1)).valueChanges().flatMap(result => result);

我将文本拆分为序列:

<p>{{ (userInfo | async)?.duration }}</p>

The quick brown fox jumps over the lazy dog

The quick brown

he quick brown_

e quick brown f

我添加了下划线,这些空格不会显示在这些......

这些是我的输入数据的时间步长。输出将是每个序列之后的下一个字符,因此上面的序列为_quick brown fo

字符在一个向量中进行单热编码,其长度为字典中所有字符的长度,因此字母C由quick brown fox组成,字符C将表示为_, f, o, x and _

因为我不能同时将所有文本都复制到内存中,所以我将其分解为仅包含少量生成序列的批次,以供网络训练。

我得到了我的输入占位符:

A B C D

在下面的示例代码中,我使用了[0 0 1 0]的128,x = tf.placeholder(tf.float32, [batch_size, time_steps, char_size] 的50和batch_size的48来表示标准字母表,其中包含大写和小写的50个字母。< / p> 传递给time_steps

char_size也被任意选为256(在我的超参数之后的一些教程中)

以下是代码:

num_units

这是错误消息:

BasicLSTMCell

在过去的几天里,我一直在忽视这一点,我在这里错过了什么?

1 个答案:

答案 0 :(得分:1)

在循环中初始化多个单元格,而不是使用[cell] * n表示法:

cells = []
for _ in range(n):
    cells.append(tf.contrib.rnn.BasicLSTMCell(num_units))  # build list of cells
cell = tf.contrib.rnn.MultiRNNCell(cells, state_is_tuple=True)  # pass your list of cells
output, state = tf.nn.dynamic_rnn(cell, X, dtype=tf.float32)

否则,它基本上是尝试多次使用同一个单元格,但维度不起作用。我相信,这个行为在1.0发布中已经改变了。您曾经能够使用原始语法;现在你必须使用它。