Передача обучения с OpenNMT - PullRequest
0 голосов
/ 02 мая 2019

Я тренирую модель трансформера с OpenNMT-py на музыкальных файлах MIDI, но результаты плохие, потому что у меня есть доступ только к небольшому набору данных, относящемуся к стилю, который я хочу изучать. Чтобы помочь модели узнать что-то полезное, я хотел бы использовать гораздо больший набор данных других стилей музыки для предварительной тренировки, а затем настроить результаты с помощью небольшого набора данных.

Я думал о том, чтобы заморозить сторону энкодера трансформатора после предварительной тренировки и позволить части декодера свободно выполнить точную настройку. Как можно это сделать с OpenNMT-py?

1 Ответ

1 голос
/ 04 мая 2019

Пожалуйста, будьте более конкретны в своих вопросах и покажите код, который поможет вам получить продуктивный ответ от сообщества 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
...