Machine learning 如何更改Tensorflow RNN模型中的最大序列长度?

Machine learning 如何更改Tensorflow RNN模型中的最大序列长度?,machine-learning,tensorflow,lstm,rnn,Machine Learning,Tensorflow,Lstm,Rnn,我目前正在尝试调整我的tensorflow分类器,它能够将单词序列标记为正或负,以处理更长的序列,而无需再培训。我的型号是RNN,最大序列长度为210。一个输入就是一个单词(300 dim),我用谷歌word2vec对这些单词进行了矢量化,所以我可以输入最多210个单词的序列。现在我的问题是,如何将最大序列长度更改为3000,以便对电影评论进行分类 我的最大固定序列长度为210的工作模式(tf_版本:1.1.0): 我已经尝试过的修改: 1用None替换n_块,只需输入数据 x = tf.pla

我目前正在尝试调整我的tensorflow分类器,它能够将单词序列标记为正或负,以处理更长的序列,而无需再培训。我的型号是RNN,最大序列长度为210。一个输入就是一个单词(300 dim),我用谷歌word2vec对这些单词进行了矢量化,所以我可以输入最多210个单词的序列。现在我的问题是,如何将最大序列长度更改为3000,以便对电影评论进行分类

我的最大固定序列长度为210的工作模式(tf_版本:1.1.0):

我已经尝试过的修改:

1用None替换n_块,只需输入数据

x = tf.placeholder(tf.float32, [None,None,300])
#model fails to build
#ValueError: The last dimension of the inputs to `Dense` should be defined. 
#Found `None`.
# at *1

...
#all entrys in word_vecs still have got the same length for example 
#3000(batch_size*3000(!= n_chunks)*300)
pred = tf.nn.softmax(logits)
pred = sess.run(pred,feed_dict={x:word_vecs, seq_length:sq_l})
2更改x,然后恢复旧模型:

x = tf.placeholder(tf.float32, [None,n_chunks*10,chunk_size]
...
saver = tf.train.Saver(tf.all_variables(), reshape=True)
saver.restore(sess,"...")
#fails as well:
#InvalidArgumentError (see above for traceback): Input to reshape is a 
#tensor with 420000 values, but the requested shape has 840000
#[[Node: save/Reshape_5 = Reshape[T=DT_FLOAT, Tshape=DT_INT32, 
#_device="/job:localhost/replica:0/task:0/cpu:0"](save/RestoreV2_5, 
#save/Reshape_5/shape)]]

# run prediction

如果可能的话,你能给我提供一个有效的例子或者解释一下为什么它不是?

我只是想知道你为什么不给n_块赋值3000


在您的第一次尝试中,您不能使用两个“无”,因为tf无法确定每个维度要放置多少个维度。第一个维度设置为无,因为它取决于批次大小。在第二次尝试中,您只需更改一个位置,使用n_块的其他位置可能与x占位符冲突

谢谢你的回答,我没有将n_chunks设置为3000,因为训练不需要,因为最大序列长度是210。如果我将n_chunks设置为3000,我必须用0个向量填充所有输入,使其适合,因此训练过程在计算上会变得非常昂贵,如果我有一个超过n_chunks的序列,我必须重新开始。在我的第二次尝试中,我改变了其他地方,也有n_块,我只是忘了提到它。
x = tf.placeholder(tf.float32, [None,n_chunks*10,chunk_size]
...
saver = tf.train.Saver(tf.all_variables(), reshape=True)
saver.restore(sess,"...")
#fails as well:
#InvalidArgumentError (see above for traceback): Input to reshape is a 
#tensor with 420000 values, but the requested shape has 840000
#[[Node: save/Reshape_5 = Reshape[T=DT_FLOAT, Tshape=DT_INT32, 
#_device="/job:localhost/replica:0/task:0/cpu:0"](save/RestoreV2_5, 
#save/Reshape_5/shape)]]

# run prediction