转载请注明处处:

http://www.cnblogs.com/darkknightzh/p/9017854.html

参考网址:

https://pytorch.org/docs/stable/nn.html?highlight=conv2d#torch.nn.Conv2d

https://www.cnblogs.com/chuantingSDU/p/8120065.html

https://blog.csdn.net/chaolei3/article/details/79374563

1x1卷积

https://blog.csdn.net/u014114990/article/details/50767786

https://www.quora.com/How-are-1x1-convolutions-used-for-dimensionality-reduction

https://www.reddit.com/r/MachineLearning/comments/3oln72/1x1_convolutions_why_use_them/?st=is9xc9jn&sh=7b774d4d

理解错误的地方敬请谅解。

1.  卷积

才发现一直理解错了CNN中的卷积操作。

假设输入输出大小不变,输入是N*Cin*H*W,输出是N*Co*H*W。其中N为batchsize。卷积核的大小是k*k。实际上共有Cin*Co个k*k的卷积核,总共的参数是Cin*k*k*Co(无bias)或者Cin*k*k*Co+Co(有bias)。

pytorch中给出了conv2d的计算公式

https://pytorch.org/docs/stable/nn.html?highlight=conv2d#torch.nn.Conv2d):

$out({{N}_{i}},C{{o}_{j}})=bias(C{{o}_{j}})+\sum\limits_{k=0}^{Cin-1}{weight(C{{o}_{j}},k)*input({{N}_{i}},k)}$

其中weight即为卷积核,上式中输出的batch中的第Ni个特征图的第Coj个特征,即为输入的第Ni个特征图的第k个特征,和第Coj个卷积核中的第k个核进行卷积(cross-correlation)。

如下图所示,对于某个输入特征图,其某局域分别于Co个卷积核进行卷积,得到对应的特征Coi,而后将这些特征拼接起来,得到最终的特征图。实际上每个卷积核都是k*k*Cin的大小。

经过上面的卷积,就可以将输入的不同的通道的信息融合了(权重不同,类似于加权融合)。

如果输出Co数量大于输入Cin数量,输出特征数量就多于输入特征。否则输出就少于输入特征数量。

2.  1*1卷积

上面的卷积理解了,1*1卷积就好理解了。

1*1主要用于降维或者升维(看Cin和Co哪个更大),其核大小为1*1。

实际上卷积核的数量为Cin*1*1*Co=Cin*Co(无bias)或者Cin*Co+Co(有bias)。

计算时,通道方向上每个卷积核将输入按照通道进行加权,得到对应的输出特征,之后将这些特征拼接起来,即可得到最终的特征图。

3.  pytorch中的验证

代码:

 from __future__ import print_function
from __future__ import division import torch.nn as nn
import numpy as np class testNet(nn.Module):
def __init__(self):
super(testNet, self).__init__()
self.conv1 = nn.Conv2d(in_channels=3, out_channels=10, kernel_size=5, stride=1, padding=1, bias=True) def forward(self, x):
x = self.conv1(x)
return x def get_total_params(model):
model_parameters = filter(lambda p: p.requires_grad, model.parameters())
num_params = sum([np.prod(p.size()) for p in model_parameters])
return num_params def main():
net = testNet()
print(get_total_params(net)) if __name__ == '__main__':
main()

上面代码中get_total_params用于得到模型总共的参数。

当kernel_size=5,bias=True时,参数共计760个:3*5*5*10+10=760。

当kernel_size=5,bias=False时,参数共计750个:3*5*5*10=750。

当kernel_size=1,bias=True时,参数共计40个:3*1*1*10+10=40。

当kernel_size=1,bias=False时,参数共计30个:3*1*1*10=30。

