Вопрос об измерениях при обработке списков с многослойным персептроном - PullRequest
0 голосов
/ 23 апреля 2020

Я довольно новичок в PyTorch и пытаюсь построить net, который состоит только из линейных слоев, которые будут получать список объектов в качестве входных данных и выводить некоторую оценку (которая является скалярной) для каждого объекта , Мне интересно, должен ли размер моего входного тензора быть (batch_size, list_size, object_size) или я должен сгладить каждый список и получить (batch_size, list_size*object_size)? Насколько я понимаю, в первом варианте у меня будет выходное измерение (batch_size, list_size, 1), а во втором (batch_size, list_size) это имеет значение? Я прочитал документацию, но она мне все еще не очень понятна.

enter image description here

1 Ответ

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

Если вы хотите выполнить классификацию для каждого объекта в ваших входных данных, вы должны держать объекты отдельно друг от друга; т. е. ваш ввод должен быть в форме (batch_size, list_size, object_size). Затем, учитывая количество полученных классов (скажем, m классов), линейный слой преобразует входные данные в форму (batch_size, list_size, m). В этом случае у вас будет m баллов для каждого объекта, которые можно использовать для прогнозирования метки класса.

Но теперь возникает вопрос; почему мы сглаживаемся в нейронных сетях вообще? Ответ прост: потому что вы хотите объединить всю информацию (в вашем конкретном случае c, информационные блоки являются объектами) внутри пакета, чтобы увидеть, влияют ли они каким-либо образом друг на друга, и если это так, проверить, Ваша сеть может изучать эти функции / шаблоны. На практике, учитывая природу вашей проблемы и данные, с которыми вы работаете, если различные объекты действительно связаны друг с другом, то ваша сеть сможет их изучить.

...