栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用公式的Conv2D转置输出形状

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用公式的Conv2D转置输出形状

关于

'SAME'
填充,
Convolution
文档提供了一些详细的解释(这些注释中的更多详细信息)。特别是在使用
'SAME'
填充时,输出形状的定义如下:

# for `tf.layers.conv2d` with `SAME` padding:out_height = ceil(float(in_height) / float(strides[1]))out_width  = ceil(float(in_width) / float(strides[2]))

在这种情况下,输出形状仅取决于输入形状和步幅。填充大小是从此处计算出来的,以填充此形状要求(而对于

'VALID'
填充,则取决于填充大小的是输出形状)

现在,对于转置卷积…由于此操作是法向卷积的后向对应项(其梯度),这意味着法向卷积的输出形状对应于其对应的经转置运算的输入形状。换句话说,虽然的输出形状

tf.layers.conv2d()
除以步幅,但的输出形状
tf.layers.conv2d_transpose()
却乘以它:

# for `tf.layers.conv2d_transpose()` with `SAME` padding:out_height = in_height * strides[1]out_width  = in_width * strides[2]

但是还是要再次计算出填充大小,以获得该输出形状,而不是相反(

SAME
填充)。由于这些值之间的正态关系(即找到的关系)为:

# for `tf.layers.conv2d_transpose()` with given padding:out_height = strides[1] * (in_height - 1) + kernel_size[0] - 2 * padding_heightout_width  = strides[2] * (in_width - 1) + kernel_size[1] - 2 * padding_width

重新排列我们得到的方程

padding_height = [strides[1] * (in_height - 1) + kernel_size[0] - out_height] / 2padding_width  = [[strides[2] * (in_width - 1) + kernel_size[1] - out_width] / 2

注意: 如果例如

2 * padding_height
是一个奇数,则
padding_height_top =floor(padding_height)
; 和
padding_height_bottom =ceil(padding_height)
(与分别相同
padding_width
padding_width_left
padding_width_right)

更换

out_height
out_width
与他们的表情,并使用您的值(第1调换卷积):

padding = [2 * (128 - 1) + 4 - (128 * 2)] / 2 = 1

因此

1
,您需要在数据的每一侧添加一个填充,以便获得输出暗淡
out_dim = in_dim * stride = strides * (in_dim- 1) + kernel_size - 2 * padding = 256



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/653001.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号