Если вы посмотрите на документацию , вы обнаружите, что действительно слой Linear
принимает тензоры произвольной формы, где только последнее измерение должно совпадать с аргументом in_features
, который вы указали вконструктор.
Выход будет иметь точно такую же форму, как и вход, только последнее измерение изменится на то, что вы указали в конструкторе out_features
.
Это работает таким образомчто один и тот же слой (с одинаковыми весами) наносится на каждый из (возможно) нескольких входов. В вашем примере у вас есть входная форма (10, 3, 4)
, которая в основном представляет собой набор 10 * 3 == 30
4-мерных векторов. Итак, ваши слои a1
и a2
применяются ко всем этим 30 векторам, чтобы сгенерировать еще один 10 * 3 == 30
4D векторов в качестве выходных данных (поскольку вы указали out_features=4
в конструкторе).
Итак,чтобы ответить на ваши вопросы:
Является ли вышеуказанная нейронная сеть действительной? То есть будет ли модель обучаться правильно?
Да, она действительна и будет обучена «правильно» из технической точки зрения. Но, как и в любой другой сети, если это действительно правильно решит вашу проблему, это другой вопрос.
Даже после прохождения 3D-входа x = torch.randn (10,3,4), почемуPytorch nn.Linear не показывает никаких ошибок и выдает трехмерный вывод?
Ну, потому что он определен для работы таким образом.