#c #xtensor
Вопрос:
Я создаю нейронную сеть и использую xtensor для умножения массивов в прямой передаче. Сеть принимает xt::xarraylt;doublegt;
и выводит десятичное число в диапазоне от 0 до 1. Мне дали лист с ожидаемыми результатами. когда я сравнил свои выходные данные с предоставленным листом, я обнаружил, что все результаты отличаются ровно через 7 цифр. например , если требуемое значение равно 0.1234567890123456
, я получаю такие значения, как 0.1234567-garbage-numbers-so-that-total-numbers-equal-16
, 0.1234567993344660
, 0.1234567221155667
.
Я знаю, что не могу получить это точное число 0.1234567890123456
из-за математики с плавающей запятой. Но как я могу отладить/ увеличить точность, чтобы она была близка к требуемому числу. Спасибо
Обновить:
xt::xarraylt;doublegt; Layer::call(xt::xarraylt;doublegt; input) { return xt::linalg::dot(input, this-gt;weight) this-gt;bias; }
для кода я просто вызываю этот call
метод несколько раз, когда weight
и bias
являются xt::xarraylt;doublegt;
массивами.
Комментарии:
1. Покажите свой код, особенно ту его часть, которая выводит значения. Виновата может быть ваша функция вывода, а не ваша арифметика.
2. добавил код, сэр. Я не знаю, но простой ответ может заключаться в том, что xtensor предоставляет точные числа до 15 или 16 десятичных цифр или даже больше, и почему-то есть большая вероятность, что мой код не работает, и у людей никогда раньше не было этой проблемы с xtensor.