Ошибка утверждения при широковещании собственной матрицы: несоответствие размеров при прямом проходе нейронной сетиC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Ошибка утверждения при широковещании собственной матрицы: несоответствие размеров при прямом проходе нейронной сети

Сообщение Anonymous »

Я реализую нейронную сеть на C++, используя Eigen для операций линейной алгебры. В функции DenseLayer::forward я столкнулся с проблемой несоответствия размеров при попытке добавить вектор смещения в выходную матрицу слоя.
Вот структура моего кода :
  • Входная матрица имеет размеры 64x74 (размер пакета 64).
  • вес инициализируется размерами 128x784.< /li>
    смещение — это вектор-столбец размером 128x1.
Ожидаемое поведение:
После умножения input *weights.transpose() я получаю выходную матрицу размером 64x128. Мне нужно добавить смещение к каждой строке вывода, чтобы конечный результат оставался 64x128.
Текущий подход:
Вот функция пересылки:

Код: Выделить всё

Eigen::MatrixXd DenseLayer::forward(const Eigen::MatrixXd& input) {
input_cache = input;
Eigen::MatrixXd output = input * weights.transpose();

// Attempt to replicate bias across rows to match output dimensions
Eigen::MatrixXd bias_replicated = bias.replicate(output.rows(), 1);

output += bias_replicated;
return output;
}
Сообщение об ошибке:
При запуске кода я сталкиваюсь со следующей ошибкой утверждения:

Код: Выделить всё

Assertion failed: (dst.rows() == src.rows() && dst.cols() == src.cols()), function resize_if_allowed, file AssignEvaluator.h, line 754.
Что я пробовал:
  • Использование .colwise() + смещение. col(0), .rowwise() +bias.transpose() и непосредственное добавление смещения с различными изменениями/транспонированием.
  • Я проверил размеры с помощью операторов отладки и подтвердил, что выходные данные имеют размер 64x128 и смещение 128x1.
Вопрос:
Как я могу правильно широковещательное смещение в каждой строке вывода для выполнения поэлементного сложения без того, чтобы Эйген вызывал ошибку несоответствия размеров? Есть ли лучший способ справиться с этой трансляцией в Eigen, или я упускаю что-то фундаментальное в добавлении матриц с помощью Eigen?
Вывод отладки:
Чтобы помогите, вот размеры, напечатанные до ошибки:
  • Вывод до размера смещения: 64x128
  • Размер смещения для дополнение: 128x1
  • Размер реплицируемого смещения: 64x128
Любые идеи по достижению правильного вещания или обходные пути для этого буду очень признателен!

Подробнее здесь: https://stackoverflow.com/questions/791 ... neural-net
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»