Коды в Pytorch.
Я хочу, чтобы часть моей матрицы встраивания была обучаемой, и я хочу, чтобы оставшаяся часть замораживала веса, поскольку они являются предварительно подготовленными векторами.
Моя src_weight_matrix - это предварительно встроенная матрица внедрения измерения: [vocab_size + 4 special_tokens] X [emb_dim] = [49996 + 4] X [300]
первые 49996 строки для слова в словаре, и последние 4 слова в словаре являются специальным токеном, то есть [UNK], [PAD], [START], [STOP]. Я случайно инициализировал векторы вложения для этих 4 слов.
Поэтому я хочу обучить эти 4 веса вложения и позволить другим вложениям иметь свои собственные веса.
Код выглядит следующим образом, где все веса встраивания заморожены, кроме последних 4, что является правильным или нет, я не знаю.
class Encoder(nn.Module):
def __init__(self, src_weights_matrix):
super(Encoder, self).__init__()
self.embedding = nn.Embedding(config.vocab_size, config.emb_dim)
self.embedding.load_state_dict({'weight': src_weights_matrix})
self.embedding.weight.requires_grad = False
self.embedding.weight[-4:, :].requires_grad = True
init_wt_normal(self.embedding.weight)
self.lstm = nn.LSTM(config.emb_dim, config.hidden_dim, num_layers=1, batch_first=True, bidirectional=True)
init_lstm_wt(self.lstm)
self.W_h = nn.Linear(config.hidden_dim * 2, config.hidden_dim * 2, bias=False)
Любой вывод очень ценится. Заранее спасибо