pytorch之添加BN的实现

添加批标准化(Batch Normalization)是优化深度学习模型的常用手段之一。在 PyTorch 中,添加批标准化可以通过 torch.nn.BatchNorm1d 或 torch.nn.BatchNorm2d 函数实现。接下来,将会为您详细讲解如何添加 BN,包括两个示例说明。

1.添加单层 BN

添加 BN 的步骤如下:

  1. 首先,在网络中添加 BN 层,并将其作为网络层的一部分。
  2. 对于需要 BN 的层,需要将其输出进行 BN。
  3. 在模型的训练过程中,通过设置 BN 层的训练模式和评估模式,为这两个模式设置不同的 BN 行为。

下面是一个示例代码:

import torch.nn as nn

class MLP(nn.Module):
    def __init__(self):
        super(MLP, self).__init__()
        self.layer1 = nn.Linear(784, 512)
        self.bn1 = nn.BatchNorm1d(512)
        self.layer2 = nn.Linear(512, 256)
        self.bn2 = nn.BatchNorm1d(256)
        self.layer3 = nn.Linear(256, 10)

    def forward(self, x):
        x = self.layer1(x)
        x = self.bn1(x)
        x = nn.functional.relu(x)
        x = self.layer2(x)
        x = self.bn2(x)
        x = nn.functional.relu(x)
        x = self.layer3(x)
        return x

在这个例子中,我们为 MLP 模型的第一层和第二层添加了 BN 层,第三层没有添加 BN 层。在 forward 方法中,我们按照顺序运行网络层和 BN 层,其中 BN 层紧随网络层。

2.添加整个模型 BN

添加 BN 的步骤如下:

  1. 创建模型并添加 BN 层。
  2. 设置模型的训练模式和评估模式的 BN 行为。
  3. 使用模型进行训练和评估。

下面是一个示例代码:

import torch
import torch.nn as nn

class MLP(nn.Module):
    def __init__(self):
        super(MLP, self).__init__()
        self.layer1 = nn.Linear(784, 512)
        self.layer2 = nn.Linear(512, 256)
        self.layer3 = nn.Linear(256, 10)

    def forward(self, x):
        x = self.layer1(x)
        x = nn.functional.relu(x)
        x = self.layer2(x)
        x = nn.functional.relu(x)
        x = self.layer3(x)
        return x

model = MLP()
model = nn.Sequential(
    nn.BatchNorm1d(784),
    model,
)

# 训练模式的 BN 行为
model.train()

# 评估模式的 BN 行为
model.eval()

# 使用模型进行训练和评估

在这个例子中,我们创建了一个 MLP 模型并添加了一个 BN 层。我们使用 nn.Sequential 将 BN 层和 MLP 模型串联在一起。最后,我们分别在训练模式和评估模式下设置了 BN 行为。在训练期间,BN 层将计算使其统计量的移动均值和方差。在评估期间,BN 层将使用训练过程中计算的统计量来标准化测试数据。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:pytorch之添加BN的实现 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • 奉献pytorch 搭建 CNN 卷积神经网络训练图像识别的模型,配合numpy 和matplotlib 一起使用调用 cuda GPU进行加速训练

    1、Torch构建简单的模型 # coding:utf-8 import torch class Net(torch.nn.Module): def __init__(self,img_rgb=3,img_size=32,img_class=13): super(Net, self).__init__() self.conv1 = torch.nn.Sequ…

    卷积神经网络 2023年4月6日
    00
  • 1×1卷积核作用

    1. 实现跨通道的交互和信息整合 对于某个卷积层,无论输入图像有多少个通道,输出图像通道数总是等于卷积核数量! 对多通道图像做1×1卷积,其实就是将输入图像于每个通道乘以卷积系数后加在一起,即相当于把原图像中本来各个独立的通道“联通”在了一起。 2. 进行卷积核通道数的降维和升维 进行降维和升维引起人们重视的(可能)是在GoogleNet里。对于每一个inc…

    2023年4月8日
    00
  • 机器学习:利用卷积神经网络实现图像风格迁移 (三)

    前面介绍了利用卷积神经网络实现图像风格迁移的算法原理和基于TensroFlow 的代码实现,这篇博客对前面的代码做了一些改变,设置了一个 image resize 函数,这样可以处理任意size的 input image,而且我们尝试利用 L-BFGS 优化算法替代之前的 Adam 优化算法,对卷积层以及pooling层函数做了修改。 import nump…

    2023年4月8日
    00
  • TensorFLow 数学运算的示例代码

    下面是详细讲解“TensorFlow 数学运算的示例代码”的完整攻略,包含两条示例说明。 示例一 1. 代码 import tensorflow as tf a = tf.constant(6.5) b = tf.constant(3.4) c = tf.add(a, b) d = tf.subtract(a, b) with tf.Session() as…

    卷积神经网络 2023年5月15日
    00
  • 【DL-2-1】卷积神经网络(CNN)–总体概述

    1、目录 2、简述 3、CNN的结构组成 4、卷积神经网络 VS. 传统神经网络 5、总结 常见问答 二、简述 1980年,一位名为Fukushima的研究员提出了一种分层神经网络模型。他称之为新认知。该模型的灵感来自简单和复杂细胞的概念。neocognitron能够通过了解物体的形状来识别模式。 后来,1998年,卷心神经网络被Bengio,Le Cun,…

    2023年4月5日
    00
  • 使用pytorch进行卷积和反卷积运算

    (1)卷积运算(二维卷积)        以下是pytorch官网上的API 第一种情况 如上图所示,输入图片为4*4,卷积核为3*3,步长为1,零填充。 代码表示:   第二种情况 如上图所示,输入图片为5*5,卷积核为4*4,步长为1,填充为2。 代码表示: 第三种情况 如上图所示,输入图片为5*5,卷积核为3*3,步长为1,填充为2。 代码表示:   …

    2023年4月8日
    00
  • 卷积层池化和激活函数的顺序

    卷积层池化和激活函数的顺序 简单来讲,先池化后激活和先激活后池化得到的效果是一样的,先池化进行了下采样,那么在激活函数的时候就减少了消耗Activation function after pooling layer or convolutional layer?

    卷积神经网络 2023年4月8日
    00
  • Pytorch-学习记录 卷积操作 cnn output_channel, etc.

      参考资料: pytorch中文文档 http://pytorch-cn.readthedocs.io/zh/latest/

    卷积神经网络 2023年4月7日
    00
合作推广
合作推广
分享本页
返回顶部