首页 > 解决方案 > TensorFlow get_variable 进入 Pytorch

问题描述

我正在尝试将此 TensorFlow 代码转换为 PyTorch。例如,我转换了下面的 TF 代码

tf.get_variable("char_embeddings", [len(data.char_dict), data.char_embedding_size]),  char_index)  # [num_sentences, max_sentence_length, max_word_length, emb]

进入

class CharEmbeddings(nn.Module):
    def __init__(self, config, data):
          ....
          self.embeddings = nn.init.xavier_uniform_(torch.empty(len(data.char_dict), data.char_embedding_size))


    def forward(self, char_index):
        # [num_sentences, max_sentence_length, max_word_length, emb]
        char_emb = self.embeddings[char_index]       

我不明白 100% TF 在那里做什么。是否应该首先初始化char_embeddings,收集(我理解)然后反向传播梯度以更新char_embeddings值,以便在下一次迭代char_embeddings中更新?

如果是这样,我尝试将其转换为 PyTorch 并根据我阅读的内容,如果没有将初始化程序传递给get_variable hereglorot_uniform_initializer将使用我认为它相当于 pytorchxavier_uniform_

这里有两个问题:

  1. 我对 TF 代码的解释是否正确?
  2. 这种转换有效吗?
  3. 我是否应该期望原始嵌入self.embeddings能够反向传播并更新其值?这也是 tensorflow 版本的预期行为吗?以及如何在 Pytorch 中实现这一点?我添加requires_grad到嵌入张量,但这不会更新值。

这些可能是新手的问题,但我对此并不陌生。谢谢!

标签: pythontensorflownlppytorch

解决方案


推荐阅读