tensorflow tf.pad输出形状

时间:2017-06-22 10:27:47

标签: python tensorflow pad

我有这个功能:

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?有没有办法知道它的形状?

1 个答案:

答案 0 :(得分:0)

问题是一行

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环境中执行,因此值在“编译时”已知。

之后你会看到:

Tensor("Pad:0", shape=(15, 6, 4, 5), dtype=float32)