Передача обучения с 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
Другие вопросы по тегам