[Edit: Все это имеет очень простое решение: матрица используется единственным типом данных, а не по умолчанию двойного]MATLAB: ехр (X) дает инф даже если ехр (макс (X)) не
Я только что заметил несколько своеобразное (я думаю) поведение в Matlab и задаюсь вопросом, что его вызывает. У меня есть 10000x500 матрицы M со значениями в диапазоне от
min(min(M)) = -226.9723 to
max(max(M)) = 92.8173
и
exp(-227) = 2.6011e-99
exp(93) = 2.4512e+40
но если ехр всей матрицы, эта матрица имеет Inf значения:
ii = isinf(exp(M));
sum(sum(ii))
ans =
2
Как Matlab магазин значения в матрице, так что операции с отдельными элементами могут дать другой результат, чем при выполнении той же самой операции над самой матрицей?
I.e.
expM = exp(M);
exp(M(1)) == expM(1) ; %can be false, which I find surprising
Я знаю, что в любом случае, чтобы изменить алгоритм, как высокие показатели будут давать неточные результаты, даже если я могу избежать Inf значений. Это происходит в формуле для искусственного расчета нейронной сети, как:
sum(log(1+exp(ones(numcases,1)*b_h + data*w_vh)),2);
поэтому мой план, чтобы разделить это на два случая, первый, где показатель мал я сделать расчет, как указано выше, при высоких значениях I приближают
log(1+exp(ones(numcases,1)*b_h + data*w_vh)
с
ones(numcases,1)*b_h + data*w_vh
это звучит разумно? Мои рассуждения, конечно, что
log(1+exp(x)) ≈ log(exp(x)) ≈ x, for large x
кстати: есть лучший способ, чтобы получить максимальный элемент матрицы другого, чем делать максимум два раза в макс (макс (M))?
Интересная проблема ... Кажется, я не могу воспроизвести ее на своей машине с помощью R2010a, я не получаю никакой инфы и exp (a) always == expa, где expa = exp (a) – Xzhsh
Да, я не смог найти простой пример кода, который генерирует матрицу, которая показывает это поведение:/Я загружу файл мата для любого, достаточно любопытного, для ухода :) –
Странно. Я могу сказать, что этого не происходит в GNU Octave, или, по крайней мере, я не смог бы воспроизвести это. –