python - 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
here,glorot_uniform_initializer
将使用我认为它相当于 pytorchxavier_uniform_
这里有两个问题:
- 我对 TF 代码的解释是否正确?
- 这种转换有效吗?
- 我是否应该期望原始嵌入
self.embeddings
能够反向传播并更新其值?这也是 tensorflow 版本的预期行为吗?以及如何在 Pytorch 中实现这一点?我添加requires_grad
到嵌入张量,但这不会更新值。
这些可能是新手的问题,但我对此并不陌生。谢谢!
解决方案
推荐阅读
- ffmpeg - FFmpeg 使用所有内存并在 filter_complex 中多次使用输入时崩溃
- java - 是否可以在流函数中使用当前的流函数?
- python-3.x - 用输入初始化对象
- c++ - 如何将临时对象作为非常量引用传递给成员函数?
- javascript - 计算JavaScript中的时间总和
- datastage - 为什么我会收到此 DataStage 作业编译错误?
- c++ - C++ ESP8266 返回对由 EEPROM.get 填充的对象的引用
- mysql - 我可以在使用表 MySql 中的值的连接条件中使用 IN 吗?
- reactjs - 无法在没有错误的情况下从外部打开模态 MaterializeCSS
- sql - 如何追踪无效的 utf8 字符串