关于卷积网络以及反卷积网络shape的计算
2024-08-27 05:57:22
CNN的计算方式:
w1 = (w - F_w + 2p) / s_w + 1
h1 = (h - F_h + 2p) / s_h + 1
其中 w, h 分别为上一层的宽高, Filters(kernel)的大小为 F_w, F_h
strides 步长为: s_w, s_h
p 为padding 的大小
DeCNN 的计算方式:
w1 = (w -1 )* s_w + F_w - 2p
h1 = (h -1 )* s_h + F_h - 2p
其中 w, h 分别为上一层的宽高, Filters(kernel)的大小为 F_w, F_h
strides 步长为: s_w, s_h
p 为padding 的大小
上面的有点错误, 看了tensorflow的实现:
具体代码如下:
def _compute_output_shape(self, input_shape):
input_shape = tensor_shape.TensorShape(input_shape).as_list()
output_shape = list(input_shape)
if self.data_format == 'channels_first':
c_axis, h_axis, w_axis = 1, 2, 3
else:
c_axis, h_axis, w_axis = 3, 1, 2 kernel_h, kernel_w = self.kernel_size
stride_h, stride_w = self.strides output_shape[c_axis] = self.filters
output_shape[h_axis] = utils.deconv_output_length(
output_shape[h_axis], kernel_h, self.padding, stride_h)
output_shape[w_axis] = utils.deconv_output_length(
output_shape[w_axis], kernel_w, self.padding, stride_w)
return tensor_shape.TensorShape(output_shape)
这里就是说, W, H的计算方式,有额外的utils包来辅助完成,具体的代码如下:
def deconv_output_length(input_length, filter_size, padding, stride):
"""Determines output length of a transposed convolution given input length. Arguments:
input_length: integer.
filter_size: integer.
padding: one of "same", "valid", "full".
stride: integer. Returns:
The output length (integer).
"""
if input_length is None:
return None
input_length *= stride
if padding == 'valid':
input_length += max(filter_size - stride, )
elif padding == 'full':
input_length -= (stride + filter_size - )
return input_length
也就是说,分了三种padding的情况, “same”、"valid"、"full"三种方式,而每一种方式都不同。代码上给了后两者的实现。
这说明,如果padding使用的是“same”的情况的话。input_lenght = input_lenght * 2。
所以,DeCNN的输出计算分为三种方式,做如下总结:
“same”:
input_length *= stride
"valid":
input_length = input_length * stride + max(filter_size - stride, 0)
"full":
input_length = input_length * stride - stride + filter_size - 2 = (input_lenght - 1) * stride + filter_size - 2 这里Filter_sieze为卷积核的大小,及kernel_size
最新文章
- Login Reference for PhotoSomething
- OpenGL 多视图与截屏
- C# 发送邮件方法2
- iTween
- rc.local自启动学习(转)
- 异常 java.lang.NumberFormatException: For input string:
- js 获取页面内链接
- angular ui-router 正则
- 提高java编程质量 - (三)三目运算符的两个操作数类型尽量一致
- .NET Core 成都线下面基会拉开序幕
- Qtree3题解(树链剖分(伪)+线段树+set)
- CSS3布局之box-flex的使用
- python协程--asyncio模块(基础并发测试)
- 【XSY2111】Chef and Churus 分块 树状数组
- qt, connect参数,Qt::DirectConnection,Qt::QueuedConnection
- Flask-WTF
- python2与python3的区别(持续更新)
- Windows下使用 Sublime Text + MinGW 搭建C/C++开发环境
- 2018.09.28 hdu5435A serious math problem(数位dp)
- 第1章—Spring之旅—容纳你的Bean
热门文章
- 枚举详解之EnumSet、EnumMap用法
- nginx + php-fpm 运行原理
- $P2121 拆地毯$
- [转]我是蒟蒻,但我有我的OI信仰
- 题解报告:hdu 1028 Ignatius and the Princess III(母函数or计数DP)
- 转 方法区(method) )、栈区(stack)和堆区(heap)之JVM 内存初学
- centos7安装mysql和mysql-connector-c++
- jQuery :even
- UDP网络程序实例
- 使用Kettle增量抽取MongoDB数据实践