Я пытаюсь преобразовать этот код 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_
Здесь два вопроса:
- Верна ли моя интерпретация TF-кода?
- Это преобразование допустимо?
- Стоит ли ожидать исходных вложений
self.embeddings
для обратного распространения и обновления его значений? Это ожидаемое поведение и от версии с тензорным потоком? и как этого добиться в Pytorch? Я добавил requires_grad
к тензору вложений, но это не обновляет значения.
Это может быть вопрос newb ie, но я новичок в этом. Спасибо!