首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以tf.gradients为单位的输入图像大小

以tf.gradients为单位的输入图像大小
EN

Stack Overflow用户
提问于 2016-12-09 03:03:09
回答 1查看 404关注 0票数 0

我试图计算相对于输入图像的某一层的梯度。梯度被定义为

代码语言:javascript
复制
feature = g.get_tensor_by_name('inception/conv2d0_pre_relu:0')
gradient = tf.gradients(tf.reduce_max(feature, 3), x)

我的输入图像的形状是(299,299),这是inception is trained at

代码语言:javascript
复制
print(img.shape)
# output (299,299,3)

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

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

我们看到梯度与输入图像具有相同的形状,这是意料之中的。

然而,似乎一个人可以使用任何大小的图像,但仍然可以获得梯度。例如,如果我有一个形状为(150,150,3)的img_resized,关于此输入的梯度也将具有形状(150,150,3):

代码语言:javascript
复制
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)?

EN

回答 1

Stack Overflow用户

发布于 2016-12-10 03:03:29

这是意料之中的现象,尤其是。在初始网络的情况下,由于是完全卷积网络,它可以与任何大小的输入一起工作。与Alexnet或VGG不同,它们依赖于网络后期的完全连接层,完全卷积网络可以在任何大小的输入上工作。希望这能回答你的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41046951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档