Почему мы умножаем вызовы numpy.random.random на числа и вычитаем числа? - PullRequest
0 голосов
/ 26 мая 2019

Я нашел этот фрагмент кода в статье о обратном распространении, и я запутался, как именно он работает.В статье говорится следующее

«Это наша матрица весов для этой нейронной сети. Она называется« syn0 », что подразумевает« нулевой синапс ». Поскольку у нас есть только 2 слоя (входной и выходной), нам нужен только одинматрица весов для их соединения. Его размерность (3,1), потому что у нас есть 3 входа и 1 выход. "

Я хочу указать, что при вводе автор ссылается на массив" X ", а вывод ссылаетсяв массив "Y".

Мой первый вопрос: почему статья утверждает, что у нас есть только 3 входа.Взгляд на код показывает, что наш массив X имеет размер 4. Я просто что-то неправильно понимаю?

Мой второй вопрос: почему умножаем вызов np.random.random () на 2?

Спасибо за помощь!

import numpy as np    

X = np.array([ [0,0,1],
               [0,1,1],
               [1,0,1],
               [1,1,1] ])

y = np.array([[0,0,1,1]]).T  

# initialize weights randomly with mean 0
syn0 = 2*np.random.random((3,1)) - 1

1 Ответ

2 голосов
/ 26 мая 2019

Форма (3, 1) дает вам матрицу 3 на 1; 1 столбец в каждой из 3 строк. Это только 3 значения.

Умножение и вычитание принимает диапазон значений, которые numpy.random.random() производит, чтобы получить более широкий диапазон.

random() всегда выдает значения с плавающей запятой от 0 до 1, умножая их на 2, а затем вычитая 1 означает, что теперь у вас есть значения от -1 до 1.

См. numpy.random.random() документацию :

Возвращать случайные числа с плавающей точкой в ​​полуоткрытом интервале [0.0, 1.0).

Результаты получены из «непрерывного равномерного» распределения за указанный интервал. Чтобы сэмплировать Unif [a, b), b> a, умножьте вывод random_sample на (b-a) и добавьте a:

(b - a) * random_sample() + a

(обратите внимание, что np.random.random() это псевдоним np.random.random_sample())

Таким образом, чтобы получить значения между a = -1 и b = 1, вам нужно умножить на b - a = 2 и затем вычесть 1 (+ -1).

Вы можете попробовать запустить код в интерактивном сеансе:

>>> import numpy as np
>>> np.random.random((3, 1))  # a 3 x 1 matrix of values between 0 and 1
array([[0.11605033],
       [0.31756365],
       [0.4690499 ]])
>>> 2 * np.random.random((3, 1))  # a 3 x 1 matrix of values between 0 and 2
array([[1.30127808],
       [0.3982432 ],
       [1.96544242]])
>>> 2 * np.random.random((3, 1)) - 1  # a 3 x 1 matrix of values between -1 and 1
array([[ 0.39767412],
       [-0.83410998],
       [-0.62446309]])
...