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,请参阅关于此特定层的使用

有关更多信息,请查看并阅读文档