ash*_*ton 0 python arrays random numpy backpropagation
我在一篇有关反向传播的文章中找到了这段代码,但我对它到底是如何工作的感到困惑。文章说如下
“这是我们这个神经网络的权重矩阵。它被称为“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
Run Code Online (Sandbox Code Playgroud)
该形状(3, 1)为您提供了一个 3 x 1 矩阵;3 行,每行 1 列。那\xe2\x80\x99s只有3个值。
乘法和减法采用产生的值范围numpy.random.random()来产生更广泛的范围。
random()始终生成 0 到 1 之间的浮点值,将这些值乘以 2,然后减去 1 意味着现在的值介于 -1 到 1 之间。
\n\n\n返回半开区间 [0.0, 1.0) 内的随机浮点数。
\n\n结果来自指定区间内的\xe2\x80\x9c 连续均匀\xe2\x80\x9d 分布。要对 Unif[a, b), b > a 进行采样,请将
\n\nrandom_sample(ba) 的输出乘以并加上 a:Run Code Online (Sandbox Code Playgroud)\n(b - a) * random_sample() + a\n
(请注意,这np.random.random()是 的别名np.random.random_sample())
因此,要生成 和 之间的值a = -1,b = 1您需要乘以b - a = 2然后减去 1 ( + -1)。
您可以尝试在交互式会话中运行代码:
\n\n>>> import numpy as np\n>>> np.random.random((3, 1)) # a 3 x 1 matrix of values between 0 and 1\narray([[0.11605033],\n [0.31756365],\n [0.4690499 ]])\n>>> 2 * np.random.random((3, 1)) # a 3 x 1 matrix of values between 0 and 2\narray([[1.30127808],\n [0.3982432 ],\n [1.96544242]])\n>>> 2 * np.random.random((3, 1)) - 1 # a 3 x 1 matrix of values between -1 and 1\narray([[ 0.39767412],\n [-0.83410998],\n [-0.62446309]])\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1480 次 |
| 最近记录: |