tf.keras.layers.Embedding具有参数embeddings_regularizer。在pyTorch或nn.Embedding中,这等同于什么?
发布于 2020-12-06 00:32:02
PyTorch没有直接等效的地方,因为PyTorch只支持通过torch.optim优化器对参数进行L2正则化。
例如,torch.optim.SGD有weight_decay参数。如果您设置了和,那么您优化了nn.Embedding --它将由具有指定强度的L2进行正则化(只可以传递weight_decay的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!
...不过,要让它在一般情况下发挥作用有点困难(比如批量积累等)。海事组织还很不清楚。您也可以在此基础上应用L2。
torchlayers第三方库
免责声明:我是这个项目的作者,
您可以安装torchlayers-nightly并获得每层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,请参阅文档字符串关于这个特定层的使用情况。
https://stackoverflow.com/questions/65163143
复制相似问题