np.random.rand 以某种方式产生大于 1 的浮点数
np.random.rand somehow produces floats bigger than 1
我正在尝试创建一个 2 层神经网络,为此我首先使用 numpy.random.rand 将权重和偏差初始化为 0 和 1 之间的随机浮点数。但是,出于某种原因,此过程会为 W1(权重 1)生成大于 1 的浮点数,而它对所有其他权重和偏差都能正常工作。我不明白为什么会发生这种情况,我想也许有什么东西从我初始化参数的函数外部影响了函数,但我无法检测到函数中可能受到函数外部影响的任何部分。
import numpy as np
### CONSTANTS DEFINING THE MODEL ####
n_x = 12288 # num_px * num_px * 3
n_h = 7
n_y = 1
layers_dims = (n_x, n_h, n_y)
def initialize_parameters_deep(layer_dims):
"""
Arguments:
layer_dims -- python array (list) containing the dimensions of each layer in our network
Returns:
parameters -- python dictionary containing your parameters "W1", "b1","W2", "b2":
"""
np.random.seed(1)
parameters = {}
parameters["W1"] = np.random.rand(n_h, n_x) #(7, 12288)
parameters["b1"] = np.random.rand(n_h, 1) #(7)
parameters["W2"] = np.random.rand(n_y, n_h) #(7, 1)
parameters["b2"] = np.random.rand(n_y, 1) #(1)
return parameters
parameters = initialize_parameters_deep(layers_dims)
print(parameters)
输出:
{'W1': array([[4.17022005e-01, 7.20324493e-01, 1.14374817e-04, ...,
3.37562919e-01, 1.12292153e-01, 5.37047221e-01],
[7.07934286e-01, 3.37726007e-01, 7.07954162e-01, ...,
4.22040811e-01, 7.78593215e-01, 3.49866021e-01],
[9.01338451e-01, 7.95132845e-03, 1.03777034e-01, ...,
2.78602449e-01, 5.05813021e-02, 8.26828833e-01],
...,
[5.62717083e-03, 6.58208224e-01, 3.88407263e-01, ...,
5.56312618e-01, 8.69650932e-01, 1.00112287e-01],
[4.16278934e-01, 4.56060621e-01, 9.33378848e-01, ...,
9.52798385e-01, 9.41894584e-01, 4.44342962e-01],
[8.89254832e-01, 6.42558949e-01, 2.29427262e-01, ...,
8.05884494e-01, 1.80676088e-01, 6.12694420e-01]]), 'b1': array([[0.11933315],
[0.50073416],
[0.21336813],
[0.14223935],
[0.60809243],
[0.41994954],
[0.43137737]]), 'W2': array([[0.81360697, 0.44638382, 0.41794085, 0.08649817, 0.29957473,
0.33706742, 0.24721952]]), 'b2': array([[0.92363097]])}
它不会生成大于 1 的浮点数,它只是以不同的方式表示它们。
4.17022005e-01
等同于0.417022005
,1.14374817e-04
等同于0.000114374817
。
W1 数字末尾的 e-01、e-02、e-03 等仅表示数字以指数格式书写。因此,如果您有例如 2.786e-01,它与 (2.786/10) 的写法相同,与 0.2786 相同。同样的事情也适用于:2.786e-03 == (2.786/1000) == 0.002786。 e+2 是 10^2 和 e-2 是 1/(10^2).
注意打印权重参数张量时打印的最后几个字符,例如e-01
。这表示以 10 为底的指数,即意味着给定权重的值是打印的数字 次 10 的给定幂。
所有的幂都是负数,这意味着权重在 [0, 1].
范围内具有较小但 正 值
例如,4.17022005e-01
等于 0.417022005。
我正在尝试创建一个 2 层神经网络,为此我首先使用 numpy.random.rand 将权重和偏差初始化为 0 和 1 之间的随机浮点数。但是,出于某种原因,此过程会为 W1(权重 1)生成大于 1 的浮点数,而它对所有其他权重和偏差都能正常工作。我不明白为什么会发生这种情况,我想也许有什么东西从我初始化参数的函数外部影响了函数,但我无法检测到函数中可能受到函数外部影响的任何部分。
import numpy as np
### CONSTANTS DEFINING THE MODEL ####
n_x = 12288 # num_px * num_px * 3
n_h = 7
n_y = 1
layers_dims = (n_x, n_h, n_y)
def initialize_parameters_deep(layer_dims):
"""
Arguments:
layer_dims -- python array (list) containing the dimensions of each layer in our network
Returns:
parameters -- python dictionary containing your parameters "W1", "b1","W2", "b2":
"""
np.random.seed(1)
parameters = {}
parameters["W1"] = np.random.rand(n_h, n_x) #(7, 12288)
parameters["b1"] = np.random.rand(n_h, 1) #(7)
parameters["W2"] = np.random.rand(n_y, n_h) #(7, 1)
parameters["b2"] = np.random.rand(n_y, 1) #(1)
return parameters
parameters = initialize_parameters_deep(layers_dims)
print(parameters)
输出:
{'W1': array([[4.17022005e-01, 7.20324493e-01, 1.14374817e-04, ...,
3.37562919e-01, 1.12292153e-01, 5.37047221e-01],
[7.07934286e-01, 3.37726007e-01, 7.07954162e-01, ...,
4.22040811e-01, 7.78593215e-01, 3.49866021e-01],
[9.01338451e-01, 7.95132845e-03, 1.03777034e-01, ...,
2.78602449e-01, 5.05813021e-02, 8.26828833e-01],
...,
[5.62717083e-03, 6.58208224e-01, 3.88407263e-01, ...,
5.56312618e-01, 8.69650932e-01, 1.00112287e-01],
[4.16278934e-01, 4.56060621e-01, 9.33378848e-01, ...,
9.52798385e-01, 9.41894584e-01, 4.44342962e-01],
[8.89254832e-01, 6.42558949e-01, 2.29427262e-01, ...,
8.05884494e-01, 1.80676088e-01, 6.12694420e-01]]), 'b1': array([[0.11933315],
[0.50073416],
[0.21336813],
[0.14223935],
[0.60809243],
[0.41994954],
[0.43137737]]), 'W2': array([[0.81360697, 0.44638382, 0.41794085, 0.08649817, 0.29957473,
0.33706742, 0.24721952]]), 'b2': array([[0.92363097]])}
它不会生成大于 1 的浮点数,它只是以不同的方式表示它们。
4.17022005e-01
等同于0.417022005
,1.14374817e-04
等同于0.000114374817
。
W1 数字末尾的 e-01、e-02、e-03 等仅表示数字以指数格式书写。因此,如果您有例如 2.786e-01,它与 (2.786/10) 的写法相同,与 0.2786 相同。同样的事情也适用于:2.786e-03 == (2.786/1000) == 0.002786。 e+2 是 10^2 和 e-2 是 1/(10^2).
注意打印权重参数张量时打印的最后几个字符,例如e-01
。这表示以 10 为底的指数,即意味着给定权重的值是打印的数字 次 10 的给定幂。
所有的幂都是负数,这意味着权重在 [0, 1].
范围内具有较小但 正 值例如,4.17022005e-01
等于 0.417022005。