首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nn.Embeddings没有受过训练

nn.Embeddings没有受过训练
EN

Stack Overflow用户
提问于 2022-03-03 22:38:30
回答 1查看 52关注 0票数 0

当我创建一个新的NN时,我使用了一个特征嵌入层作为输入层来嵌入分类特征。但是,我注意到,当我执行培训时,这些嵌入(应该是可训练的)不会被更新。除了嵌入之外,所有其他内容都会更新。

考虑到我有几个分类特性,我定义我的FeatureEmbedder模块如下。

代码语言:javascript
复制
class FeatureEmbedder(nn.Module):
    # Discuss if we need this implementation or if the FeatureEmbedded from gluonts.torch.model.modules.feature works
    @validated()
    def __init__(
        self,
        cardinalities: List[int],
        embedding_dimensions: List[int],
    ):
        super().__init__()
        
        self._num_embedded_features = len(cardinalities)
        self.embedders = [
            torch.nn.Embedding(num_embeddings=card, embedding_dim=dim)
            for card, dim in zip(cardinalities, embedding_dimensions)
        ]

    def forward(self, features):
        """
        :param features: (-1, num_features)
        :return:
            Embedding with shape (-1, sum([self.embedding_dimensions]))
        """
        embedded_features = torch.cat(
            [
                embedder(features[:, i].long())
                for i, embedder in enumerate(self.embedders)
            ],
            dim=-1,
        )
        return embedded_features

我注意到,当我第一次调用我的训练函数并打印模型时,FeatureEmbedder子模块似乎没有任何参数,我没有解释.

代码语言:javascript
复制
  | Name                      | Type                        | Params
--------------------------------------------------------------------------
0 | model                     | NNetwork                    | 193   
1 | model.embedder            | FeatureEmbedder             | 0     
2 | model.model               | Sequential                  | 160   
3 | model.model.0             | Linear                      | 50    
4 | model.model.1             | ReLU                        | 0     
5 | model.model.2             | Linear                      | 110   
6 | model.model.3             | ReLU                        | 0     
7 | model.output_layer        | Sequential                  | 33    
8 | model.output_layer.linear | Linear                      | 33    
9 | loss                      | ScaledNegativeLogLikelihood | 0     
--------------------------------------------------------------------------

有人能帮我解释一下为什么我的嵌入式不接受网络培训吗?我已经检查过了,在我看来,所有的张量/嵌入都需要梯度(xx.requires_grad是真实的)。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2022-03-03 22:52:32

苏史密斯在pytorch论坛上的一个问题中解释了这一点。不要使用列表来存储权重/层,因为如果参数在常规列表中,self.parameters就不会查找它们,而这些参数(假设是)传递给优化器。使用torch.nn.ModuleList代替。

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

https://stackoverflow.com/questions/71344638

复制
相关文章

相似问题

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