【从零学Python】什么时候调用forward()函数、图片预处理、return中的if...else...

本文介绍了神经网络模型的基本结构,以PyTorch为例,阐述了如何定义一个简单的多层感知器(MLP),并解释了forward()函数在模型执行中的作用。同时,讨论了图像预处理的重要步骤,包括随机尺寸调整、水平翻转、随机裁剪、归一化等操作,并展示了如何使用torchvision.transforms进行这些操作。最后,提到了预处理函数的选择取决于训练还是验证阶段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.什么时候调用forward()函数
因为Module类是nn模块里提供的一个模型构造类,是所有神经网络模块的基类,我们可以继承它来定义我们想要的模型。

import torch
from torch import nn
 
class MLP(nn.Module):
    # 声明带有模型参数的层,这里声明了两个全连接层
    def __init__(self, **kwargs):
        # 调用MLP父类Module的构造函数来进行必要的初始化。这样在构造实例时还可以指定其他函数
        super(MLP, self).__init__(**kwargs)
        self.hidden = nn.Linear(784, 256) # 隐藏层
        self.act = nn.ReLU()
        self.output = nn.Linear(256, 10)  # 输出层
 
    # 定义模型的前向计算,即如何根据输入x计算返回所需要的模型输出
    def forward(self, x):
        a = self.act(self.hidden(x))
        return self.output(a)
 
X = torch.rand(2, 784)
net = MLP()
print(net)
net(X)
    为什么会调用forward()呢,是因为Module中定义了__call__()函数,该函数调用了forward()函数,当执行net(x)的时候,会自动调用__call__()函数。也就是说只要进入了Module就会自动执行forward()函数。

2.图片预处理

import transforms as T
trans = [T.RandomResize(min_size, max_size)]# 将图片随机缩放
        if hflip_prob > 0:  #hflip_prob 随机水平翻转的概率
            trans.append(T.RandomHorizontalFlip(hflip_prob))# 随机翻转,添加新的对象到列表末尾
        trans.extend([#在已存在的列表中添加新的列表内容
            T.RandomCrop(crop_size),# 随机裁剪
            T.ToTensor(),
            T.Normalize(mean=mean, std=std),#标准化处理:减均值,除以标准差
        ])

        self.transforms = T.Compose(trans)#将多种变换组合在一起,即将多种预处理方法打包到transforms中
  1. 在return中的if…else…语句
def get_transform(train):#train为true的话
    base_size = 520
    crop_size = 480
    # 如果train为True的话,返回SegmentationPresetTrain(base_size, crop_size),否则返回SegmentationPresetEval(base_size)
    return SegmentationPresetTrain(base_size, crop_size) if train else SegmentationPresetEval(base_size)#后者是验证集的图片大小

4.torchvision.transforms.functional 中与图像预处理相关的函数

from torchvision.transforms import functional as F
image = F.resize(image, size)  # 将图像的最小边长缩放到size大小
img = F.pad(img, (0, 0, padw, padh), fill=fill)#(0, 0, padw, padh)分别表示左、上、右、下的填充宽度;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值