目录
一、神经网络的基本骨架-nn.Moudle的使用
1.torch.nn官方文档:
先学习骨架containers,然后剩下的都是用来填充骨架的
2.containers文档:
①Moudle的作用:
②Moudle的示例代码:
主要有初始化函数和向前函数两个
③forward函数官方解释:
3.代码部分:
①重写两个函数,一种可以手写;
另一种可以借助pycharm->code->generate->Override Methods重写方法->init函数->完成
②代码示例:
from torch import nn
import torch
#定义模版
class Tudui(nn.Module):
def __init__(self):
super().__init__()
def forward(self,input):
output=input+1
return output
#创建神经网络
tudui = Tudui()
x = torch.tensor(1.0)
#传入值
output = tudui(x)
print(output)
③debug查看详情:
二、卷积操作:
1.常用的卷积:
2.Conv2d
①使用方法:
torch.nn.functional.conv2d(input, weight, bias=None, stride=1, padding=0, dilation=1, groups=1) → Tensor
#参数:
input – 输入,尺寸要求(minibatch,in_channels,𝑖𝐻,𝑖𝑊)
weight – 权重,尺寸要求 (out_channels,in_channels,𝑘𝐻,𝑘𝑊)
bias – 偏置
stride –卷积核,可以为单个数字or元组(sH,sW)-一个横向路径一个竖向路径
padding-决定填充的有多大,可以为单个数字or元组(padH,padW)
dilation
groups
②Stride参数理解:
a.有输入图像和卷积核
b.将输入图像的前三行和卷积核匹配:对应位相乘再相加
1x1+4+0+0+1+0+2+2+0=10,输出为10
c.假设Stride=(1,1)时,卷积核下一次走一步
2+0+3+0+2+0+4+1=12,输出为12
d.再右移,0+6+1+0+3+0+2+0+0=12
e.横向走完走纵向:18
f.最后输出:
[10,12,12,
18,16,16,
12, 9, 3]
③代码:
import torch
import torch.nn.functional as F
input = torch.tensor([[1,2,0,3,1],
[0,1,2,3,1],
[1,2,1,0,0],
[5,2,3,1,1],
[2,1,0,1,1]])
kernel = torch.tensor([[1,2,1],
[0,1,0],
[2,1,0]])
#1batchsize,1chanel,5x5,要与官方要求输入一致
input = torch.reshape(input,(1,1,5,5))
kernel = torch.reshape(kernel,(1,1,3,3))
#第一步先求尺寸
print(input.shape)
print(kernel.shape)
output = F.conv2d(input,kernel,stride=1)
print(output)
(四维分别是:样本数,矩阵深度,高度,宽度)
④padding参数讲解:
a.padding = 1
b.代码示范:
import torch
import torch.nn.functional as F
input = torch.tensor([[1,2,0,3,1],
[0,1,2,3,1],
[1,2,1,0,0],
[5,2,3,1,1],
[2,1,0,1,1]])
kernel = torch.tensor([[1,2,1],
[0,1,0],
[2,1,0]])
#1batchsize,1chanel,5x5,要与官方要求输入一致
input = torch.reshape(input,(1,1,5,5))
kernel = torch.reshape(kernel,(1,1,3,3))
#第一步先求尺寸
print(input.shape)
print(kernel.shape)
output = F.conv2d(input,kernel,stride=1)
print(output)
output2= F.conv2d(input,kernel,stride=1,padding=1)
print(output2)
c.填充后结果