2020年10月19日 赛虎实习记录
搭建一个七层网络,卷积图片。
💪💪

import torch
import torch.nn as nn

from PIL import Image
import torchvision.transforms as trs


class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()  # 调用父类的构造方法
        # 开始搭建网络层
        # 中间层
        self.layers = nn.Sequential(
            # 中间层第一层
            nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3, stride=1, padding=0),
            nn.ReLU(),  # 激活函数:给网络层提供非线性能力
            nn.MaxPool2d(2, 2),  # 池化层:加速卷积,N,16,15,15
            #
            nn.Conv2d(16, 64, 3, 1),  # N, 64,13,13
            nn.ReLU(),
            #
            nn.Conv2d(64, 70, 3, 1),
            nn.ReLU(),
            #
            nn.Conv2d(70, 80, 3, 1),  # N,80,12,12
            nn.ReLU(),
            #
            nn.Conv2d(80, 128, 3, 1),
            nn.ReLU(),
            # 第六层
            nn.Conv2d(128, 80, 3, 1),
            nn.ReLU(),
            # 第七层
            nn.Conv2d(80, 128, 3, 1),
            nn.ReLU()
        )
        # 输出层,根据中间层最后的形状进行定义
        self.output_layer = nn.Sequential(
            # 线性层
            # nn.Linear(80 * 80 * 3, 10)
            nn.Linear(128 * 169 * 237, 10)  # (接收的特征数,输出结果数)
        )

    def forward(self, x):  # 前向计算
        h = self.layers(x)  # 中间层,卷积(NCHW)
        print(h.shape)  # 获取中间层最后的形状
        # 转换形状NCHW为NV
        h = h.reshape(-1, 128 * 169 * 237)  # 转换形状NCHW为NV
        h = self.output_layer(h)  # 输出层,线性(NV)
        return h


if __name__ == '__main__':
    net = Net()
    img = Image.open("pic.jpg")
    # 转化  image图片  为  tensor矩阵
    x = trs.ToTensor()(img)
    print(x.shape)  # 查看形状CHW
    x = x.reshape(1, 3, 365, 500)  # 变形为NCHW
    print(x.shape)
    y = net(x)
    print(y)
    print(y.shape)

    # x = torch.randn(1,3,32,32) #创建随机数据 1张3层的32*32的图片
    # y = net(x)
    # print(y.shape)
    # print(y)