任务描述
本关任务:
本关提供了一个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)
用途:对输入样本应用一维卷积核
输入大小为
输出
这里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参数指定填充区域的高度和宽度。
维度:
变量:
- 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)
用途:对输入样本应用二维卷积核
输入大小为
输出
这里imes代表 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 *********/