您好,欢迎来到百家汽车网。
搜索
您的当前位置:首页(神经网络和卷积入门)Pytorch小土堆跟练代码(第7天)

(神经网络和卷积入门)Pytorch小土堆跟练代码(第7天)

来源:百家汽车网

本系列为跟练每集代码,然后进入机器学习教程。

在系列中会敲完所有视频中代码,并且在注释详细写出感悟和易错点。

欢迎大家一起交流!

最前面的软件安装和环境配置部分,可以移步我的

一、神经网络

'主要在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=)

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

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- baijiahaobaidu.com 版权所有 湘ICP备2023023988号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务