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

最新文章

  1. Login Reference for PhotoSomething
  2. OpenGL 多视图与截屏
  3. C# 发送邮件方法2
  4. iTween
  5. rc.local自启动学习(转)
  6. 异常 java.lang.NumberFormatException: For input string:
  7. js 获取页面内链接
  8. angular ui-router 正则
  9. 提高java编程质量 - (三)三目运算符的两个操作数类型尽量一致
  10. .NET Core 成都线下面基会拉开序幕
  11. Qtree3题解(树链剖分(伪)+线段树+set)
  12. CSS3布局之box-flex的使用
  13. python协程--asyncio模块(基础并发测试)
  14. 【XSY2111】Chef and Churus 分块 树状数组
  15. qt, connect参数,Qt::DirectConnection,Qt::QueuedConnection
  16. Flask-WTF
  17. python2与python3的区别(持续更新)
  18. Windows下使用 Sublime Text + MinGW 搭建C/C++开发环境
  19. 2018.09.28 hdu5435A serious math problem(数位dp)
  20. 第1章—Spring之旅—容纳你的Bean

热门文章

  1. 枚举详解之EnumSet、EnumMap用法
  2. nginx + php-fpm 运行原理
  3. $P2121 拆地毯$
  4. [转]我是蒟蒻,但我有我的OI信仰
  5. 题解报告:hdu 1028 Ignatius and the Princess III(母函数or计数DP)
  6. 转 方法区(method) )、栈区(stack)和堆区(heap)之JVM 内存初学
  7. centos7安装mysql和mysql-connector-c++
  8. jQuery :even
  9. UDP网络程序实例
  10. 使用Kettle增量抽取MongoDB数据实践