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 *********/
相关推荐
程序员脚趾2 小时前
GPT-5.6 上线:当 GPT 与 Codex 走向融合,AI 正从“回答问题”走向“完成工作”
人工智能
thubier(段新建)2 小时前
owtb 3pl 面向城市配送物流企业需求V0.2
大数据·人工智能
Token炼金师3 小时前
模型的防线:Prompt 注入防御、越狱攻击与对齐、红队测试、价值观对齐、对抗样本鲁棒性、安全评测与边界 —— 模型安全六防
人工智能·红队测试·prompt 注入防御·越狱攻击与对齐·价值观对齐·对抗样本鲁棒性·安全评测与边界
嘘神秘用3 小时前
布:AI 驱动的 Redis 客户端,更快、更直观
数据库·人工智能·redis
黒亱中旳3 小时前
Java AI 框架三国杀:Solon AI vs Spring AI vs LangChain4j 深度对比
java·人工智能·spring
小和尚同志3 小时前
前端 AI 单元测试思考与落地
前端·人工智能·aigc
alxraves3 小时前
医用超声远程会诊系统:会诊平台的核心架构与功能解析
java·人工智能·架构
jinggongszh4 小时前
智能硬件对接与系统落地:开发岗在制造现场的经验沉淀
大数据·人工智能
ZeekerLin4 小时前
AI 原生团队协作机制:角色、分工与工程文化变化
大数据·人工智能
城中南小4 小时前
零基础认识大语言模型(LLM)工作原理(5.Transformer的FFN模块到底是什么?)
人工智能·语言模型·transformer