nn.ConvTranspose2d的参数output_padding的作用(转)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nn.ConvTranspose2d的参数output_padding的作用(转)相关的知识,希望对你有一定的参考价值。
参考技术A same卷积操作:
是通过padding使得卷积之后输出的特征图大小保持不变(相对于输入特征图),不代表得到的输出特征图的大小与输入特征图的大小完全相同,<u>而是</u>他们之间的比例保持为 输入特征图大小/输出特征图大小 = stride
举例:
比如输入特征图为 6*6,stride=2, kernel_size = 3, 进行same padding得到输出特征图为3*3 (6 / 2 = 3)
如果输入特征图为 5*5,stride=2,kernel_size = 3,进行same padding,那么也会得到输出特征图为3*3
那么这样的情况就会导致在逆卷积时出现一个问题。
不同大小的图片经过卷积运算能得到相同尺寸的输出,那么作为逆运算, 同样的一张输入图像经过反卷积是否会有不同尺寸的合法输出 ?这样的话就存在争议了
上面还只是进行same卷积的情况,如果考虑valid卷积,stride=2, kernel_size = 3,padding=0时,输入特征图为7*7和8*8的结果也是3*3
解决争议的办法就是 使用output_padding参数
output_padding的作用是:
当stride > 1时,Conv2d将多个输入形状映射到相同的输出形状。output_padding通过在一边有效地增加计算出的输出形状来解决这种模糊性。
首先我们要认同一个前提:
大多数情况下我们都希望经过卷积/反卷积处理后的图像尺寸比例与步长相等,即 输入特征图大小/输出特征图大小 = stride ,也就是same模式 。
所以我们只要通过添加output_padding这一参数来使得结果满足这一前提,那么输出的图片的大小就能够保证为输入图片*stride的大小,而不是任意可能的大小
实现办法:
因为pytorch将参数 padding(注意与output_padding区别)建议设置为(kernel_size - 1)/2 ,由式子padding= kernel - 1 - padding转换而来
那么根据式子:
当我们希望得到 输入特征图大小/输出特征图大小 = stride 的话,代入上面的式子能够得到结果:
所以为了让padding = (kernel_size - 1)/2,则 output_padding应该取值为stride - 1 ,这样就能够满足输入特征图大小/输出特征图大小 = stride
当然,你可以取别的值,这并不会影响到逆卷积的计算,但是在后面进行有关大小的操作时就很可能出现问题,因为输出的图片的大小并不能保证是 输入图片*stride的大小,可能是任意正确的大小,如上面举的例子,可能是7*7或8*8等
中文乱码解决方案
- 读取csv文件出现中文乱码方案,增加编码格式参数
read.csv(trainPath,header=TRUE,stringsAsFactors=TRUE,encoding = "UTF-8")
- 保存csv文件中出现乱码,编码格式参数
write.csv(outp, file = path, quote = F, fileEncoding = "UTF-8")
- source 加载R脚本中文乱码
source("core.R",encoding="utf-8")
- RStudio中脚本中文乱码,编码格式设置:tools -> global option...., 如下图:
- source加载R脚本waring, 函数及变量加载不进来的问题
> source("core.R",encoding="utf-8") Warning message: In readLines(file, warn = FALSE) : invalid input found on input connection \'core.R\'
-
R语言环境的显示问题
> sessionInfo() R version 3.2.5 (2016-04-14) Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows >= 8 x64 (build 9200) locale: [1] LC_COLLATE=Chinese (Simplified)_China.936 LC_CTYPE=Chinese (Simplified)_China.936 LC_MONETARY=Chinese (Simplified)_China.936 [4] LC_NUMERIC=C LC_TIME=Chinese (Simplified)_China.936 attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] plyr_1.8.4 DT_0.2 RODBC_1.3-13 loaded via a namespace (and not attached): [1] htmlwidgets_0.7 magrittr_1.5 htmltools_0.3.5 tools_3.2.5 Rwordseg_0.2-1 Rcpp_0.12.6 digest_0.6.9 > Sys.getlocale() [1] "LC_COLLATE=Chinese (Simplified)_China.936;LC_CTYPE=Chinese (Simplified)_China.936;LC_MONETARY=Chinese (Simplified)_China.936;LC_NUMERIC=C;LC_TIME=Chinese (Simplified)_China.936" > Sys.setlocale(category = "LC_ALL",local="us") [1] "LC_COLLATE=English_United States.1252;LC_CTYPE=English_United States.1252;LC_MONETARY=English_United States.1252;LC_NUMERIC=C;LC_TIME=English_United States.1252" > Sys.setlocale(category = "LC_ALL",local="chinese") [1] "LC_COLLATE=Chinese (Simplified)_China.936;LC_CTYPE=Chinese (Simplified)_China.936;LC_MONETARY=Chinese (Simplified)_China.936;LC_NUMERIC=C;LC_TIME=Chinese (Simplified)_China.936"
以上是关于nn.ConvTranspose2d的参数output_padding的作用(转)的主要内容,如果未能解决你的问题,请参考以下文章