Keras pyTorch中嵌入正则化子的等价性
Keras pyTorch中嵌入正则化子的等价性,keras,pytorch,Keras,Pytorch,tf.keras.layers.Embedding具有参数embeddings\u正则化器。pyTorch或nn.嵌入?pyTorch没有直接的等价物,因为pyTorch只支持通过优化器对参数进行L2正则化 例如,具有重量衰减参数。如果设置并优化nn。嵌入将通过具有指定强度的L2对其进行正则化(对于权重衰减,您只能通过nn.Embedding,请参阅优化器的部分) 如果您希望使用L1正则化,您必须: 自己编写代码 使用可用的第三方解决方案 自己编码 通常我们在丢失和反向传播中添加L1正则化,
tf.keras.layers.Embedding
具有参数embeddings\u正则化器
。pyTorch或nn.嵌入
?pyTorch没有直接的等价物,因为pyTorch只支持通过优化器对参数进行L2
正则化
例如,具有重量衰减参数。如果设置并优化nn。嵌入
将通过具有指定强度的L2
对其进行正则化(对于权重衰减
,您只能通过nn.Embedding
,请参阅优化器的部分)
如果您希望使用L1
正则化,您必须:
- 自己编写代码
- 使用可用的第三方解决方案
自己编码
通常我们在丢失和反向传播中添加L1
正则化,但这是一种低效的方法
最好用正则化的导数(对于L1
是符号值)填充参数的梯度(尽管存在一些边缘情况)。大致如下:
import torch
# Do this in your optimization loop AT THE TOP
embedding = torch.nn.Embedding(150, 100)
embedding.weight.grad = torch.sign(embedding.weight)
# Do the rest of optimization AND clear gradients!
...
虽然要使它在一般情况下起作用(如批量累积等)有点困难,而且在IMO中也不太清楚。您还可以在上面应用L2
火炬手
第三方图书馆
免责声明:我是这个项目的作者
您可以每晚安装torchlayer
,并获得每层L1
和L2
正则化
通过pip安装
:
pip install -U torchlayers-nightly
在代码中,您可以执行以下操作:
import torchlayers as tl
import torch
embedding = torch.nn.Embedding(150, 100)
regularized_embedding = tl.L1(embedding)
# Do the rest as per usual
这个特性现在是实验性的,但应该可以工作,我以前已经成功地使用过了
此外,您应该能够以相同的方式使用tl.L2,请参阅关于此特定层的使用
有关更多信息,请查看并阅读文档