Pytorch 之torch.nn初探 卷积--Convolution Layers

任务描述

本关任务:

本关提供了一个Variable 类型的变量input,按照要求创建一 Conv1d变量conv,对input应用卷积操作并赋值给变量 output,并输出output 的大小。

相关知识

卷积的本质就是用卷积核的参数来提取原始数据的特征,通过矩阵点乘的运算,提取出和卷积核特征一致的值。

卷积层是用一个固定大小的矩形块去席卷原始数据,将原始数据分成一个个和卷积核大小相同的小块,然后将这些小块和卷积核相乘输出一个卷积值(注意这里是一个单独的值,不再是矩阵了)。

这里我们拿最常用的 conv1d举例说明卷积过程的计算。

conv1d

基本形式:

torch.nn.Conv1d (in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)

用途:对输入样本应用一维卷积核

输入大小为

输出

这里i m e s代表 the valid cross -correlation operator。

参数说明:

|--------------|------------------------|------------------------|-----------|
| 参数名 | 参数类型 | 说明 | 默认值 |
| in_channels | int | 输入图像中的通道数量 | |
| out_channels | int | 卷积产生的通道数 | |
| kernel_size | int或 tuple | 循环内核的大小 | |
| stride | int or tuple, optional | 滑动窗口,指每次卷积对原数据滑动n个单元格。 | 默认为1 |
| padding | int or tuple, optional | 是否对输入数据填充0 | 默认为0(不填充) |
| dilation | int or tuple, optional | 卷积核之间的空格 | 默认为1 |
| groups | int ,optional | 将输入数据分组,通常不用管这个参数 | |
| bias | boolean ,optional | 偏移量参数,一般也不用管 | |

optional 表示可选 padding可以将输入数据的区域改造成是卷积核大小的整数倍,这样对不满足卷积核大小的部分数据就不会忽略了。通过padding参数指定填充区域的高度和宽度。

维度:


变量:

  • weight (Tensor) -- 模块的卷积核权重,也就是卷积核本。是一个三维数组(out_channels, in_channels, kernel_size)。out_channels是卷积核输出层的神经元个数,也就是这层有多少个卷积核;in_channels是输入通道数;kernel_size是卷积核的宽度。
  • bias (Tensor) -- 卷积核输出层的偏移量。

应用示例:

复制代码
m = nn.Conv1d(16, 33, 3, stride=2)
input = Variable(torch.randn(20, 16, 50))
output = m(input)
print(output.size())

输出结果: torch.Size([20, 33, 24])

conv1d是一维卷积,它和conv2d的区别在于只对宽度进行卷积,对高度不卷积。

conv2d

基本形式:

torch.nn.Conv2d (in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)

用途:对输入样本应用二维卷积核

输入大小为

输出

这里i m e s代表 the valid 2D cross -correlation operator

参数说明:

与 conv1d 相同

维度:

应用示例:

复制代码
#Conv2d

# With square kernels and equal stride
m = nn.Conv2d(16, 33, 3, stride=2)

# non-square kernels and unequal stride and with padding
m = nn.Conv2d(16, 33, (3, 5), stride=(2, 1), padding=(4, 2))

input = Variable(torch.randn(20, 16, 50, 100))
output = m(input)
print(output.size())

输出结果: torch.Size([20, 33, 28, 100])

编程要求

本关涉及的代码文件为convolution.py,本次编程任务是补全右侧代码片段中Begin至End中间的代码,具体要求如下:

  • 创建一个in_channels=16, out_channels=33, kernel_size=3, stride=2的Conv1d变量conv;
  • 对input应用卷积操作并赋值给变量 output;
  • 输出 output 的大小。
  • 具体请参见后续测试样例。

测试说明

测试过程:

  • 本关涉及的测试文件为convolution.py,运行用户填写后的程序判断正误。
  • 测试程序将检测两个方面:是否包含特定的代码行以及程序的输出是否正确,若两个方面均正确则输出下面的预期输出,否则报错。
  • 请注意输出格式及规范。
  • 注意,在声明变量时请按照提示命名,否则将会报错。

以下是测试样例:

测试输入: 预期输出: torch.Size([10, 24,13])

Congratulation!

代码实战

复制代码
import torch
import torch.nn as nn
from torch.autograd import Variable

input = Variable(torch.randn(10, 16, 40))

#/********** Begin *********/

#创建一个in_channels=16, out_channels=24, kernel_size=4, stride=3的Conv1d变量conv
conv = nn.Conv1d(16, 24, 4, stride=3)

#对input应用卷积操作并赋值给变量 output
output=conv(input)

#输出 output 的大小,要求输出不换行
print(output.size())

#/********** End *********/
相关推荐
BB_CC_DD21 小时前
超简单搭建AI去水印和图像修复算法lama-cleaner二
人工智能·深度学习
珠海西格电力21 小时前
零碳园区物流园区架构协同方案
人工智能·物联网·架构·能源
向成科技21 小时前
新品 | 向成电子XC3576M小体积主板,全面适配国产麒麟操作系统
人工智能·ai·解决方案·硬件·国产操作系统·麒麟系统·主板
水如烟1 天前
孤能子视角:人工智能的“安全对齐“与“共享学习“
人工智能
夏天是冰红茶1 天前
小目标检测:PinwheelConv详解
人工智能·目标检测·计算机视觉
老蒋新思维1 天前
创客匠人启示:破解知识交付的“认知摩擦”——IP、AI与数据的三角解耦模型
大数据·人工智能·网络协议·tcp/ip·重构·创客匠人·知识变现
爱笑的眼睛111 天前
深入解析Matplotlib Axes API:构建复杂可视化架构的核心
java·人工智能·python·ai
百***07451 天前
GPT-5.2 极速接入指南:流程详解与主流模型对比
网络·人工智能·gpt
工程师丶佛爷1 天前
从零到一MCP集成:让模型实现从“想法”到“实践”的跃迁
大数据·人工智能·python
黑客思维者1 天前
机器学习001:从“让机器学会思考”到生活中的智能魔法
人工智能·机器学习·生活