Deep learning 在PyTorch中进行多个嵌入的更快方法?

Deep learning 在PyTorch中进行多个嵌入的更快方法?,deep-learning,pytorch,torch,embedding,autoencoder,Deep Learning,Pytorch,Torch,Embedding,Autoencoder,我正在开发一个用于使用表格数据集构建自动编码器的程序 一个重要的特性是学习分类特性的嵌入 然而,在实践中,同时训练多个嵌入层会导致速度减慢。我使用for循环来实现这一点,并且在每次迭代中运行for循环(我认为)是导致速度减慢的原因 构建模型时,我将嵌入层与用户数据集中的每个分类特征相关联: for ft in self.categorical_fts: feature = self.categorical_fts[ft] n_cat

我正在开发一个用于使用表格数据集构建自动编码器的程序

一个重要的特性是学习分类特性的嵌入

然而,在实践中,同时训练多个嵌入层会导致速度减慢。我使用for循环来实现这一点,并且在每次迭代中运行for循环(我认为)是导致速度减慢的原因

构建模型时,我将嵌入层与用户数据集中的每个分类特征相关联:

        for ft in self.categorical_fts:
            feature = self.categorical_fts[ft]
            n_cats = len(feature['cats']) + 1
            embed_dim = compute_embedding_size(n_cats)
            embed_layer = torch.nn.Embedding(n_cats, embed_dim)
            feature['embedding'] = embed_layer

然后,通过调用.forward():

然后
x
进入密集层

这样就完成了任务,但在每次向前传递期间运行此for循环确实会降低训练速度,尤其是当数据集有数十或数百个分类列时

有人知道这样的矢量化方法吗?谢谢

更新: 为了更清楚,我制作了这个草图,描述了我是如何将分类特征输入网络的。您可以看到,每个分类列都有自己的嵌入矩阵,而数字特征在传递到前馈网络之前直接连接到它们的输出


我们能在不迭代每个嵌入矩阵的情况下做到这一点吗?

我也很想知道是否有更高效/更干净的方法来实现这一点,但到目前为止我还没有发现任何东西:(在这种情况下,tensorflow编译的计算图更高效,但我很失望,因为我更喜欢pytorch。
        embeddings = []
        for i, ft in enumerate(self.categorical_fts):
            feature = self.categorical_fts[ft]
            emb = feature['embedding'](codes[i])
            embeddings.append(emb)

        #num and bin are numeric and binary features
        x = torch.cat(num + bin + embeddings, dim=1)