matlab: exp (X) дает inf, хотя exp (max (X)) не дает - PullRequest
3 голосов
/ 19 июля 2010

[Редактировать: у всего есть очень простое решение: матрица использовала один тип данных вместо стандартного double]

Я только что заметил несколько странное (я думаю)Поведение в Matlab и интересно, что его вызывает.У меня есть матрица M размером 10000x500 со значениями в диапазоне

min(min(M)) = -226.9723 to 
max(max(M)) =  92.8173

и

exp(-227) =  2.6011e-99
exp(93) = 2.4512e+40

, но если я получу всю матрицу exp, эта матрица будет иметь значения inf:

ii = isinf(exp(M));
sum(sum(ii))
ans =
     2

Как Matlab хранит значения в матрице, чтобы операции над отдельными элементами могли дать другой результат, чем при выполнении той же операции над самой матрицей?

Т.е.

expM = exp(M);
exp(M(1)) == expM(1) ; %can be false, which I find surprising

IЯ знаю, что мне все равно нужно изменить алгоритм, так как высокие показатели дадут неточные результаты, даже если я смогу избежать значений inf.Это происходит в формуле для расчета искусственной нейронной сети, например:

 sum(log(1+exp(ones(numcases,1)*b_h + data*w_vh)),2);

, поэтому я планирую разделить это на два случая, во-первых, когда показатель степени мал, я делаю вычисления, как указано выше, для высоких значенийЯ приблизительно

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

btw: есть ли лучший способ получить максимальный элемент матрицы, кроме как делать max дважды, как в max (max (M))? *

1 Ответ

3 голосов
/ 19 июля 2010

Хорошо, я обнаружил ошибку: моя матрица была одного типа, но когда я скопировал значение в новую переменную, которая будет двойной, конечно же, с другим максимальным значением Я отвечаю на это сам здесь, так что вопрос не останется без ответа. Спасибо за советы, нашел причину при попытке построить перепроказ:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...