pytorch神经网络(自学自用)

基础神经网络

要想使用pytorch中的神经网络,则首先需要编写一个类去继承nn.Module 然后重写其中的init以及forward方法,forward方法就是一个使input变成output的函数,下面有个简单的例子

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)

这是一个战损版的神经网络,后续会讲解池化、非线性等操作。

卷积

卷积的基本概念就不介绍了,默认大家都知道什么是卷积,其本质就是通过一个滤波器对数组进行内积运算,直接来看在pytorch中如何对一张张图片进行卷积操作
首先我们先创建CIFAR10数据集

dataset = torchvision.datasets.CIFAR10("../dataset",train=False,transform=torchvision.transforms.ToTensor(),
                                       download=True)

在这里我们已经通过transform把它转成了一个tensor数据类型,接着我们用dataloader来加载这个数据集

dataloader = DataLoader(dataset,batch_size=64)

创建我们自己的神经网络类

class TuDui(nn.Module):
    def __init__(self):
        super(TuDui, self).__init__()
        self.conv1 = Conv2d(3,6,kernel_size=3,stride=1,padding=0)

    def forward(self,x):
        x = self.conv1(x)
        return x

我们的卷积操作主要通过init方法中的Conv2d函数来实现,其中参数为输入的通道数、输出的通道数(这里指定为6)、卷积核的大小(这里为3代表一个3*3的矩阵)、每次移动的步长以及在数组外填充的宽度(这里为0代表不填充)
接着我们来使用tensorboard来加载这些图片

writer = SummaryWriter("../logs")
step = 0
for data in dataloader:
    imgs,targets = data
    output = tudui(imgs)
    print(imgs.shape)       #torch.Size([64, 3, 32, 32])
    print(output.shape)     #torch.Size([64, 6, 30, 30])
    writer.add_images("input",imgs,step)
    #因为彩色图像需要是3个通道才能显示,此时output为6通道,无法显示,因此要先进行转换,当维度设
    #为-1时,其会根据其他指定的维度自行计算维度
    output = torch.reshape(output,(-1,3,30,30))
    writer.add_images("output",output,step)
    step = step + 1
writer.close()

看完整代码

import torchvision
import torch
from torch import nn
from torch.nn import Conv2d
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter

dataset = torchvision.datasets.CIFAR10("../dataset",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,kernel_size=3,stride=1,padding=0)

    def forward(self,x):
        x = self.conv1(x)
        return x

tudui = TuDui()

writer = SummaryWriter("../logs")
step = 0
for data in dataloader:
    imgs,targets = data
    output = tudui(imgs)
    print(imgs.shape)       #torch.Size([64, 3, 32, 32])
    print(output.shape)     #torch.Size([64, 6, 30, 30])
    writer.add_images("input",imgs,step)
    #因为彩色图像需要是3个通道才能显示,此时output为6通道,无法显示,因此要先进行转换,当维度设为-1时,其会根据
    #其他指定的维度自行计算维度
    output = torch.reshape(output,(-1,3,30,30))
    writer.add_images("output",output,step)
    step = step + 1
writer.close()

你可能感兴趣的:(神经网络,pytorch,深度学习)