Tensorflow,选择操作给出错误

时间:2016-06-16 18:37:00

标签: python tensorflow

我需要我的模型在训练和测试期间表现不同。我正在尝试将I序列构建为序列模型,并且我希望在训练时将预期输出提供给解码器,并在测试时将实际输出提供给解码器。我定义了以下占位符,它应该包含一个缩放器值。

training = tf.placeholder(tf.bool, None, 'training')

在我的解码器中,我使用以下select语句,它在第一个时间步骤中返回所有零,但在最后一个输出和预期输出之间进行选择,具体取决于它是否在训练。

last_step = tf.select(training, getTimeStep(expected_output, t - 1), decoder_outputs[t - 1])if t else tf.zeros((BATCH_SIZE, 128))

当我在训练模式下运行模型时,我使用以下内容将训练设置为True。

sess.run([accuracy, cross_entropy, train_step], feed_dict = {input_tensor: x_train, expected_output: y_train, training: True})

运行时出现以下错误。

tensorflow.python.framework.errors.InvalidArgumentError: Inputs to operation decoder/Select of type Select must have the same size and shape.  Input 0: [] != input 1: [32,128]

似乎条件需要与我选择的张量相同。但是,我想选择一个或另一个表达式,而不是选择元素。有一个更好的方法吗?我认为select应该只播放布尔值。我可以平铺它,但这似乎效率低下。

1 个答案:

答案 0 :(得分:1)

你是对的,tf.select希望条件与其他两个输入具有相同的形状。

您应该使用tf.cond。有关在TensorFlow图中使用if条件的信息,请参阅this detailed answer