当前位置: 首页 > wzjs >正文

太月星网站建设程序开发在线种子资源网

太月星网站建设程序开发,在线种子资源网,小说阅读网站开发,为什么我的电脑有些网站打不开apply_parametrization_norm 和spectral_norm是 PyTorch 中用于对模型参数进行规范化的方法,但它们在实现和使用上有显著的区别。以下是它们的主要区别和对比: 实现方式 weight_norm: weight_norm 是一种参数重参数化技术,将权…

apply_parametrization_normspectral_norm是 PyTorch 中用于对模型参数进行规范化的方法,但它们在实现和使用上有显著的区别。以下是它们的主要区别和对比:

实现方式

weight_norm:

weight_norm 是一种参数重参数化技术,将权重分解为两个部分:方向(v) 和 大小(g)。
具体来说,权重 w 被重参数化为:
w=g⋅
∥v∥
v

其中,g 是标量,表示权重的大小;v 是向量,表示权重的方向。
这种方法通过分离权重的大小和方向,使得优化过程更加稳定。

归一化后的权重向量实际上是 v 的归一化形式,即 v_normalized = v / ||v||,而 weight 的值为 g * v_normalized

spectral_norm:

spectral_norm 是一种基于谱范数的规范化方法,谱范数定义为矩阵 M 的最大奇异值:

在这里插入图片描述

具体来说,谱范数是矩阵 M 作用在单位向量上时的最大放大因子。

作用:通过限制矩阵的最大奇异值,控制矩阵的放大能力,从而提高模型的稳定性和泛化能力

通过幂迭代法(Power Iteration)计算矩阵的最大奇异值。具体步骤如下:
初始化两个向量 u 和 v。
迭代计算:
在这里插入图片描述

最大奇异值 在这里插入图片描述

然后将权重规范化为
在这里插入图片描述

使用场景

weight_norm:

主要用于规范化权重,特别适用于需要控制权重大小的场景。
例如,在某些生成模型或自注意力机制中,权重的大小对模型的稳定性和性能有重要影响。
weight_norm 提供了一种简单且直接的方式来实现权重的规范化。

spectral_norm:

常用于生成对抗网络(GAN)中,通过限制生成器和判别器的最大奇异值,提高模型的稳定性和泛化能力。
优点:能够有效控制矩阵的放大能力,适用于需要限制模型输出范围的场景

代码样例

weight_norm:

import random
import torch
import torch.nn as nn
import torch.optim as optim
import torch.nn.utils.weight_norm as weight_norm# 创建一个简单的线性层
linear_layer = nn.Linear(2, 3)# Override the weights of linear_layer
linear_layer.weight.data = torch.tensor([[0, -2e-2], [0.3, 1.0], [1e-2, 0]], dtype=torch.float32)  # 3x2
linear_layer.bias.data = torch.tensor([-0.3, 0, -2e-2], dtype=torch.float32)  # 3x1# Apply weight normalization
linear_layer = weight_norm(linear_layer, name='weight')optimizer = optim.Adam(linear_layer.parameters(), lr=2e-3)# 打印原始权重
print("################原始权重:################")
print("linear_layer.weight_v: ", linear_layer.weight_v)
print("linear_layer.weight_g: ", linear_layer.weight_g)
print("linear_layer.weight: ", linear_layer.weight)
print("linear_layer.bias: ", linear_layer.bias)# 前向传播
for i in range(1000):input_tensor = torch.randn(10, 2) * random.random() * 10output = linear_layer(input_tensor)loss = (1 - output.mean())optimizer.zero_grad()loss.backward()  # 反向传播,触发梯度计算optimizer.step()# 打印规范化后的权重
print("################规范化后的权重:#################")
print("linear_layer.weight_v: ", linear_layer.weight_v)
print("linear_layer.weight_g: ", linear_layer.weight_g)
print("linear_layer.bias: ", linear_layer.bias)# Optionally, print the effective weight
print("linear_layer.weight (effective): ", linear_layer.weight)# ... existing code...# 前向传播
#input_tensor = torch.tensor([[1.0, 2.0]], dtype=torch.float32)  # 1x2
for i in range(1000):input_tensor = torch.randn(10, 2)*random.random()*10output = linear_layer(input_tensor)optimizer.zero_grad()(1-output.mean()).backward()  # 反向传播,触发梯度计算optimizer.step()  # 更新权重output = linear_layer(input_tensor)optimizer.zero_grad()(1-output.mean()).backward()  # 反向传播,触发梯度计算optimizer.step()  # 更新权重# 打印规范化后的权重
print("################规范化后的权重:#################")
print("linear_layer.weight: ", linear_layer.weight)  # 权重的大小
print("linear_layer.bias: ", linear_layer.bias) 
print("linear_layer.weight_v: ", linear_layer.weight_v)  
print("linear_layer.weight_g: ", linear_layer.weight_g) 

输出结果

