В документации PyTorch LSTM написано:
batch_first — если True, то предоставляются входные и выходные тензоры. как (партия, последовательность, функция). По умолчанию: Ложь
Мне интересно, почему они выбрали пакетное измерение по умолчанию в качестве второго, а не первого. для меня проще представить мои данные как [batch, seq, feature]
, чем [seq, batch, feature]
. Первое мне кажется более интуитивным, а второе нелогичным.
Я прошу здесь узнать, есть ли какая-либо причина этого, и можете ли вы помочь мне понять это.
Насколько я знаю, строго обоснованного ответа нет. В настоящее время он отличается от других фреймворков, где, как вы говорите, форма более интуитивно понятна, таких как Keras, но только из соображений совместимости со старыми версиями, изменение параметра по умолчанию, который изменяет размеры вектора, вероятно, сломает половину моделей, если их сопровождающие обновляются до более новых версий PyTorch.
Вероятно, изначально идея заключалась в том, чтобы сначала установить временное измерение, чтобы упростить итерационный процесс с течением времени, чтобы вы могли просто выполнить
for t, out_t in enumerate(my_tensor)
вместо того, чтобы делать меньше визуальных вещей, таких как доступ с помощью my_tensor[:, i]
и повторение в range(time)
.
В ответе на другой вопрос написано:
Существует аргумент в пользу отказа от использования
batch_first
, который гласит: что базовый API, предоставляемый Nvidia CUDA, значительно быстрее, используя пакет в качестве вторичного.
Но я не знаю, верен ли этот аргумент или нет.