Java教程

神经网络--卷积层

本文主要是介绍神经网络--卷积层,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
import torch
import torchvision.datasets
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("./DXAA",train=False,transform=torchvision.transforms.ToTensor(),download=True)#路径为返回上一层路径,建立DATA文件夹
# 注意这里的dataset 需要将其转成tensor的类型,否则下面的卷积操作将无法进行
dataloader = DataLoader(dataset,batch_size=64)

class sza_(nn.Module):#继承神经网络的模型Module
    def __init__(self):
        super(sza_, self).__init__()
        self.conv1 = Conv2d(in_channels=3,out_channels=6,kernel_size=3,stride=1,padding=0)#彩色图片为3,黑白图片为1,kernel_size 为数字,那么卷积核为3*3
        #现在我们的网络当中有一个卷积层叫做conv1
    def forward(self,x):
        x = self.conv1(x)#这里的输入值为为tensor类型。
        return x

sza__ = sza_()#实例化、

# sza_(
#   (conv1): Conv2d(3, 6, kernel_size=(3, 3), stride=(1, 1))
# )
writer = SummaryWriter("./logs")
step = 0
for data in dataloader:
    imgs,targets = data
    output = sza__(imgs)
    # print(imgs.shape)
    # print(output.shape)
# torch.Size([64, 3, 32, 32])意思为imgs 的batchsize为64一组  ,in_channels =3, 大小是32*32的
# torch.Size([64, 6, 30, 30])经过一轮卷积之后 output的batchsize仍然为64一组,但是out_channels 输出为6, 大小缩水为30*30
    writer.add_images("卷积操作before",imgs,step)
    output = torch.reshape(output,(-1,3,30,30))#torch.size(64,6,30,30)--->(xxx,3,30,30)
    # print(output.shape)#reshape结果:torch.Size([128, 3, 30, 30])
    writer.add_images("卷积操作after",output,step)#    writer.add_images("卷积操作after",output,step)这里显示报错原因在于写入的图片out_channels为6,而彩色图片的channels为3
    step = step + 1
writer.close()

效果如下:

 

 

这篇关于神经网络--卷积层的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!