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

devtools/2024/9/23 5:52:35/

任务描述

本关任务:

本关提供了一个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)

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

输入大小为(N,C_{in},L)

输出(N,C_{out},L_{out})

这里imes代表 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参数指定填充区域的高度和宽度。

维度:Input : (N,C_{in},L_{in})

Output :(N,C_{out},L_{out})
Lout=floor((L_{in}+2))

变量:

  • 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)

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

输入大小为(N,C_{in},H,W)

输出(N,C_{out},H_{out},W_{out})

这里imes代表 the valid 2D cross -correlation operator

参数说明:

与 conv1d 相同

维度:

Input : (N,C_{in},H,W)

Output :(N,C_{out},H_{out},W_{out})

H_{out}=floor((H_{in}+2))

W_{out}=floor((W_{in}+2))

应用示例:

#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 Variableinput = 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 *********/

http://www.ppmy.cn/devtools/4200.html

相关文章

适用于Windows电脑的最佳数据恢复软件是哪些?10佳数据恢复软件

丢失我们系统中可用的宝贵信息是很烦人的。我们可以尝试几种手动方法来重新获取丢失的数据。然而,当我们采用非自动方法来恢复数据时,这是一项令人厌烦和乏味的工作。在这种情况下,我们可以尝试使用一些正版硬盘恢复软件进行数据恢复。此页面…

《组合实体模式(极简c++)》

本文章属于专栏- 概述 - 《设计模式(极简c版)》-CSDN博客 模式说明 方案:组合实体模式是一种结构型设计模式,旨在将一组对象组合成单个对象实体来处理。这个实体统一对外提供操作,而不需要直接操作每个对象。优点&…

Java作业6-Java类的基本概念三

编程1 import java.util.*;abstract class Rodent//抽象类 {public abstract String findFood();//抽象方法public abstract String chewFood(); } class Mouse extends Rodent {public String findFood(){ return "大米"; }public String chewFood(){ return "…

vue 下载文件 处理后台返回的文件流

1. 下载文件很常见,下载成各种格式的也很常见,本质就是后台返回一个文件流,我们前端去处理一下就行,但是如果因为某些条件,没有返回文件流,返回告诉你,文件出现错误了,那我们就需要把…

【快捷部署】020_Jenkins(2.60.3)

📣【快捷部署系列】020期信息 编号选型版本操作系统部署形式部署模式复检时间020Jenkins2.60.3Ubuntu 20.04Docker单机2024-04-17 一、快捷部署 #!/bin/bash ################################################################################# # 作者&#xff1…

Linux配置环境变量_推荐的方式

Linux配置环境变量_推荐以下两种方法: (1)用户环境变量:编辑用户目录下 ~/.bashrc、~/.bash_profile 或 ~/.profile文件 (2)系统环境变量:在/etc/profile.d/目录,创建独立的.sh文件 环境变量脚本文件的执行顺序 /etc/profile-&g…

成为一名程序员的原因

选择成为一名程序员可能是由多种因素驱动的,包括兴趣、职业发展、经济收入、个人成就感等。以下是一些常见的原因: 1. 兴趣和热情:许多人选择成为程序员是因为他们对计算机科学、编程语言、算法和软件开发有着浓厚的兴趣。编程可以是一种创造…

【八股文】Spring 谈谈你对AOP的理解

AOP AOP(Aspect-Oriented Programming,面向切面编程):是一种新的方法论,是对传统 OOP(Object-Oriented Programming,面向对象编程)的补充。 面向对象是纵向继承,面向切面是横向抽取。 OOP思想是一种垂直纵向的继承体…