Python_pytorch (三)分解网络模型

python_pytorch

小土堆pytotch学习视频链接

from的是一个个的包(package)
import 的是一个个的py文件(file.py)
所使用的一般是文件中的类(.class)
第一步实例化所使用的类,然后调用类中的方法(def)

nn.Module

]

在这里插入图片描述

import torch.nn as nn
import torch.nn.functional as F
import torch
class Module(nn.Module):
  def __init__(self):
    super().__init__()
  def forward(self,input):
    output=input+1
    return output
Mod=Module()
x=torch.tensor(1.0)
output=Mod(x)
print(output)

卷积层示例

import torch
import torch.nn as nn
import torchvision
from torch.utils.data import DataLoader

dataset=torchvision.datasets.CIFAR10("./dataset",train=False,transform=torchvision.transforms.ToTensor(),download=True)
data_loader=DataLoader(dataset,batch_size=64,shuffle=True)

class mod(nn.Module):
  def __init__(self):
    super(mod,self).__init__()
    # 输入通道,输出通道,卷积核大小(卷积中的数值初始不重要,在后续的反向传播时候会一直根据梯度来更新这里的参数)
    self.conv2d1=nn.Conv2d(3,6,3,stride=1)
  def forward(self,x):
    x=self.conv2d1(x)
    return x
mod=mod()
for data in data_loader:
  img, target=data
  output=mod(img)
  print(img.shape,output.shape)

池化层示例

正是因为有了池化,才使得我们神经网络的训练成为了可能。有了池化,可以大大减小我们网络的运算量,进而可以在短时间训练出我们想要的神经网络模型。

import torch
from torch import nn


input=torch.tensor(
    [
     [1,2,3,4,5],
     [2,3,4,5,6],
     [3,33,3,3,3],
     [3,3,3,3,3],
     [2,2,2,2,2]
    ],dtype=torch.float32
)
input=torch.reshape(input,(1,1,5,5))
print(input.shape)
class Mydata(nn.Module):
  def __init__(self):
    super(Mydata,self).__init__()
    self.maxpool=nn.MaxPool2d(kernel_size=3,ceil_mode=True)
  def forward(self,input):
    output=self.maxpool(input)
    return output

mydata=Mydata()
output=mydata(input)
print(output)

非线性激活

非线性激活对于神经网络来说非常重要。这是因为这些非线性激活,我们的神经网络才可以去拟合任意的模型用于预测。

import torch
from torch import nn


input=torch.tensor(
    [
     [1,-1],
     [2,-4]
    ],dtype=torch.float32
)
input=torch.reshape(input,(1,1,2,2))
print(input.shape)
class Mydata(nn.Module):
  def __init__(self):
    super(Mydata,self).__init__()
    #self.maxpool=nn.MaxPool2d(kernel_size=3,ceil_mode=True)
    self.relu=nn.ReLU() #relu激活函数
    self.sigmoid=nn.Sigmoid() #sigmoid激活函数
  def forward(self,input):
    #output=self.maxpool(input)
    output=self.relu(input)
    output2=self.sigmoid(input)
    return output,output2

mydata=Mydata()
output1,output2=mydata(input)
print(output1,output2)

线性层

import torch
from torch import nn
import torchvision
from torch.utils.data import DataLoader
dataset=torchvision.datasets.CIFAR10("./content",train=False,transform=torchvision.transforms.ToTensor(),download=True)
dataloader=DataLoader(dataset,batch_size=64,drop_last=True)

class Mymodel(nn.Module):
  def __init__(self):
    super(Mymodel,self).__init__()
    self.linear=nn.Linear(196608,10)
  def forward(self,input):
    output=self.linear(input)
    return output

mymodel=Mymodel()
for data in dataloader:
  img,target=data
  print(img.shape)
  output=torch.flatten(img)
  print(output.shape)
  output=mymodel(output)
  print(output.shape)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值