Как управлять факелом. Тензор с переменной длиной в некотором измерении? - PullRequest
1 голос
/ 29 мая 2019

Я сейчас программирую пользовательский оптимизатор, и длина bias в первом измерении не определена, потому что у последней партии недостаточно данных для создания партии.Таким образом, инициализация весов с фиксированным размером batch_size не удовлетворяет для torch.add между последним пакетом и весами фиксированной длины.

bias = torch.randn(batch_size,units)
batch_data = generator(path)
# for example 
weights.shape # is (128,256)
# but the last batch has only 50 samples.
out = sigmoid(x*weights+bias) # where the length of first dimension is not mathed.

Итак, мне интересно, могу ли я создать тензор, где длина некоторого измеренияможет быть переменной, как список переменной длины.

Ответы [ 2 ]

0 голосов
/ 31 мая 2019

Эта ссылка может быть полезна для вас: Как инициализировать веса в PyTorch?

Если вы используете встроенный в Pytorch класс загрузчика данных в pytorch.Он сгенерирует итератор, который будет использоваться для автоматической обработки пакетов.Размер пакета должен быть явно задан заранее, передав ключевое слово «batch_size» загрузчику данных.

Последний пакет будет меньше, если набор данных не делится на размер пакета, если явно не установлено значение drop last.Значение true для загрузчика данных.

Смещение не работает таким образом и не зависит от размера набора данных или размера пакета.

0 голосов
/ 30 мая 2019

Почему вы хотите, чтобы bias зависело от размера партии?Во время тестирования, вы всегда будете тестировать свою сеть партиями одинакового размера?Если да, что означает меньшая партия?

Если вы все еще настаиваете на использовании меньшей партии, вы можете игнорировать «неиспользуемые» записи в bias:

out = sigmoid(x * weights[:x.size(0), ...] + bias[:x.size(0), ...])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...