Вот структура моего кода :
- Входная матрица имеет размеры 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