Передача обучения с OpenNMT
Я тренирую модель трансформера с OpenNMT-py на музыкальных файлах MIDI, но результаты плохие, потому что у меня есть доступ только к небольшому набору данных, относящемуся к стилю, который я хочу изучать. Чтобы помочь модели узнать что-то полезное, я хотел бы использовать намного больший набор данных других стилей музыки для предварительной тренировки, а затем настроить результаты с помощью небольшого набора данных.
Я думал о том, чтобы заморозить сторону кодера трансформатора после предварительной тренировки и позволить части декодера свободно выполнить точную настройку. Как можно это сделать с OpenNMT-py?
1 ответ
Пожалуйста, будьте более конкретны в своих вопросах и покажите код, который поможет вам получить продуктивный ответ от SO-сообщества.
Если бы я был на вашем месте и хотел бы заморозить компонент нейронной сети, я бы просто сделал:
for name, param in self.encoder.named_parameters():
param.requires_grad = False
Здесь я предполагаю, что у вас есть модуль NN, как показано ниже.
class Net(nn.Module):
def __init__(self, params):
super(Net, self).__init__()
self.encoder = TransformerEncoder(num_layers,
d_model,
heads,
d_ff,
dropout,
embeddings,
max_relative_positions)
def foward(self):
# write your code