我正在尝试从头开始构建一个神经网络,我在初始化权重矩阵时遇到了一些麻烦。我希望连接不同层的权重随机地以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之间产生双打。
答案 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)
根据documentation,np.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]])