pytorch学习笔记——Sequential的使用和Flatten和flatten的区别

注意事项:

1.Sequential可以简化编程,不需要一个卷积层或者一个池化层就创建一个对象。在forward里面也不需要一个一个对象进行调用。

class nn_seq(nn.Module):
    def __init__(self) -> None:
        super().__init__()
        self.model = Sequential(#使用sequential的好处不需要将方法一个一个拿出来
            nn.Conv2d(3,32,5,padding=2),
            nn.MaxPool2d(2),
            nn.Conv2d(32,32,5,padding=2),
            nn.MaxPool2d(2),
            nn.Conv2d(32,64,5,padding=2),
            nn.MaxPool2d(2),
            Flatten(),
            nn.Linear(1024,64),
            nn.Linear(64,10)
        )


    def forward(self,x):
        output = self.model(x)
        return output

2.ones,zeros矩阵,在进行网络测试的时候可以进行使用

input = torch.ones((64,3,32,32))#使用内置的全1矩阵,第一个是batchsize,第二个是通道数,第三个是h,第四个是w

3.Flatten和flatten的区别

(首先:Flatten来自nn模块下这点和卷积池化是一样的,flatten是来自torch模块下和nn模块是平级的)

(其次:Flatten进行展平的时候只是将每张图片进行分别展平,没有将展平后的向量进行拼接,但是flatten是将所有图片进行展平后还进行拼接)

for data in test_loader:
    imgs,targets = data
    print(imgs.shape)
    # imgs = flatten(imgs)#展平处理,包括把batch一起展平
    # print(imgs.shape)
    output = flatten_(imgs)
    print(output.shape)
    output1 = flatten(imgs)
    print(output1.shape)

 下面观看完整代码

import torch
from torch import nn, zeros
from torch.nn import Sequential, Conv2d, Flatten


class nn_seq(nn.Module):
    def __init__(self) -> None:
        super().__init__()
        self.model = Sequential(#使用sequential的好处不需要将方法一个一个拿出来
            nn.Conv2d(3,32,5,padding=2),
            nn.MaxPool2d(2),
            nn.Conv2d(32,32,5,padding=2),
            nn.MaxPool2d(2),
            nn.Conv2d(32,64,5,padding=2),
            nn.MaxPool2d(2),
            Flatten(),
            nn.Linear(1024,64),
            nn.Linear(64,10)
        )


    def forward(self,x):
        output = self.model(x)
        return output

nn_seq_1 = nn_seq()
print(nn_seq_1)
input = torch.ones((64,3,32,32))#使用内置的全1矩阵,第一个是batchsize,第二个是通道数,第三个是h,第四个是w
output = nn_seq_1(input)
print(output.shape)

你可能感兴趣的:(python,pytorch,深度学习)