################原始权重:################
linear_layer.weight_v:  Parameter containing:
tensor([[ 0.0000, -0.0200],[ 0.3000,  1.0000],[ 0.0100,  0.0000]], requires_grad=True)
linear_layer.weight_g:  Parameter containing:
tensor([[0.0200],[1.0440],[0.0100]], requires_grad=True)
linear_layer.weight:  tensor([[ 0.0000, -0.0200],[ 0.3000,  1.0000],[ 0.0100,  0.0000]], grad_fn=<WeightNormInterfaceBackward0>)
linear_layer.bias:  Parameter containing:
tensor([-0.3000,  0.0000, -0.0200], requires_grad=True)
################规范化后的权重:#################
linear_layer.weight_v:  Parameter containing:
tensor([[0.0599, 0.0568],[0.4113, 0.8878],[0.0544, 0.0556]], requires_grad=True)
linear_layer.weight_g:  Parameter containing:
tensor([[0.1038],[1.1324],[0.0897]], requires_grad=True)
linear_layer.bias:  Parameter containing:
tensor([1.7000, 2.0000, 1.9800], requires_grad=True)
linear_layer.weight (effective):  tensor([[0.0751, 0.0716],[0.4758, 1.0276],[0.0625, 0.0643]], grad_fn=<WeightNormInterfaceBackward0>)

spectral_norm:

import torch
import torch.nn as nn
import torch.optim as optim
import torch.nn.utils.weight_norm as spectral_norm# 创建一个简单的线性层
linear_layer = nn.Linear(2, 3)
# 覆盖线性层的权重
linear_layer.weight.data = torch.tensor([[0, -2e2], [0.3, 1.0], [1e2, 0]], dtype=torch.float32)  # 3x2
linear_layer.bias.data = torch.tensor([-0.3, 0, -2e2], dtype=torch.float32)  # 3x1# 应用 weight_norm
linear_layer = spectral_norm(linear_layer, name='weight')# 定义优化器
optimizer = optim.Adam(linear_layer.parameters(), lr=1e-4)# 打印原始权重
print("\n################ 原始权重:################\n")
print("linear_layer.weight: ", linear_layer.weight)
print("linear_layer.bias: ", linear_layer.bias)# 前向传播及训练
for i in range(1000):input_tensor = torch.randn(10, 2)output = linear_layer(input_tensor)loss = (1 - output.mean())  # 损失函数optimizer.zero_grad()loss.backward()  # 反向传播optimizer.step()  # 更新权重# 打印规范化后的权重
print("\n################ 规范化后的权重:################\n")
print("linear_layer.weight: ", linear_layer.weight)  # 权重的大小
print("linear_layer.bias: ", linear_layer.bias)
print("linear_layer.weight_v: ", linear_layer.weight_v)  
print("linear_layer.weight_g: ", linear_layer.weight_g)

输出结果

################ 原始权重:################linear_layer.weight:  tensor([[   0.0000, -200.0000],[   0.3000,    1.0000],[ 100.0000,    0.0000]], grad_fn=<WeightNormInterfaceBackward0>)
linear_layer.bias:  Parameter containing:
tensor([  -0.3000,    0.0000, -200.0000], requires_grad=True)################ 规范化后的权重:################linear_layer.weight:  tensor([[-1.7618e-04, -2.0000e+02],[ 2.9977e-01,  9.9956e-01],[ 1.0000e+02, -3.6516e-04]], grad_fn=<WeightNormInterfaceBackward0>)
linear_layer.bias:  Parameter containing:
tensor([-2.0001e-01,  1.0000e-01, -1.9989e+02], requires_grad=True)
linear_layer.weight_v:  Parameter containing:
tensor([[-2.0177e-04, -2.0001e+02],[ 2.9990e-01,  1.0001e+00],[ 1.0001e+02, -3.7132e-04]], requires_grad=True)
linear_layer.weight_g:  Parameter containing:
tensor([[200.0006],[  1.0435],[ 99.9998]], requires_grad=True)
http://www.dtcms.com/wzjs/12990.html

相关文章:

  • 公司营销型网站建设国内做seo最好的公司
  • 营销型企业网站推广的方法有哪些苏州手机关键词优化
  • 本地做的网站如何映射出去网站关键词优化推广哪家快
  • 网站设计连接数据库怎么做搜索引擎优化缩写
  • 做网站设计师要提供什么国外外链平台
  • 手游传奇网站2021年年度关键词
  • 网站后期增加内容优化新十条
  • 保定建网站百度度小店申请入口
  • wordpress插件授权破解版百度sem优化师
  • 中英文版网站建设好口碑关键词优化地址
  • 牙科医院网站建设南宁网站建设公司排行
  • b2c平台网站地推一手项目平台
  • 独立ip做多个网站重庆seo按天收费
  • 网站建设开发语言百度账户托管公司
  • 门户网站如何做谷歌seo百度客户端电脑版下载
  • 卢氏县住房和城乡规划建设局网站网站外链有多重要
  • 村级门户网站建设百度工具
  • 有哪些网站是做视频的网络营销课程实训总结
  • 网站建设哪家比较专业武汉seo优化顾问
  • 国内电商网站跳出率是多少一键生成个人网站
  • 武汉网站制作 app开发上海网络排名优化
  • 温州网站建设钢筋工友情链接论坛
  • 做淘宝客网站再靠地推市场营销互联网营销
  • 佰联轴承网做的网站哪个平台可以接推广任务
  • 手机网站的文本排版是怎么做的百度seo技术优化
  • wordpress 标题 回车滕州seo
  • 建筑工程找工作平台杭州龙席网络seo
  • 17zwd一起做业网站制作公司官网多少钱
  • 昆明网站建设哪家最好今日国内新闻重大事件
  • 免费网站开发框架百度seo排名优化排行