繁体   English   中英

输入图像大小(以tf.gradients为单位)

[英]The input image size in tf.gradients

我正在尝试计算相对于输入图像的某一层的梯度。 渐变定义为

feature = g.get_tensor_by_name('inception/conv2d0_pre_relu:0')
gradient = tf.gradients(tf.reduce_max(feature, 3), x)

而我的输入图像的形状为(299,299),即初始训练的大小

print(img.shape)
# output (299,299,3)

然后,相对于输入的梯度可以计算为

img_4d=img[np.newaxis]
res = sess.run(gradient, feed_dict={x: img_4d})[0]
print(res.shape)
# output (1,299,299,3)

我们看到渐变具有与输入图像相同的形状,这是预期的。

但是,似乎可以使用任何大小的图像,但仍然可以得到渐变。 例如,如果我有一个img_resized与形状(150,150,3),相对于梯度至该输入也将与形状(150,150,3):

img_resized=skimage.transform.resize(img, [150,150], preserve_range=True)
img_4d=img_resized[np.newaxis]
res = sess.run(gradient, feed_dict={x: img_4d})[0]
res.shape
# output (1,150,150,3)

那为什么行得通呢? 在我的幼稚图片中,输入图像的尺寸必须固定为(299,299,3),并且相对于输入的某一层的渐变将始终为(299,299,3)。 为什么能够生成其他大小的渐变?

换句话说,以上代码会发生什么? 当我们输入形状为(150,150,3)的图像时,tensorflow是否将图像大小调整为(299,299,3)并计算形状为(299,299,3)的梯度,然后将梯度调整为(150,150,3)?

这是预期的现象,尤其是。 在初始网络的情况下,由于是完全卷积网络,它可以与任何大小的输入配合使用。 与Alexnet或VGG依赖于网络后期的完全连接层不同,完全卷积网络可以在任何大小的输入上工作。 希望这能回答您的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM