Сообщение mat1 and mat2 shapes cannot be multiplied знакомо почти каждому, кто работает с нейросетями на PyTorch. Эта ошибка возникает в тот момент, когда библиотека пытается перемножить две матрицы, размеры которых несовместимы по правилам линейной алгебры. За короткой строчкой в консоли скрывается целый пласт типичных проблем проектирования моделей, и разобраться в них стоит каждому, кто хочет уверенно работать с глубоким обучением. Суть проблемы лежит в фундаментальном правиле умножения матриц. Чтобы перемножить две матрицы, число столбцов первой должно совпадать с числом строк второй. Если первая матрица имеет форму, условно, 64 на 128, то вторая обязана начинаться со 128. Когда эти значения расходятся, математическая операция становится невозможной, и фреймворк честно об этом сообщает. Именно поэтому в тексте ошибки почти всегда указываются конкретные размеры обоих тензоров, что значительно упрощает поиск источника несоответствия. Чаще всего корень проблемы находится в полносвязных слоях. Разработчик задаёт линейный слой с определённым количеством входных признаков, но реальные данные приходят в другой форме. Подобное случается при переходе от свёрточной части сети к классификатору, когда забывают правильно выровнять или развернуть многомерный тензор в плоский вектор. Несовпадение всего на несколько единиц мгновенно обрушивает прямой проход модели. Отдельного внимания заслуживает работа с батчами. Начинающие специалисты иногда путают размерность батча с размерностью признаков, из-за чего тензор оказывается транспонированным или перевёрнутым. Похожая ситуация возникает при использовании рекуррентных слоёв и трансформеров, где порядок осей имеет принципиальное значение. Невнимательность к структуре данных на входе превращается в постоянный источник подобных сбоев. Интересно, что эта ошибка считается одной из самых доброжелательных в экосистеме машинного обучения. В отличие от молчаливых логических багов, она проявляется немедленно и указывает на точное место конфликта. Опытные инженеры воспринимают её скорее как подсказку, а не как препятствие. Зная форму ожидаемых и фактических тензоров, можно за считанные минуты восстановить логику размерностей и устранить расхождение. Стоит отметить, что подобные несоответствия отражают более общую особенность работы с нейросетями. Архитектура модели представляет собой строгую цепочку преобразований, где каждый слой ожидает данные определённой формы. Любое нарушение этой цепочки немедленно даёт о себе знать. Поэтому привычка мысленно отслеживать форму тензора на каждом этапе становится одним из ключевых навыков разработчика.