pytorch 网络参数 weight bias 初始化详解

以下是PyTorch网络参数weight bias初始化的详细攻略,包括两个示例说明。

1. 网络参数初始化

在PyTorch中,网络参数的初始化是非常重要的,因为它可以影响模型的收敛速度和最终的性能。PyTorch提供了多种初始化方法,包括常见的均匀分布、正态分布、Xavier初始化和Kaiming初始化等。

1.1 均匀分布初始化

均匀分布初始化是一种简单的初始化方法,它将权重初始化为在[-a, a]之间的均匀分布,其中a是一个常数。在PyTorch中,可以使用torch.nn.init.uniform_()函数来进行均匀分布初始化。

import torch.nn as nn
import torch.nn.init as init

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(3, 64, kernel_size=3, stride=1, padding=1)
        self.conv2 = nn.Conv2d(64, 128, kernel_size=3, stride=1, padding=1)
        self.fc1 = nn.Linear(128 * 8 * 8, 1024)
        self.fc2 = nn.Linear(1024, 10)

        # 均匀分布初始化
        init.uniform_(self.conv1.weight, a=-0.1, b=0.1)
        init.uniform_(self.conv2.weight, a=-0.1, b=0.1)
        init.uniform_(self.fc1.weight, a=-0.1, b=0.1)
        init.uniform_(self.fc2.weight, a=-0.1, b=0.1)

1.2 正态分布初始化

正态分布初始化是一种常用的初始化方法,它将权重初始化为均值为0、标准差为std的正态分布。在PyTorch中,可以使用torch.nn.init.normal_()函数来进行正态分布初始化。

import torch.nn as nn
import torch.nn.init as init

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(3, 64, kernel_size=3, stride=1, padding=1)
        self.conv2 = nn.Conv2d(64, 128, kernel_size=3, stride=1, padding=1)
        self.fc1 = nn.Linear(128 * 8 * 8, 1024)
        self.fc2 = nn.Linear(1024, 10)

        # 正态分布初始化
        init.normal_(self.conv1.weight, mean=0, std=0.01)
        init.normal_(self.conv2.weight, mean=0, std=0.01)
        init.normal_(self.fc1.weight, mean=0, std=0.01)
        init.normal_(self.fc2.weight, mean=0, std=0.01)

1.3 Xavier初始化

Xavier初始化是一种常用的初始化方法,它根据输入和输出的维度自适应地调整权重的初始化范围。在PyTorch中,可以使用torch.nn.init.xavier_uniform_()函数或torch.nn.init.xavier_normal_()函数来进行Xavier初始化。

import torch.nn as nn
import torch.nn.init as init

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(3, 64, kernel_size=3, stride=1, padding=1)
        self.conv2 = nn.Conv2d(64, 128, kernel_size=3, stride=1, padding=1)
        self.fc1 = nn.Linear(128 * 8 * 8, 1024)
        self.fc2 = nn.Linear(1024, 10)

        # Xavier初始化
        init.xavier_uniform_(self.conv1.weight)
        init.xavier_uniform_(self.conv2.weight)
        init.xavier_uniform_(self.fc1.weight)
        init.xavier_uniform_(self.fc2.weight)

1.4 Kaiming初始化

Kaiming初始化是一种针对ReLU激活函数的初始化方法,它根据输入和输出的维度自适应地调整权重的初始化范围。在PyTorch中,可以使用torch.nn.init.kaiming_uniform_()函数或torch.nn.init.kaiming_normal_()函数来进行Kaiming初始化。

import torch.nn as nn
import torch.nn.init as init

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(3, 64, kernel_size=3, stride=1, padding=1)
        self.conv2 = nn.Conv2d(64, 128, kernel_size=3, stride=1, padding=1)
        self.fc1 = nn.Linear(128 * 8 * 8, 1024)
        self.fc2 = nn.Linear(1024, 10)

        # Kaiming初始化
        init.kaiming_uniform_(self.conv1.weight, mode='fan_in', nonlinearity='relu')
        init.kaiming_uniform_(self.conv2.weight, mode='fan_in', nonlinearity='relu')
        init.kaiming_uniform_(self.fc1.weight, mode='fan_in', nonlinearity='relu')
        init.kaiming_uniform_(self.fc2.weight, mode='fan_in', nonlinearity='relu')

