对于标量tensor的shape表示

来源:6-8 图像风格转换计算图构建与损失函数计算

慕虎9426780

2019-10-07

在风格转化里定义的loss值,初始化采用了
style_loss = tf.zeros(shape=1, tf.float32)
的方式,这里用1表示了style_loss这一个元素。
在以前vgg net课程里,表示is_training这个布尔输入值,采用了
is_training = tf.placeholder(tf.bool, shape=[])
这样用一个空list[]表示了is_training这一个元素。
我发现把对placeholder的声明换成
is_training = tf.placeholder(tf.bool, shape=1)
在引用时,会出现这样的错误:
ValueError: Shape must be rank 0 but is rank 1 for 'conv1_1/batch_normalization/cond/Switch' (op: 'Switch') with input shapes: [1], [1].
是说这里输入的shape=1被自动换为了shape=[1]吗?这表示的是标量还是一个元素的数组?
请问,这两种对一个元素的shape的赋值方式可以互换吗?为什么?

写回答

1回答

正十七

2019-10-18

同学你好,shape=1会是长度为1的数组。shape=[]会是标量。

它们不能互换,因为维度不同。

>>> import tensorflow as tf
>>> a = tf.placeholder(tf.bool, shape=[])
>>> b = tf.placeholder(tf.bool, shape=1)
>>> c = tf.zeros(shape=(), dtype=tf.float32)
>>> d = tf.zeros(shape=1, dtype=tf.float32)
>>> a
<tf.Tensor 'Placeholder:0' shape=() dtype=bool>
>>> b
<tf.Tensor 'Placeholder_1:0' shape=(1,) dtype=bool>
>>> c
<tf.Tensor 'zeros:0' shape=() dtype=float32>
>>> d
<tf.Tensor 'zeros_1:0' shape=(1,) dtype=float32>
>>>


0
1
慕虎9426780
非常感谢!
2019-10-20
共1条回复

深度学习之神经网络(CNN/RNN/GAN)算法原理+实战

深度学习算法工程师必学,深入理解深度学习核心算法CNN RNN GAN

2617 学习 · 935 问题

查看课程