Pytorch скопировать нейрон в слое - PullRequest
0 голосов
/ 28 февраля 2020

Я использую Pytorch 0.3.0. Я пытаюсь выборочно скопировать нейрон и его веса в одном и том же слое, а затем заменить исходный нейрон другим набором весов. Вот моя попытка сделать это:

reshaped_data2 = data2.unsqueeze(0)
new_layer_data = torch.cat([new_layer.data, reshaped_data2], dim=0)
new_layer_data[i] = data1
new_layer.data.copy_(new_layer_data)

Сначала я отжал data2, чтобы превратить его в тензор 1*X вместо 0*X. Затем я объединяю тензор моего слоя с измененным data2 вдоль измерения 0. Затем я заменяю исходный data2, расположенный с индексом i, на data1. Наконец, я копирую все это в свой слой.

Я получаю ошибку:

RuntimeError: inconsistent tensor size, expected tensor [10 x 128] and src [11 x 128] to have the same number of elements, but got 1280 and 1408 elements respectively at /Users/soumith/code/builder/wheel/pytorch-src/torch/lib/TH/generic/THTensorCopy.c:86

Если я делаю простое назначение вместо копии, я получаю

RuntimeError: The expanded size of the tensor (11) must match the existing size (10) at non-singleton dimension 1. at /Users/soumith/code/builder/wheel/pytorch-src/torch/lib/TH/generic/THTensor.c:309

Я понимаю ошибку, но как правильно go об этом?

Ответы [ 2 ]

1 голос
/ 29 февраля 2020

Вы пытаетесь заменить тензор 10x128 на тензор 11x128, чего не позволяет модель. new_layer инициализируется с размером (11, 128)? Если нет, попробуйте создать новый слой с желаемым размером (11, 128), а затем скопируйте / назначьте new_layer_data.

0 голосов
/ 12 апреля 2020

Решение здесь состоит в том, чтобы создать новую модель с правильным размером и передать веса в качестве значений по умолчанию. Не найдено решение для динамического расширения c.

...