(原)CNN中的卷积、1x1卷积及在pytorch中的验证的更多相关文章

  1. 基于卷积神经网络的面部表情识别(Pytorch实现)----台大李宏毅机器学习作业3(HW3)

    一.项目说明 给定数据集train.csv,要求使用卷积神经网络CNN,根据每个样本的面部图片判断出其表情.在本项目中,表情共分7类,分别为:(0)生气,(1)厌恶,(2)恐惧,(3)高兴,(4)难过 ...

  2. 转pytorch中训练深度神经网络模型的关键知识点

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/weixin_42279044/articl ...

  3. PyTorch中的C++扩展

    今天要聊聊用 PyTorch 进行 C++ 扩展. 在正式开始前,我们需要了解 PyTorch 如何自定义module.这其中,最常见的就是在 python 中继承torch.nn.Module,用 ...

  4. 深度拾遗(06) - 1X1卷积/global average pooling

    什么是1X1卷积 11的卷积就是对上一层的多个feature channels线性叠加,channel加权平均. 只不过这个组合系数恰好可以看成是一个11的卷积.这种表示的好处是,完全可以回到模型中其 ...

  5. CNN笔记:通俗理解卷积神经网络【转】

    本文转载自:https://blog.csdn.net/v_july_v/article/details/51812459 通俗理解卷积神经网络(cs231n与5月dl班课程笔记) 1 前言 2012 ...

  6. CNN笔记:通俗理解卷积神经网络

    CNN笔记:通俗理解卷积神经网络 2016年07月02日 22:14:50 v_JULY_v 阅读数 250368更多 分类专栏: 30.Machine L & Deep Learning 机 ...

  7. 图像卷积、相关以及在MATLAB中的操作

    图像卷积.相关以及在MATLAB中的操作 2016年7月11日 20:34:35, By ChrisZZ 区分卷积和相关 图像处理中常常需要用一个滤波器做空间滤波操作.空间滤波操作有时候也被叫做卷积滤 ...

  8. 深度学习卷积网络中反卷积/转置卷积的理解 transposed conv/deconv

    搞明白了卷积网络中所谓deconv到底是个什么东西后,不写下来怕又忘记,根据参考资料,加上我自己的理解,记录在这篇博客里. 先来规范表达 为了方便理解,本文出现的举例情况都是2D矩阵卷积,卷积输入和核 ...

  9. [PyTorch]PyTorch中反卷积的用法

    文章来源:https://www.jianshu.com/p/01577e86e506 pytorch中的 2D 卷积层 和 2D 反卷积层 函数分别如下: class torch.nn.Conv2d ...

随机推荐

  1. Word Highlight设置详解

  2. python:a += b 和 a = a + b

    在python中,不同的情况下,这两个表达式有着很大的区别: 如果a,b都是可变对象,例如list,a+=b实际是对a指向的地址上的值进行修改,即运算前后id(a)的值是不变的. 而a=a+b是不同的 ...

  3. Codeforces 498B Name That Tune 概率dp (看题解)

    Name That Tune 刚开始我用前缀积优化dp, 精度炸炸的. 我们可以用f[ i ][ j ] 来推出f[ i ][ j + 1 ], 记得加加减减仔细一些... #include<b ...

  4. KNN分类算法补充

    KNN补充: 1.K值设定为多大? k太小,分类结果易受噪声点影响:k太大,近邻中又可能包含太多的其它类别的点. (对距离加权,可以降低k值设定的影响) k值通常是采用交叉检验来确定(以k=1为基准) ...

  5. BZOJ1303 [CQOI2009]中位数图 其他

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1303 题意概括 给出1~n的一个排列,统计该排列有多少个长度为奇数的连续子序列的中位数是b.中位数 ...

  6. BZOJ1192 [HNOI2006]鬼谷子的钱袋 数学推理

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1192 题意概括 把一个数m拆成很多数字. 问至少拆成多少个数字,1~m中的所有数字才可以用这些数字 ...

  7. BZOJ1088 [SCOI2005]扫雷Mine 动态规划

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1088 题意概括 扫雷.只有2行.第2行没有雷,第一行有雷.告诉你第二行显示的数组,问有几种摆放方式 ...

  8. Springboot中实现策略模式+工厂模式

    策略模式和工厂模式相信大家都比较熟悉,但是大家有没有在springboot中实现策略和工厂模式? 具体策略模式和工厂模式的UML我就不给出来了,使用这个这两个模式主要是防止程序中出现大量的IF ELS ...

  9. [洛谷P3014][USACO11FEB]牛线Cow Line (康托展开)(数论)

    如果在阅读本文之前对于康托展开没有了解的同学请戳一下这里:  简陋的博客    百度百科 题目描述 N(1<=N<=20)头牛,编号为1...N,正在与FJ玩一个疯狂的游戏.奶牛会排成一行 ...

  10. MongoDB--集群

    为什么需要集群 为了让数据安全 高(24* 7)数据可用性 灾难恢复 无停机维护(如备份,索引重建,压实) 读缩放(额外的副本读取) 副本集对应用程序是透明 设置集群 准备工作 在MongoDB的集群 ...