首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >embeddings_regularizer在pyTorch中的等价性

embeddings_regularizer在pyTorch中的等价性
EN

Stack Overflow用户
提问于 2020-12-05 23:39:26
回答 1查看 717关注 0票数 4

tf.keras.layers.Embedding具有参数embeddings_regularizer。在pyTorch或nn.Embedding中,这等同于什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-06 00:32:02

PyTorch没有直接等效的地方,因为PyTorch只支持通过torch.optim优化器对参数进行L2正则化。

例如,torch.optim.SGDweight_decay参数。如果您设置了,那么您优化了nn.Embedding --它将由具有指定强度的L2进行正则化(只可以传递weight_decaynn.Embedding,参见优化器的每个参数-选项 )。

如果希望使用L1正则化,则必须:

  • 你自己编码吧
  • 使用可用的第三方解决方案

自己编码

通常我们在损失和反向传播中加入L1正则化,但这是一种效率低下的方法。

最好是用正则化的导数(对于L1是符号值)填充参数的梯度(虽然有一些边缘情况)。类似于这样的东西:

代码语言:javascript
复制
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!
...

不过,要让它在一般情况下发挥作用有点困难(比如批量积累等)。海事组织还很不清楚。您也可以在此基础上应用L2

torchlayers第三方库

免责声明:我是这个项目的作者,

您可以安装torchlayers-nightly并获得每层L1L2正则化。

通过pip安装

代码语言:javascript
复制
pip install -U torchlayers-nightly

在您的代码中,您可以:

代码语言:javascript
复制
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,请参阅文档字符串关于这个特定层的使用情况。

有关更多信息,请查看github储存库并阅读文档这里

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65163143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档