【发布时间】:2017-12-18 18:13:57
【问题描述】:
我在 seq2seq.sequence_loss 中收到此错误,即使 logits 和标签的第一个暗淡具有相同的维度,即 batchSize
我在 TF 1.0 版本中创建了一个 seq2seq 模型。我的损失函数如下:
logits = self.decoder_logits_train
targets = self.decoder_train_targets
self.loss = seq2seq.sequence_loss(logits=logits, targets=targets, weights=self.loss_weights)
self.train_op = tf.train.AdamOptimizer().minimize(self.loss)
我在训练时运行网络时遇到以下错误:
InvalidArgumentError (see above for traceback): logits and labels must have the same first dimension, got logits shape [1280,150000] and labels shape [1536]
[[Node: sequence_loss/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits = SparseSoftmaxCrossEntropyWithLogits[T=DT_FLOAT, Tlabels=DT_INT32, _device="/job:localhost/replica:0/task:0/cpu:0"](sequence_loss/Reshape, sequence_loss/Reshape_1)]]
我确认logits和targets张量的形状如下:
a,b = sess.run([model.decoder_logits_train, model.decoder_train_targets], feed_dict)
print(np.shape(a)) # (128, 10, 150000) which is (BatchSize, MaxSeqSize, Vocabsize)
print(np.shape(b)) # (128, 12) which is (BatchSize, Max length of seq including padding)
那么,既然targets 和logits 的第一个维度相同,那么为什么会出现此错误?
有趣的是,在错误中你可以观察到 logits 的维度被提到为(1280, 150000),即(128 * 10, 150000)[product of first two dimension, vocab_size],目标相同,即(1536),即(128*12),又是第一个产品二维?
注意:Tensorflow 1.0 CPU 版本
【问题讨论】:
标签: python-3.x tensorflow deep-learning