2013-04-24 5 views
1

У меня есть детерминированная нейронная сеть, и я хочу сделать ее стохастической.Случайные массивы бит с заданными вероятностями с numpy

Два вопроса:

  1. Я не уверен, если это означает, что мне нужно использовать результат сигмы для определения вероятности для выхода, или если вероятности просто входные нейроны, и сигмоидальная функция теперь избыточна.
  2. Как сделать это эффективно с помощью numpy? Я знаю, как создавать случайные биты, но как вы это делаете с заданными вероятностями внутри большого массива? (Моя текущая функция сигмовидной является гиперболическим тангенсом, если это имеет значение)

ответ

0
  1. Функция сигмовидной по-прежнему требуется, так как обратное распространение работает на вычисление производной функции сигмовидной, а не в том или не уволил нейрон.
  2. После вычисления активации, как и раньше, я теперь запустить массив результата х через это:

    return numpy.random.ranf(x.shape) < x

    Мой выбор времени для этого является 3.03323280772e-05

    Также отметим, что Numpy обрабатывает булевы значения, как если бы они были 1 и 0, поэтому нет необходимости передавать результат обратно в int/float). Поскольку это сейчас 0 и 1, мне пришлось немного изменить код - до того, как я использовал -1 и 1 для целевых значений и входов.

+1

Или 'Возвращение (numpy.random.ranf (x.shape)> х) * 2 - 1' – askewchan

+0

@askewchan Я думаю, что это <а>. Исходная ошибка была моя :) – Uri

+0

Да, предполагая, что 'x' - массив вероятностей, нормированный на' 1'. Мое мнение состояло в том, что очень легко изменить boolean на '{-1, 1}' – askewchan

Смежные вопросы