TensorFlow错误:'cond_1 / Switch'的形状必须是秩为0,但是秩为1。

4
我刚接触tensorflow,正在跟随一些在线练习来熟悉它。我想完成以下任务:
创建两个形状为300的张量x和y,这些张量来自于任何正态分布。使用tf.cond()返回:
- 如果(x-y)中所有元素的平均值为负数,则返回(x-y)的平均平方误差。 - 否则,返回(x-y)张量中所有元素的绝对值之和。
我的实现:
x = tf.random_normal([300])
y = tf.random_normal([300])
mse = lambda: tf.losses.mean_squared_error(y, x)
absval = lambda: tf.abs(tf.subtract(x, y))
out = tf.cond(tf.less(x, y), mse, absval)

错误:

Shape must be rank 0 but is rank 1 for 'cond_1/Switch' (op: 'Switch') with input shapes: [300], [300]

mse 排名为 0,absval 排名为 1tf.less(x, y) 排名为 1。这就是你出现错误的原因。 - Psidom
@Psidom 我明白了,谢谢!我应该让 pred、true_fn 和 false_fn 保持相同的等级吗?API 没有明确说明其中哪一个应该具有相同的等级。 - jiashenC
很确定它们需要具有相同的形状。 - Psidom
1个回答

4

试试这个:

x = tf.random_normal([300])
y = tf.random_normal([300])
mse = lambda: tf.losses.mean_squared_error(y, x)
absval = lambda: tf.reduce_sum(tf.abs(tf.subtract(x, y)))
out = tf.cond(tf.reduce_mean(x - y) < 0, mse, absval)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接