在系列中会敲完所有视频中代码,并且在注释详细写出感悟和易错点。
欢迎大家一起交流!
最前面的软件安装和环境配置部分,可以移步我的另一个帖子
一、神经网络
'主要在torch.nn里'
'首先学的是骨架container'
'Module,所有neural network的一个类。都是继承的父类nn.Module'
import torch
import torch.nn as nn
import torch.nn.functional as F
import torchvision
from torch.nn import Conv2d
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
#第一节课:Module
#region
class Model(nn.Module):
def __init__(self):
super().__init__()
def forward(self,input):
#中间的函数就是前向传播forward。conv1是卷积,F.relu是非线性处理
output = input + 1
return output
tudui = Model()
x = torch.tensor(1.0)
output = tudui(x)
print(output)
#endregion
二、卷积
#第二节课:卷积
#region
'卷积基本形式'
'Convolution conv1d一维 conv2d二维'
'torch.nn.functional是齿轮,torch.nn是集成好的方向盘'
'''
weight bias
stride步长,每次卷积核(自己设置)走几步 或者是tuple元组(横和竖都写)
'''
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]]) #卷积核
# print(input.shape)
# print(kernel.shape) #size不行,就需要改一下
input = torch.reshape(input,(1,1,5,5))
kernel = torch.reshape(kernel,(1,1,3,3)) #把两维的数据变成了四维,数据的数量、层数、长、宽(就是上面设的)
output = F.conv2d(input, kernel, stride=1)
print(output) #这里输出的是一个3x3的矩阵,也就是卷积的结果
output = F.conv2d(input, kernel, stride=2) #这里就是2个步进,也就是变成2x2的矩阵(张量)
print(output)
'conv1d参数padding,填充,在外围填充一圈0'
output = F.conv2d(input,kernel,stride=1,padding=1) #指的是填充一行
print(output)
#神经网络中的卷积使用
'图片是二维的,是conv2d'
'padding_model是常年zero,bias偏置常年设置为true,group常年为1,后面的基本上都不用变,都是默认。就前面5个需要自己设置'
'彩色通道in_chanels是3,out_channels,kernel可以设置一个tuple。'
'out_channel=2的时候,大多都是在增加卷积的通道数,就是很多个卷积核,然后生成好几个'
dataset = torchvision.datasets.CIFAR10("../data",train=False,transform=torchvision.transforms.ToTensor(),download=True)
dataloader = DataLoader(dataset,batch_size=64)
class Tudui(nn.Module):
def __init__(self):
super(Tudui,self).__init__()
self.conv1 = Conv2d(3,6,3,stride=1,padding=0)
def forward(self,x): #这个模型没有训练,只有向前传播,所有的参数都是随机的
x = self.conv1(x)
return x
tudui = Tudui()
# print(tudui) #这样就能看到里面的卷积参数,kernel_size是3x3,stride是1x1
writer = SummaryWriter("../logs") #这里对应都是后面tensorboard也是tensorboard --logdir=../logs才对!如果只是logs就不对,还是前几届课的图像
step = 0
for data in dataloader:
imgs,targets = data
output =tudui(imgs)
print(imgs.shape) #打印的是张量的大小torch.size,batch size是一批次有多少,通道数是颜色的,高和宽
print(output.shape) #这里是为了对比每张图片的之前与之后的对比
writer.add_images("input",imgs,step) #卷积核的个数是out channel的个数
output = torch.reshape(output, (-1,3,30,30))#第一个是个占位符,根据后面像素计算出来batch size
writer.add_images("output",output,step) #这里用images函数而不是image!
step = step + 1
writer.close()
#padding和stride参数要自己算。尺寸前后没变就是指填充了
#endregion
标签:kernel,nn,卷积,torch,Pytorch,input,output,跟练
From: https://blog.csdn.net/2301_80060871/article/details/143066850