任务名称:学习网络层中的卷积层,池化层,全连接层和激活函数层
任务简介:学习网络模型中采用的神经网络层,包括卷积层,池化层,全连接层和激活函数层,学会如何区分二维卷积和三维卷积;
详细说明:
-
本节第一部分学习卷积神经网络中最重要的卷积层,了解卷积操作的过程与步骤,同时学会区分一维/二维/三维卷积,最后学习转置卷积(Transpose Convolution)的由来以及实现方法;
-
本节第二部分学习池化层,全连接层和激活函数层,在池化层中有正常的最大值池化,均值池化,还有图像分割任务中常用的反池化——MaxUnpool,在激活函数中会学习Sigmoid,Tanh和Relu,以及Relu的各种变体,如LeakyReLU,PReLU, RReLU
作业名称(详解):
- 深入理解二维卷积,采用手算的方式实现以下卷积操作,然后用代码验证。
-
采用2个尺寸为33的卷积核对3通道的55图像进行卷积,padding=0, stride=1,dilation=0
其中 input shape = (3, 5, 5),数据如下:
kernel size = 3*3, 第一个卷积核所有权值均为1, 第二个卷积核所有权值均为2,
计算输出的feature map尺寸以及所有像素值。 -
接1)题,上下左右四条边均采用padding,padding=1,填充值为0,计算输出的feature map尺寸以及所有像素值
打卡要求:代码输出结果截图,打印输出feature map的值。
- 对lena图进行333 3d卷积,提示:padding=(1, 0, 0)
# ================ 3d
# flag = 1
flag = 0
if flag:
conv_layer = nn.Conv3d(3, 1, (1, 3, 3), padding=(1, 0, 0))
nn.init.xavier_normal_(conv_layer.weight.data)
# calculation
img_tensor.unsqueeze_(dim=2) # B*C*H*W to B*C*D*H*W
img_conv = conv_layer(img_tensor)
卷积
卷积运算:卷积核在输入信号(图像)上滑动,相应位置上进行乘加
卷积核:又称为滤波器,过滤器,可认为是某种模式,某种特征。
卷积过程类似于用一个模版去图像上寻找与它相似的区域,与卷积核模式越相似,激活值越高,从而实现特征提取。
卷积维度:一般情况下,卷积核在几个维度上滑动, 就是几维卷积
nn.Conv2d
- 功能:对多个二维信号进行二维卷积
- 主要参数:
• in_channels:输入通道数
• out_channels:输出通道数,等价于卷积核个数
• kernel_size:卷积核尺寸
• stride:步长
• padding :填充个数
• dilation:空洞卷积大小
• groups:分组卷积设置
• bias:偏置
- 代码
import os
import torch.nn as nn
from PIL import Image
from torchvision import transforms
from matplotlib import pyplot as plt
from tools.common_tools import transform_invert, set_seed
set_seed(3) # 设置随机种子
# ================================= load img ==================================
path_img = os.path.join(os.path.dirname