Tensorflow get_variable в Pytorch - PullRequest
       106

Tensorflow get_variable в Pytorch

0 голосов
/ 30 мая 2020

Я пытаюсь преобразовать этот код 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 здесь , будет использоваться glorot_uniform_initializer, что, я думаю, эквивалентно pytorch xavier_uniform_

Здесь два вопроса:

  1. Верна ли моя интерпретация TF-кода?
  2. Это преобразование допустимо?
  3. Стоит ли ожидать исходных вложений self.embeddings для обратного распространения и обновления его значений? Это ожидаемое поведение и от версии с тензорным потоком? и как этого добиться в Pytorch? Я добавил requires_grad к тензору вложений, но это не обновляет значения.

Это может быть вопрос newb ie, но я новичок в этом. Спасибо!

...