在特定范围之间生成随机双精度数

时间:2018-03-28 22:28:03

标签: python numpy machine-learning neural-network

我正在尝试从头开始构建一个神经网络,我在初始化权重矩阵时遇到了一些麻烦。我希望连接不同层的权重随机地以0为中心(即范围从-0.5到0.5)。我试过了

weights = np.random.rand(input_size, output_size) #input_size = # neurons in input layer, output_size = # neurons in output layer

但我认为只会在0到1之间产生双打。

3 个答案:

答案 0 :(得分:2)

从中减去0.5

weights = np.random.rand(input_size, output_size) - 0.5

瞧!

修改 要生成任意范围(例如3到7之间)之间的数字,您可以这样做:

min = 3
max = 7
weights = np.random.rand(input_size, output_size) * (max - min) + min

或者像这样

weights = np.random.uniform(min, max, (input_size, output_size))

答案 1 :(得分:1)

根据documentationnp.random.rand生成“来自[0, 1)上的统一分布的随机样本”。你只需要从数组中减去0.5:

weights = np.random.rand(input_size, output_size) - 0.5

您可能还想生成具有不同分布的随机样本。许多发行版已经可用:documentation

答案 2 :(得分:0)

您可以使用np.random.uniform

>>> np.random.uniform(-0.5, 0.5, (2, 5))
array([[-0.22340556, -0.23382758, -0.30258041,  0.37783351,  0.27951709],
       [ 0.03336927,  0.41955043,  0.17132952,  0.29960474,  0.04237655]])