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中的损失函数

      深度学习的优化方法直接作用的对象是损失函数。在最优化、统计学、机器学习和深度学习等领域中经常能用到损失函数。损失函数就是用来表示预测与实际数据之间的差距程度。一个最优化问题的目标是将损失函数最小化,针对分类问题,直观的表现就是分类正确的样本越多越好。在回归问题中,直观的表现就是预测值与实际值误差越小越好。   PyTorch中的nn模块提供了多种可直接使…

    PyTorch 2023年4月8日
    00
  • pytorch索引与切片

    @ 目录 index索引 基本索引 连续选取 规则间隔索引 索引总结 不规则间隔索引 任意多的维度索引 使用掩码来索引 打平后的索引 index索引 torch会自动从左向右索引 例子: a = torch.randn(4,3,28,28) 表示类似一个CNN 的图片的输入数据,4表示这个batch一共有4张照片,而3表示图片的通道数为3(RGB),(28,…

    PyTorch 2023年4月6日
    00
  • YoloV5_RuntimeError: CUDA out of memory. Tried to allocate 100.00 MiB (GPU 0; 2.00 GiB total capacity; 1.15 GiB already allocated; 0 bytes free; 1.19 GiB reserved in total by PyTorch)

    报错信息: RuntimeError: CUDA out of memory. Tried to allocate 100.00 MiB (GPU 0; 2.00 GiB total capacity; 1.15 GiB already allocated; 0 bytes free; 1.19 GiB reserved in total by PyTorc…

    2023年4月8日
    00
  • pytorch, KL散度,reduction=’batchmean’

    在pytorch中计算KLDiv loss时,注意reduction=’batchmean’,不然loss不仅会在batch维度上取平均,还会在概率分布的维度上取平均。 参考:KL散度-相对熵  

    PyTorch 2023年4月7日
    00
  • Pytorch中的torch.gather函数

    gather函数的的官方文档: torch.gather(input, dim, index, out=None) → Tensor Gathers values along an axis specified by dim. For a 3-D tensor the output is specified by: out[i][j][k] = input[…

    PyTorch 2023年4月6日
    00
  • pytorch: cudnn.benchmark=True

    import torch.backends.cudnn as cudnn cudnn.benchmark = True 设置这个 flag 可以让内置的 cuDNN 的 auto-tuner 自动寻找最适合当前配置的高效算法,来达到优化运行效率的问题。如果网络的输入数据维度或类型上变化不大,也就是每次训练的图像尺寸都是一样的时候,设置 torch.backe…

    PyTorch 2023年4月8日
    00
  • 带你一文读懂Python垃圾回收机制

    Python是一种高级编程语言,它具有自动内存管理的特性。Python的垃圾回收机制是自动内存管理的核心。本文提供一个完整的攻略,介绍Python的垃圾回收机制。我们将提供两个示例,分别是使用垃圾回收机制释放内存和使用垃圾回收机制避免内存泄漏。 Python的垃圾回收机制 Python的垃圾回收机制是自动内存管理的核心。它负责检测和清除不再使用的内存,以便将…

    PyTorch 2023年5月15日
    00
  • win10/windows 安装Pytorch

    https://pytorch.org/get-started/locally/ 去官网,选择你需要的版本。   把 pip install torch==1.5.0+cu101 torchvision==0.6.0+cu101 -f https://download.pytorch.org/whl/torch_stable.html 命令行执行。    C…

    2023年4月8日
    00
合作推广
合作推广
分享本页
返回顶部