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 *********/
相关推荐
(; ̄ェ ̄)。18 小时前
机器学习入门(十五)集成学习,Bagging,Boosting,Voting,Stacking,随机森林,Adaboost
人工智能·机器学习·集成学习
杀生丸学AI18 小时前
【物理重建】PPISP :辐射场重建中光度变化的物理合理补偿与控制
人工智能·大模型·aigc·三维重建·世界模型·逆渲染
vlln19 小时前
【论文速读】递归语言模型 (Recursive Language Models): 将上下文作为环境的推理范式
人工智能·语言模型·自然语言处理
春日见19 小时前
如何避免代码冲突,拉取分支
linux·人工智能·算法·机器学习·自动驾驶
龙腾AI白云19 小时前
基于Transformer的人工智能模型搭建与fine-tuning
人工智能·数据挖掘
weixin_3954489119 小时前
export_onnx.py_0130
pytorch·python·深度学习
人工智能培训19 小时前
大模型训练数据版权与知识产权问题的解决路径
人工智能·大模型·数字化转型·大模型算法·大模型应用工程师
无垠的广袤19 小时前
【VisionFive 2 Lite 单板计算机】边缘AI视觉应用部署:缺陷检测
linux·人工智能·python·opencv·开发板
Duang007_19 小时前
【LeetCodeHot100 超详细Agent启发版本】字母异位词分组 (Group Anagrams)
开发语言·javascript·人工智能·python
phoenix@Capricornus20 小时前
CNN中卷积输出尺寸的计算
人工智能·神经网络·cnn