????????本篇自学笔记来自于b站《PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】》,Up主讲的非常通俗易懂,文章下方有视频连接,如有需要可移步up主讲解视频,如有侵权,实非故意,深表歉意,请与我联系,删除相关内容!
? ? ? ? 本节介绍一些torch.nn模块的常用层,包括卷积层、池化层以及激活函数等。
? ? ? ? 首先是卷积层:torch.nn.Conv2d():主要参数有:
? ? ? ? ?in_channel:输入的通道数;out_channel:输出的通道数;kernek_size:卷积核的边长stride:步长,卷积核每次移动的长度,padding:是否需要填充
? ? ? ? 卷积的计算,如图所示,为将卷积核翻转180度,然后对应相乘:
?
? ? ? ? 最大池化层:torch.nn.MaxPool2d():参数为kernel_size。在进行最大池化的过程时,卷积核在原图像上移动,输出的是这一块的最大值。不用进行和卷积类似的计算。
? ? ? ? 激活函数:Relu和Sigmoid,依据不同的激活函数有不同的计算方式。
? ? ? ? 线性层:torch.nn.Linear():参数有in_feature和out_feature。一个形如64*4*4的图片想要进入linear层,要先将其展平,即in_feature为64*4*4=1024,out_feature则为想要的输出。
下面给出详细代码:
import torch
import torchvision
from torch import nn
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
dataset = torchvision.datasets.CIFAR10(root='dataset',train = False,transform=transforms.ToTensor(),download=True)
data_load = DataLoader(dataset,batch_size=64,drop_last=True)
class Model(nn.Module):
def __init__(self):
super().__init__()
self.conv1 = nn.Conv2d(in_channels=3,out_channels=5,kernel_size=3,stride=1,padding=0)
self.maxpool1 = nn.MaxPool2d(kernel_size=3)
self.relu = nn.ReLU()
self.sigmoid = nn.Sigmoid()
self.linear = nn.Linear(in_features=196608,out_features=10)
def forward(self,x):
#output = self.conv1(x)
#output = self.maxpool1(x)
#output = self.relu(x)
#output = self.sigmoid(x)
output = self.linear(x)
return output
model = Model()
# writer = SummaryWriter("logs")
# step = 1
for data in data_load:
imgs,targets = data
print(imgs.shape)
output = torch.flatten(imgs)#展平数据
print(output.shape)
output = model(output)
print(output.shape)
#writer.add_images("input",imgs,step)
#卷积输出的时候需要进行reshape,最大池化则不需要,因为最大池化后通道数不变
#output = torch.reshape(output,[-1,3,30,30])
#print(output.shape)
# writer.add_images("output",output,step)
# step += 1
#writer.close()
附视频地址:PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】_哔哩哔哩_bilibili
|