tensorflow tf.pad 输出形状
tensorflow tf.pad shape of output
我有这个功能:
def resize_image(input_layer, counter ,width):
shape = input_layer.get_shape().as_list()
H = tf.cast((width * shape[2] / shape[1]), tf.int32)
print (H)
resized_images = tf.image.resize_images(input_layer, [width, H], tf.image.ResizeMethod.BICUBIC)
print (resized_images)
pad_diff = width - H
padd_images = tf.pad(resized_images, [[0, 0], [0, pad_diff], [0, 0], [0, 0]] , 'CONSTANT')
return padd_images, counter
当我 运行 这个 :
sess = tf.InteractiveSession()
I = tf.random_uniform([15, 15, 13, 5], minval = -5, maxval = 10, dtype = tf.float32)
padd_images, counter = resize_image(I, 1, 5)
print (I)
print(padd_images)
sess.run(padd_images)
我明白了:
Tensor("Cast/x:0", shape=(), dtype=int32)
Tensor("ResizeBicubic:0", shape=(15, 5, 4, 5), dtype=float32)
Tensor("random_uniform:0", shape=(15, 15, 13, 5), dtype=float32)
Tensor("Pad:0", shape=(?, ?, ?, ?), dtype=float32)
为什么padd_images
的形状里有?
?有没有办法知道它的形状?
问题是线路
H = tf.cast((width * shape[2] / shape[1]), tf.int32)
在这里你定义了一个张量。因此,当您计算时:
pad_diff = width - H
您正在为图表定义一个操作。
因此您在编译时不知道 pad_diff
值是什么,但现在您只会在运行时知道它。
由于不需要 H
作为张量,只需使用常规的 python 转换操作,从而将 H
更改为
H = int(width * shape[2] / shape[1])
这样,使用 H
的下一个操作将在 python 环境中执行,因此该值在 "compile time" 处已知。
之后你会看到:
Tensor("Pad:0", shape=(15, 6, 4, 5), dtype=float32)
我有这个功能:
def resize_image(input_layer, counter ,width):
shape = input_layer.get_shape().as_list()
H = tf.cast((width * shape[2] / shape[1]), tf.int32)
print (H)
resized_images = tf.image.resize_images(input_layer, [width, H], tf.image.ResizeMethod.BICUBIC)
print (resized_images)
pad_diff = width - H
padd_images = tf.pad(resized_images, [[0, 0], [0, pad_diff], [0, 0], [0, 0]] , 'CONSTANT')
return padd_images, counter
当我 运行 这个 :
sess = tf.InteractiveSession()
I = tf.random_uniform([15, 15, 13, 5], minval = -5, maxval = 10, dtype = tf.float32)
padd_images, counter = resize_image(I, 1, 5)
print (I)
print(padd_images)
sess.run(padd_images)
我明白了:
Tensor("Cast/x:0", shape=(), dtype=int32)
Tensor("ResizeBicubic:0", shape=(15, 5, 4, 5), dtype=float32)
Tensor("random_uniform:0", shape=(15, 15, 13, 5), dtype=float32)
Tensor("Pad:0", shape=(?, ?, ?, ?), dtype=float32)
为什么padd_images
的形状里有?
?有没有办法知道它的形状?
问题是线路
H = tf.cast((width * shape[2] / shape[1]), tf.int32)
在这里你定义了一个张量。因此,当您计算时:
pad_diff = width - H
您正在为图表定义一个操作。
因此您在编译时不知道 pad_diff
值是什么,但现在您只会在运行时知道它。
由于不需要 H
作为张量,只需使用常规的 python 转换操作,从而将 H
更改为
H = int(width * shape[2] / shape[1])
这样,使用 H
的下一个操作将在 python 环境中执行,因此该值在 "compile time" 处已知。
之后你会看到:
Tensor("Pad:0", shape=(15, 6, 4, 5), dtype=float32)