Pytorch中卷积层转向全连接层时,全连接层输入维度的确定

  • 一、代码法:
    • 改变的AlexNet网络结构:
    • AlexNet
  • 二、公式法:

一、代码法:

改变的AlexNet网络结构:

输入维度为 ( N , 1 , 100 , 100 ) (N,1, 100,100) (N,1,100,100), N N N为输入的样本数。

import torch.nn as nn
import torch.nn.functional as F
import torch
from torchsummary import summaryclass AlexNet(nn.Module):def __init__(self):super(AlexNet, self).__init__()self.conv1 = nn.Conv2d(1, 96, 11, stride=2)self.conv2 = nn.Conv2d(96, 256, 5, stride=1, padding=2)self.conv3 = nn.Conv2d(256, 384, 3, stride=1, padding=1)self.conv4 = nn.Conv2d(384, 384, 3, stride=1, padding=1)self.conv5 = nn.Conv2d(384, 256, 3, stride=1, padding=1)self.fc1 = nn.Linear(256*6*6, 4096)self.fc2 = nn.Linear(4096, 4096)self.fc3 = nn.Linear(4096, 1000)def forward(self, x):out = F.relu(self.conv1(x))out = F.max_pool2d(out, 2)out = F.relu(self.conv2(out))out = F.max_pool2d(out, 2)out = F.relu(self.conv3(out))out = F.relu(self.conv4(out))out = F.relu(self.conv5(out))out = F.max_pool2d(out, 2)out = out.view(out.size(0), -1)out = F.relu(self.fc1(out))out = F.relu(self.fc2(out))out = self.fc3(out)return out

AlexNet 网络结构为例,如上代码。在AlexNet的基础上,将第一层的卷积层的输入通道变成1。代码法相对直观,随机产生一个维度的数据作为调试,我们选择的维度为 ( 1 , 100 , 100 ) (1,100,100) (1,100,100),代码如下:

net = AlexNet()
image = torch.randn(2, 1, 100, 100)
out = F.relu(net.conv1(image))
out = F.max_pool2d(out, 2)
out = F.relu(net.conv2(out))
out = F.max_pool2d(out, 2)
out = F.relu(net.conv3(out))
out = F.relu(net.conv4(out))
out = F.relu(net.conv5(out))
out = F.max_pool2d(out, 2)
out.size()

得到输出为:

torch.Size([2, 256, 5, 5])

卷积层的输出维度为:(2, 256, 5, 5)。
全连接层的输入维度为卷积层的输出维度为: 256 × 5 × 5 256\times 5\times 5 256×5×5 。则AlexNet中下面的这行代码:

self.fc1 = nn.Linear(256*6*6, 4096)

需要改为:

self.fc1 = nn.Linear(256*5*5,4096)

全连接层输入的维度为每个图片总的像素点个数。

AlexNet

import torch.nn as nn
import torch.nn.functional as F
import torch
from torchsummary import summaryclass AlexNet(nn.Module):def __init__(self):super(AlexNet, self).__init__()self.conv1 = nn.Conv2d(3, 96, 11, stride=4)self.conv2 = nn.Conv2d(96, 256, 5, stride=1, padding=2)self.conv3 = nn.Conv2d(256, 384, 3, stride=1, padding=1)self.conv4 = nn.Conv2d(384, 384, 3, stride=1, padding=1)self.conv5 = nn.Conv2d(384, 256, 3, stride=1, padding=1)self.fc1 = nn.Linear(256*6*6, 4096)self.fc2 = nn.Linear(4096, 4096)self.fc3 = nn.Linear(4096, 1000)def forward(self, x):out = F.relu(self.conv1(x))out = F.max_pool2d(out, 2)out = F.relu(self.conv2(out))out = F.max_pool2d(out, 2)out = F.relu(self.conv3(out))out = F.relu(self.conv4(out))out = F.relu(self.conv5(out))out = F.max_pool2d(out, 2)out = out.view(out.size(0), -1)out = F.relu(self.fc1(out))out = F.relu(self.fc2(out))out = self.fc3(out)return out

调试代码为:

net = AlexNet()
image = torch.randn(2, 3, 227, 227)
out = F.relu(net.conv1(image))
out = F.max_pool2d(out, 2)
out = F.relu(net.conv2(out))
out = F.max_pool2d(out, 2)
out = F.relu(net.conv3(out))
out = F.relu(net.conv4(out))
out = F.relu(net.conv5(out))
out = F.max_pool2d(out, 2)
out.size()

输出为:

torch.Size([2, 256, 6, 6])

全连接层的输入维度为: 256 × 6 × 6 256\times 6\times 6 256×6×6。

二、公式法:

