当前位置:   article > 正文

小土堆pytorch学习笔记004

小土堆pytorch学习笔记004

目录

1、神经网络的基本骨架-nn.Module的使用

2、卷积操作实例

3、神经网络-卷积层

4、神经网络-最大池化的使用

(1)最大池化画图理解:

(2)代码实现:

5、神经网络-非线性激活

(1)代码实现(调用sigmoid 函数)

6、神经网络-线性层

(1)代码

7、网络搭建-小实战

(1)完整代码 


1、神经网络的基本骨架-nn.Module的使用

官网地址:pytorch里的nn

  1. import torch
  2. from torch import nn
  3. class Tudui(nn.Module):
  4. def __init__(self):
  5. super().__init__()
  6. def forward(self, input):
  7. output = input + 1
  8. return output
  9. tudui = Tudui()
  10. x = torch.tensor(1.0)
  11. output = tudui(x)
  12. print(output)

2、卷积操作实例

  1. import torch
  2. import torch.nn.functional as F
  3. input = torch.tensor([[1, 2, 0, 3, 1],
  4. [0, 1, 2, 3, 1],
  5. [1, 2, 1, 0, 0],
  6. [5, 2, 3, 1, 1],
  7. [2, 1, 0, 1, 1]])
  8. kernel = torch.tensor([[1, 2, 1],
  9. [0, 1, 0],
  10. [2, 1, 0]])
  11. # 转换成要求的格式 shape(N,C,H,W)
  12. input = torch.reshape(input, (1, 1, 5, 5))
  13. kernel = torch.reshape(kernel, (1, 1, 3, 3))
  14. print(input.shape)
  15. print(kernel.shape)
  16. # stride=1 的情况
  17. output = F.conv2d(input, kernel, stride=1)
  18. print(output)
  19. # stride=2 的情况
  20. output2 = F.conv2d(input, kernel, stride=2)
  21. print(output2)
  22. # 设置了padding
  23. output3 = F.conv2d(input, kernel, stride=1, padding=1)
  24. print(output3)

 运行结果:

3、神经网络-卷积层

Conv2d:文档地址torch.nn.Conv2d

in_channels 输入的通道数

out_channels 输出的通道数

kernel_size 卷积核大小

stride  默认为移动为1

padding是否在边缘进行填充

例子:

  1. import torch
  2. import torchvision
  3. import ssl
  4. from torch import nn
  5. from torch.nn import Conv2d
  6. from torch.utils.data import DataLoader
  7. from torch.utils.tensorboard import SummaryWriter
  8. ssl._create_default_https_context = ssl._create_unverified_context
  9. dataset = torchvision.datasets.CIFAR10(root='./test11_data', train=False,
  10. transform=torchvision.transforms.ToTensor(), download=True)
  11. dataloader = DataLoader(dataset, batch_size=64)
  12. class Tudui(nn.Module):
  13. def __init__(self):
  14. super(Tudui, self).__init__()
  15. self.conv1 = Conv2d(in_channels=3, out_channels=6, kernel_size=3, stride=1, padding=0 )
  16. def forward(self, x):
  17. x = self.conv1(x)
  18. return x
  19. tudui = Tudui()
  20. writer = SummaryWriter('test11_logs')
  21. step = 0
  22. for data in dataloader:
  23. imgs, targets = data
  24. output = tudui(imgs)
  25. writer.add_images("input", imgs, step)
  26. output = torch.reshape(output, (-1, 3, 30, 30), ) # 不知道是多少的时候,直接写-1
  27. writer.add_images("output", output, step)
  28. step = step + 1
  29. writer.close()

结果输出: 

4、神经网络-最大池化的使用

(1)最大池化画图理解:

(2)代码实现:

  1. import torch
  2. from torch import nn
  3. from torch.nn import MaxPool2d
  4. input = torch.tensor([[1, 2, 0, 3, 1],
  5. [0, 1, 2, 3, 1],
  6. [1, 2, 1, 0, 0],
  7. [5, 2, 3, 1, 1],
  8. [2, 1, 0, 1, 1]], dtype=torch.float32)
  9. input = torch.reshape(input, (-1, 1, 5, 5))
  10. print(input.shape)
  11. class Tudui(nn.Module):
  12. def __init__(self):
  13. super(Tudui, self).__init__()
  14. self.maxpool1 = MaxPool2d(kernel_size=3, ceil_mode=True)
  15. def forward(self,input):
  16. output = self.maxpool1(input)
  17. return output
  18. tudui = Tudui()
  19. output = tudui(input)
  20. print(output)

运行结果:

(3)展示池化的图片(代码)

  1. import torch
  2. import ssl
  3. import torchvision
  4. from torch import nn
  5. from torch.nn import MaxPool2d
  6. from torch.utils.data import DataLoader
  7. from torch.utils.tensorboard import SummaryWriter
  8. ssl._create_default_https_context = ssl._create_unverified_context
  9. dataset = torchvision.datasets.CIFAR10("./test12_data", train=False, download=True,
  10. transform=torchvision.transforms.ToTensor())
  11. dataloader = DataLoader(dataset, batch_size=64)
  12. # input = torch.tensor([[1, 2, 0, 3, 1],
  13. # [0, 1, 2, 3, 1],
  14. # [1, 2, 1, 0, 0],
  15. # [5, 2, 3, 1, 1],
  16. # [2, 1, 0, 1, 1]], dtype=torch.float32)
  17. #
  18. #
  19. # input = torch.reshape(input, (-1, 1, 5, 5))
  20. # print(input.shape)
  21. class Tudui(nn.Module):
  22. def __init__(self):
  23. super(Tudui, self).__init__()
  24. self.maxpool1 = MaxPool2d(kernel_size=3, ceil_mode=True)
  25. def forward(self,input):
  26. output = self.maxpool1(input)
  27. return output
  28. writer = SummaryWriter("test12_logs_maxpool")
  29. tudui = Tudui()
  30. step = 0
  31. for data in dataloader:
  32. imgs, targets = data
  33. writer.add_images("input", imgs, step)
  34. output = tudui(imgs)
  35. writer.add_images("output", output, step)
  36. step = step + 1
  37. writer.close()
  38. # tudui = Tudui()
  39. # output = tudui(input)
  40. # print(output)

