系列文章目录
- pytorch学习1-数据加载以及Tensorboard可视化工具
- pytorch学习2-Transforms主要方法使用
- pytorch学习3-torchvisin和Dataloader的使用
- pytorch学习4-简易卷积实现
- pytorch学习5-最大池化层的使用
- pytorch学习6-非线性变换(ReLU和sigmoid)
- pytorch学习7-序列模型搭建
- pytorch学习8-损失函数与反向传播
- pytorch学习9-优化器学习
- pytorch学习10-网络模型的保存和加载
- pytorch学习11-完整的模型训练过程
文章目录
一、简易nn
python
class MyNN(nn.Module):#创建一个神经网络,需要继承nn.Moudle
def __init__(self, ):
super().__init__()
def forward(self,input):
output=input+1#这个nn的作用就是把输入自增一
return output
mynn=MyNN()
x=torch.tensor(1.0)
output=mynn(x)
print(output)
二、简简易卷积
python
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],
])
input=torch.reshape(input,(1,1,5,5))#torch卷积操作要求数据有四个参数,批次、通道数、高、宽,而原始的input这里只有高和宽两个参数,所以需要reshape这个转换函数来将数据转换为想要的
kernel=torch.reshape(kernel,(1,1,3,3))
print(input.shape)
print(kernel.shape)
#conv2d代表二维卷积,还有一维三维等等
output=F.conv2d(input,kernel,stride=1,padding=1)#进行卷积操作,padding=1代表进行一行列0填充,默认为0,不填充
print(output)
三、简易卷积
python
dataset=torchvision.datasets.CIFAR10("../data",train=False,transform=torchvision.transforms.ToTensor(),download=True)
dataloader=DataLoader(dataset,batch_size=64)#这行代码将整个数据集分割成许多批,每一批有64个样本
class Mynn2(nn.Module):
def __init__(self, ) :
super(Mynn2,self).__init__()
self.conv1=Conv2d(in_channels=3,out_channels=6,kernel_size=3,stride=1,padding=0)#out_channels代表输出的通道数(也就是代表经过卷积之后输出多少个图像(每一张图像都由一个卷积核生成,所以这个输出通道数也间接代表了有几个卷积核))
def forward(self,x):
x=self.conv1(x)#进行卷积操作
return x
mynn2=Mynn2()
#print(mynn2)#查看网络结构
writer=SummaryWriter("logs")
step=0
for data in dataloader:
imgs,target=data
output=mynn2(imgs)
print(imgs.shape)
print(output.shape)#这两行可以看出,输入的3通道输出变成了6通道
writer.add_images("我是输入",imgs,step)
output=torch.reshape(output,(-1,3,30,30))#这个是因为,输出通道有六个,无法显示,那么可以将输出修改为3个通道,和输入一样,这个函数有四个参数,第一个参数设置为-1就会自动计算合适值
writer.add_images("我是输出",output,step)
step=step+1
writer.close()
总结
以上就是今天要讲的内容,从易到难进行简易卷积实现