torch.nn.Conv2d(in_channels,out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros', device=None, dtype=None)

参数如下:

  • n_channels (int) :输入图片的维度;
  • out_channels (int) :卷积层的输出维度;
  • kernel_size (int or tuple) :卷积核的大小;
  • stride (int or tuple, optional) :卷积核在原图上扫描时,需要跳跃的格数,默认跳一格;
  • padding (int, tuple or str, optional) :输入四个边的填充值,默认为0 ,不填充;
  • padding_mode (string, optional) :填充的方式有’zeros’, ‘reflect’, ‘replicate’ or ‘circular’. 默认为’zeros’,填充0值;
  • dilation (int or tuple, optional) :卷积核元素间的间隔,默认为1;
  • groups (int, optional) :输入通道和输出通道间的联系类别数,默认为1;
  • bias (bool, optional) :如果为真,添加一个学习的偏置到输出上,默认为真。

卷积层的输入和输出关系,如下 H o u t H_{out} Hout​和 W o u t W_{out} Wout​为卷积层输出图片的高和宽。

Pytorch中卷积层转向全连接层时,全连接层输入维度的确定相关推荐

  1. 三分钟完全了解PyTorch中卷积层内部计算方法和权值初始值的来历,让你对模型有更深层次的理解

    首先先说明第一个答案,也就是PyTorch中卷积层的计算方法,其实这点很多人可能在书上已经看过图了,我只是用代码复现一遍 我们把所有变量都明确,首先是输入变量,我们设为2 * 2的全1矩阵,如下: 然 ...

  2. 装建津说计算机丢失,宽带连接上网时老是连接不上说缺少netcfg.hlp文件怎么办...

    第1篇:宽带连接上网时老是连接不上说缺少netcfg.hlp文件怎么办宽带拨号上网会差文件???的确第一次遇到哦,你会装系统吗?会的话自己重新装一次再拨号连接,能连接就搞定了,不能连接打电话给电信或者 ...

  3. 惠普136wm显示无法连接服务器,136w打印机时连接无线时显示连接失败

    请问这个问题解决了吗? 操作系统: Microsoft Windows 10 (64-bit),也用Mac OS装HP Smart 试过. 我也碰到这个问题了,136w打印机时连接无线时显示连接失败, ...

  4. Codewarrior中利用PE multilink下载程序debug时不能连接问题

    现象:PC连接PE multilink然后连接单片机,mutilink上的与单片机的连接接口是正确的,但点击codewarrior中debug按钮,则会出现连接失败,如下图: 电脑端口也能识别 但就是 ...

  5. pytorch中卷积层的使用方法

    1. 官方文档解释 如图为卷积层的参数汇总: 1.kernel_size: 指卷积核,一般情况下定义大小,这里我们只需要定义其size,而对于其中的参数会自动进行采样,会在训练过程中不断的进行调整. ...

  6. 解决keil-5中stm32f103系列使用ST-Link下载程序时不能连接的问题。“flash download failed ”

    出现的问题如下: 解决方法如下: 因为新版的Keil加入了下载器的校验机制,所以我们需要替换掉新版编译器下的原文件 需要这个文件的评论下方留言记得留言哦. 一.解压后得到STlink文件夹,整个文件夹 ...

  7. macbookair连接iPhone时断断续续连接不稳定的解决方法

    打开Macbookair终端命令行,键入以下命令回车即可解决. sudo killall -STOP -c usbd 关注我的公众号免费获取海量Python学习教程,定期更新电子图书资源

  8. 反卷积原理 + pytorch反卷积层参数output_padding

    一般我们会认为2维卷积的计算分为了以下3类: 1.full   2.same   3. valid 参考:https://cn.mathworks.com/help/matlab/ref/conv2. ...

  9. 【连接池】Tomcat 连接池中 maxActive,maxWait,maxAge,testOnBorrow,testWhileIdle等选项的作用

    前言 连接池本质作用是为客户端提供连接复用,提升连接效率,降低系统开销.Tomcat的连接池提供了maxActive,maxWait,maxIdle,minIdle,initialSize等参数,配置 ...

最新文章

  1. InitializeComponent()有什么作用?
  2. apache httpclient 工具类_HttpClient
  3. Java中如何使用session
  4. Xilinx软硬IP双管齐下解决音视频处理痛点
  5. java动态拼接请求_在JavaWeb项目中处理静态文件或动态链接拼接网站地址的最优处理方案...
  6. 垂死病中惊坐起_我如何开始恢复垂死的软件团队的过程
  7. 12-22 挑战留给自己,积极面对
  8. python3颜色代码_python3中布局背景颜色代码分析
  9. 为什么女人喜欢有钱的男人?
  10. linux 版本号 加号,Linux kernel编译生成的版本多一个加号“+”
  11. 莫烦python进化算法_使用遗传算法解决TSP问题(莫烦python 学习笔记)
  12. Python:fractions模块数值、浮点、小数转分数
  13. VuePress自动化部署到GitHub服务器
  14. 如何用AI伴侣同步测试App Inventor软件
  15. 从关山口到五道口(2019年清华计算机考研全程回顾+经验+总结)
  16. 新版白话空间统计(9):置信度的初探
  17. mapgis同arcmap之间的数据转换, 投影变换,误差校正,坐标,基础资料,教程的相关信息的汇集...
  18. Linux下的QQ使用
  19. SpringBoot 实现微信模板消息通知推送提醒
  20. SuperMap三维专题之倾斜摄影——倾斜摄影数据介绍篇

热门文章

  1. 2008年度(第二届)中国软件生产力风云榜获奖单位及个人揭晓
  2. 英语语法学习(一堂课让你懂得英语语法百分之九十五--笔记整理)
  3. qt的mysql编程_界面编程之QT的数据库操作20180801
  4. android的刷机方式
  5. 基于Java毕业设计眼科医疗室信息管理系统源码+系统+mysql+lw文档+部署软件
  6. Java中输入(读)输出(写)流
  7. AVCHD素材该怎么通过EDIUS进行导入
  8. python 工程进度计划_Python3教学进度表
  9. 2020出行之变(三):智能交通的星罗棋布
  10. 微软Office与金山WPS Office有何私密关系?