Реализация функции активации tanh () для CNN

Я пытаюсь реализовать функцию активации tanh на моем CNN, но она не работает, результат всегда «NaN». Поэтому я создал простое приложение, в котором у меня есть рандомизированная матрица, и я пытаюсь применить функцию tanh (x), чтобы понять, в чем проблема?

Вот моя реализация:

    Eigen::MatrixXd A = Eigen::MatrixXd::Random(10,1000);
Eigen::MatrixXd result, deriv;
result = A.array().tanh();
deriv = 1.0 - result*result;

и единственным результатом этого является эта ошибка:

no match for ‘operator-’ (operand types are ‘double’ and ‘const Eigen::Product<Eigen::Matrix<double, -1, -1>, Eigen::Matrix<double, -1, -1>, 0>’)
deriv = (1.0 - result*result );
~~~~^~~~~~~~~~~~~~~

Не могли бы вы мне помочь ?

0

Решение

Продукт result*result не имеет правильных размеров для умножения матриц. Мы можем использовать result*result.transpose() вместо этого (если только не предполагается умножение коэффициента, в этом случае можно использовать result.array()*result.array()).

Чтобы вычесть значения полученной матрицы из матрицы, полной единиц, .array() Метод может быть использован:

deriv = 1. - (result*result.transpose()).array();
0

Другие решения

я использовал OpenCV создать матрицу из них
как это :

cv::Mat sum;
Eigen::MatrixXd SUM, Acv;
cv::eigen2cv(A,Acv)
sum=Mat::ones(Acv.rows,Acv.cols, CV_32FC1);
cv::cv2eigen(sum,SUM);

так :

deriv = SUM - result*result;

а теперь вот еще одна проблема 🙁

/usr/include/eigen3/Eigen/src/Core/CwiseBinaryOp.h :110 : Eigen::CwiseBinaryOp<BinaryOp, Lhs, Rhs>::CwiseBinaryOp(const Lhs&, const Rhs&, const BinaryOp&) [with BinaryOp = Eigen::internal::scalar_difference_op<double, double>; LhsType = const Eigen::Matrix<double, -1, -1>; RhsType = const Eigen::Product<Eigen::Matrix<double, -1, -1>, Eigen::Matrix<double, -1, -1>, 0>; Eigen::CwiseBinaryOp<BinaryOp, Lhs, Rhs>::Lhs = Eigen::Matrix<double, -1, -1>; Eigen::CwiseBinaryOp<BinaryOp, Lhs, Rhs>::Rhs = Eigen::Product<Eigen::Matrix<double, -1, -1>, Eigen::Matrix<double, -1, -1>, 0>]:  l'assertion « aLhs.rows() == aRhs.rows() && aLhs.cols() == aRhs.cols() » a échoué.
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector