一、神经网络基骨架nn.module

  1. 导包

    1. from torch import nn
    2. import torch
  2. 定义模型

    1. class TEST(nn.Module):
    2. def __init__(self):
    3. super().__init__()
    4. def forward(self, input):
    5. output = input + 1
    6. return output
  3. 测试

    1. test = TEST()
    2. x = torch.tensor(1.0)
    3. output = test(x)

    image.png

二、 卷积操作

  1. torch.size() 含义

image.png

  • 第一维数字5:表示batch_size
  • 第二维数字2:表示通道数
  • 第三维数字3:表示高度
  • 第四维数字4:表示宽度
  • tips : reshape操作中的-1表示自动计算

image.png

  1. 卷积层
  • 导包

    1. import torch
    2. import torchvision
    3. from torch import nn
    4. from torch.nn import Conv2d
    5. from torch.utils.data import DataLoader
    6. from tensorboardX import SummaryWriter
  • 加载数据

    1. dataset = torchvision.datasets.CIFAR10("./dataset",
    2. train=False,
    3. transform = torchvision.transforms.ToTensor(),
    4. download = False)
    5. dataloader = DataLoader(dataset, batch_size =64)
  • 定义模型

    1. class Test(nn.Module):
    2. def __init__(self):
    3. super().__init__()
    4. # in_channels为输入通道数
    5. # out_channels为输出通道数
    6. # kernel_size为卷积核大小
    7. # stride为步长
    8. self.conv1 = Conv2d(in_channels=3, out_channels=6, kernel_size=3, stride=1, padding=0)
    9. def forward(self,x):
    10. x = self.conv1(x)
    11. return x
  • 运行

    1. test = Test()
    2. writer = SummaryWriter("logs")
    3. step = 0
    4. for idx,data in enumerate(dataloader):
    5. # imgs-> (64,3,32,32)
    6. imgs, tragets = data
    7. # output ->(64,6,30,30) (bchw)
    8. # output中的c为6,因为卷积操作中out_channels为6
    9. output = test(imgs)
    10. writer.add_images("img", imgs, idx)
    11. # 使用reshape将(64,6,30,30) reshape为(128,3,30,30)
    12. writer.add_images("output",output.reshape(-1,3,30,30), idx)
    13. writer.close()