Pytorch张量根据正态分布进行随机初始化

一、需求

        对于张量x,我们希望能够对其进行随机初始化,且x\sim \mathcal{N}(\mu ,\sigma ^{2})

二、实现

import torch

# 1. 张量根据标准正态分布(mean=0, std=1)进行随机初始化
a = torch.randn(size=(3, 5))
b = torch.randn(size=(2, 4, 4))
# 随机初始化的张量的mean接近于0且std接近于1(由于数据量太少,所以误差会比较大)
print(a, a.mean().item(), a.std().item())
print(b, b.mean().item(), b.std().item())

# 2. 张量根据一般正态分布(mean=mu, std=sigma)进行随机初始化
mu = 2
sigma = 6
c = mu + sigma * torch.randn(size=(3, 5))
d = mu + sigma * torch.randn(size=(2, 4, 4))
# 随机初始化的张量的mean接近于2且std接近于6(由于数据量太少,所以误差会比较大)
print(c, c.mean().item(), c.std().item())
print(d, d.mean().item(), d.std().item())

三、效果(程序执行一次输出结果)

tensor([[-0.1577, -1.1384,  0.3573, -0.3869,  2.2071],
        [-0.2356,  1.7997,  1.6409, -1.3254, -0.7604],
        [ 1.6190, -0.5193,  0.1736, -0.2998, -0.5120]]) 0.1641494482755661 1.1231410503387451
tensor([[[ 0.0238,  0.0624,  1.2002, -0.0963],
         [-0.4617, -0.4194,  0.1404, -0.0497],
         [-0.8695, -1.7731,  1.2776,  1.2151],
         [ 0.6929, -0.7230, -2.0728, -0.6245]],

        [[-0.6560, -0.0338,  1.0010,  0.7865],
         [ 0.2711,  0.9265,  0.3155, -1.9558],
         [-1.9122,  0.6705, -0.7552,  1.1139],
         [-0.2056, -0.8133,  1.4233,  1.5125]]]) -0.024651043117046356 1.0221213102340698
tensor([[  0.4474,   2.9793,   7.1230, -11.5415,  -0.0688],
        [ 13.4291,   4.3203,  -4.9895,   9.2665,   1.7634],
        [  8.6169,   5.1654,  -5.6114,   1.5580,  -2.8541]]) 1.9735734462738037 6.494339942932129
tensor([[[ 6.1913, 12.8018,  7.7551, -0.4036],
         [-9.9380,  1.2322,  7.5808,  4.9575],
         [-3.1395, -8.1253,  5.8119, 14.8277],
         [ 2.8647,  7.0317,  0.9330,  0.8613]],

        [[ 1.7921, -4.0716, -7.3107, -6.9644],
         [ 7.0471, 20.2164,  0.4942,  6.4316],
         [ 2.8614,  5.3229,  6.7565, 10.2164],
         [ 3.1384,  5.6582,  1.5364,  1.6309]]]) 3.312441110610962 6.568889617919922

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
PyTorch中,He正态分布初始化是一种用于初始化神经网络权重的方法。它是由何凯明在2015年提出的,针对ReLU激活函数的特性进行了改进。相比于Xavier初始化在ReLU中的表现较差,He初始化能够更好地适应ReLU的非线性特性。\[2\] 在PyTorch中,可以使用torch.nn.init.kaiming_normal_函数来进行He正态分布初始化。该函数的参数包括要初始化张量和非线性激活函数的类型。具体而言,对于ReLU激活函数,可以使用nonlinearity='relu'来指定。例如,可以使用以下代码进行He正态分布初始化: ```python import torch import torch.nn as nn # 定义一个卷积层 conv = nn.Conv2d(in_channels, out_channels, kernel_size) # 使用He正态分布初始化 nn.init.kaiming_normal_(conv.weight, nonlinearity='relu') ``` 这样,卷积层的权重将会按照He正态分布进行初始化,以更好地适应ReLU激活函数的特性。\[2\] #### 引用[.reference_title] - *1* *3* [PyTorch中的Xavier以及He权重初始化方法解释](https://blog.csdn.net/weixin_39653948/article/details/107950764)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Pytorch神经网络初始化kaiming分布](https://blog.csdn.net/weixin_36670529/article/details/104031247)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞机火车巴雷特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值