2. bias初始化

在PyTorch中,bias的初始化通常使用常数初始化,可以使用torch.nn.init.constant_()函数来进行常数初始化。

import torch.nn as nn
import torch.nn.init as init

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(3, 64, kernel_size=3, stride=1, padding=1)
        self.conv2 = nn.Conv2d(64, 128, kernel_size=3, stride=1, padding=1)
        self.fc1 = nn.Linear(128 * 8 * 8, 1024)
        self.fc2 = nn.Linear(1024, 10)

        # bias初始化
        init.constant_(self.conv1.bias, 0)
        init.constant_(self.conv2.bias, 0)
        init.constant_(self.fc1.bias, 0)
        init.constant_(self.fc2.bias, 0)

以上就是PyTorch网络参数weight bias初始化的详细攻略,包括两个示例说明。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:pytorch 网络参数 weight bias 初始化详解 - Python技术站

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

相关文章

  • pytorch函数之nn.Linear

    class torch.nn.Linear(in_features,out_features,bias = True )[来源] 对传入数据应用线性变换:y = A x+ b   参数: in_features – 每个输入样本的大小 out_features – 每个输出样本的大小 bias – 如果设置为False,则图层不会学习附加偏差。默认值:Tru…

    PyTorch 2023年4月7日
    00
  • pytorch提取神经网络模型层结构和参数初始化

    torch.nn.Module()类有一些重要属性,我们可用其下面几个属性来实现对神经网络层结构的提取: torch.nn.Module.children() torch.nn.Module.modules() torch.nn.Module.named_children() torch.nn.Module.named_moduless() 为方面说明,我们…

    2023年4月8日
    00
  • conda pytorch 配置

    主要步骤: 0.安装anaconda3(基本没问题) 1.配置清华的源(基本没问题) 2.查看python版本,运行 python3 -V; 查看CUDA版本,运行 nvcc -V 3.如果想用最新版本的python,可以创建新的python版本:   conda create –name python38 python=3.8   conda activ…

    2023年4月8日
    00
  • PyTorch中的torch.cat简单介绍

    在PyTorch中,torch.cat是一个非常有用的函数,它可以将多个张量沿着指定的维度拼接在一起。本文将介绍torch.cat的用法和示例。 用法 torch.cat的用法如下: torch.cat(tensors, dim=0, out=None) -> Tensor 其中,tensors是要拼接的张量序列,dim是要沿着的维度,out是输出张量…

    PyTorch 2023年5月15日
    00
  • 基于Pytorch实现逻辑回归

    基于PyTorch实现逻辑回归 逻辑回归是一种常用的分类算法,它可以用于二分类和多分类问题。在本文中,我们将介绍如何使用PyTorch实现逻辑回归,并提供两个示例说明。 示例1:使用鸢尾花数据集实现二分类逻辑回归 以下是一个使用鸢尾花数据集实现二分类逻辑回归的示例代码: import torch import torch.nn as nn import to…

    PyTorch 2023年5月16日
    00
  • 在PyTorch中Tensor的查找和筛选例子

    以下是“在PyTorch中Tensor的查找和筛选例子”的完整攻略,包含两个示例说明。 示例1:查找Tensor中的最大值和最小值 步骤1:创建一个Tensor 我们首先创建一个包含随机数的Tensor: import torch x = torch.randn(3, 4) print(x) 输出: tensor([[-0.1665, -0.1285, -0…

    PyTorch 2023年5月15日
    00
  • pytorch保存模型和导入模型以及预训练模型

    参考 model.state_dict()中保存了{参数名:参数值}的字典 import torchvision.models as models resnet34 = models.resnet34(pretrained=True) resnet34.state_dict().keys() for param in resnet34.parameters(…

    PyTorch 2023年4月8日
    00
  • tensorflow中Dense函数的具体使用

    在TensorFlow中,Dense函数是用于创建全连接层的函数。本文提供一个完整的攻略,以帮助您了解如何在TensorFlow中使用Dense函数。 步骤1:导入必要的模块 在使用Dense函数之前,您需要导入必要的模块。您可以按照以下步骤导入必要的模块: import tensorflow as tf from tensorflow.keras.laye…

    PyTorch 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部