运行结果:

5、神经网络-非线性激活

非线性激活函数

(1)代码实现(调用sigmoid 函数)

  1. import torch
  2. import ssl
  3. import torchvision
  4. from torch import nn
  5. from torch.nn import ReLU, Sigmoid
  6. from torch.utils.data import DataLoader
  7. from torch.utils.tensorboard import SummaryWriter
  8. ssl._create_default_https_context = ssl._create_unverified_context
  9. input = torch.tensor([[1, -0.5],
  10. [-1, 3]])
  11. input = torch.reshape(input, (-1, 1, 2, 2))
  12. print(input.shape)
  13. dataset = torchvision.datasets.CIFAR10("./test13_data", train=False, download=True,
  14. transform=torchvision.transforms.ToTensor())
  15. dataloader = DataLoader(dataset, batch_size=64)
  16. class Tudui(nn.Module):
  17. def __init__(self):
  18. super(Tudui, self).__init__()
  19. self.relu1 = ReLU()
  20. self.sigmoid1 = Sigmoid()
  21. def forward(self,input):
  22. output_ = self.sigmoid1(input)
  23. return output_
  24. tudui = Tudui()
  25. writer = SummaryWriter("test13_logs_sigmoid")
  26. step = 0
  27. for data in dataloader:
  28. imgs, targets = data
  29. writer.add_images("input", imgs, global_step=step)
  30. output = tudui(imgs)
  31. writer.add_images("output", output, step)
  32. step = step + 1
  33. writer.close()

输出结果:

6、神经网络-线性层

(1)代码

  1. import torch
  2. import ssl
  3. import torchvision
  4. from torch import nn
  5. from torch.nn import Linear
  6. from torch.utils.data import DataLoader
  7. ssl._create_default_https_context = ssl._create_unverified_context
  8. dataset = torchvision.datasets.CIFAR10('./test14_data', train=False, download=True,
  9. transform=torchvision.transforms.ToTensor())
  10. dataloader = DataLoader(dataset, batch_size=64, drop_last=True)
  11. class Tudui(nn.Module):
  12. def __init__(self):
  13. super(Tudui, self).__init__()
  14. self.linear1 = Linear(196608, 10)
  15. def forward(self,input):
  16. output = self.linear1(input)
  17. return output
  18. tudui = Tudui()
  19. for data in dataloader:
  20. imgs, targets = data
  21. print(imgs.shape)
  22. output = torch.reshape(imgs, (1,1,1,-1)) # torch.Size([1, 1, 1, 196608])
  23. # output = torch.flatten(imgs) # 会变成一行 torch.Size([196608])
  24. print(output.shape)
  25. output = tudui(output)
  26. print(output.shape)

结果展示:

7、网络搭建-小实战

(1)完整代码 

  1. import torch
  2. from torch import nn
  3. from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential
  4. from torch.utils.tensorboard import SummaryWriter
  5. class Tudui(nn.Module):
  6. def __init__(self):
  7. super(Tudui, self).__init__()
  8. # self.conv1 = Conv2d(in_channels=3, out_channels=32, kernel_size=5, padding=2) # 卷积
  9. # self.maxpool1 = MaxPool2d(2) # 池化
  10. # self.conv2 = Conv2d(in_channels=32, out_channels=32, kernel_size=5, padding=2)
  11. # self.maxpool2 = MaxPool2d(2)
  12. # self.conv3 = Conv2d(in_channels=32, out_channels=64, kernel_size=5, padding=2)
  13. # self.maxpool3 = MaxPool2d(2)
  14. # self.flatten = Flatten()
  15. # self.linear1 = Linear(in_features=1024, out_features=64)
  16. # self.linear2 = Linear(in_features=64, out_features=10)
  17. self.model1 = Sequential(
  18. Conv2d(in_channels=3, out_channels=32, kernel_size=5, padding=2),
  19. MaxPool2d(2),
  20. Conv2d(in_channels=32, out_channels=32, kernel_size=5, padding=2),
  21. MaxPool2d(2),
  22. Conv2d(in_channels=32, out_channels=64, kernel_size=5, padding=2),
  23. MaxPool2d(2),
  24. Flatten(),
  25. Linear(in_features=1024, out_features=64),
  26. Linear(in_features=64, out_features=10)
  27. )
  28. def forward(self,x):
  29. # x = self.conv1(x)
  30. # x = self.maxpool1(x)
  31. # x = self.conv2(x)
  32. # x = self.maxpool2(x)
  33. # x = self.conv3(x)
  34. # x = self.maxpool3(x)
  35. # x = self.flatten(x)
  36. # x = self.linear1(x)
  37. # x = self.linear2(x)
  38. x = self.model1(x)
  39. return x
  40. tudui = Tudui()
  41. print(tudui) # 输出网络结构
  42. input = torch.ones((64, 3, 32, 32))
  43. output = tudui(input)
  44. print(output.shape)
  45. writer = SummaryWriter('test15_logs')
  46. writer.add_graph(tudui, input)
  47. writer.close()

运行结果:

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/51742
推荐阅读
相关标签
  

闽ICP备14008679号