Python 重新选择小于给定标准偏差的随机正常值

Python 重新选择小于给定标准偏差的随机正常值,python,tensorflow,neural-network,Python,Tensorflow,Neural Network,为了初始化tensorflow神经网络中的权重,我从tf.random\u normal()开始。正态分布在零附近是我想要的。为了消除过大的初始权重,我切换到tf.truncated\u normal()。由于-2.0和+2.0仍然太大,我转到了tf.truncated_normal(stddev=0.1),解决了初始权重太大的问题 但是,我也希望消除太小(即太接近零)的值。换句话说,除了重新拾取所有权重+0.2之外,我还希望重新拾取所有介于-0.02和+0.02之间的权重。有没有办法在强力wh

为了初始化tensorflow神经网络中的权重,我从
tf.random\u normal()
开始。正态分布在零附近是我想要的。为了消除过大的初始权重,我切换到
tf.truncated\u normal()
。由于-2.0和+2.0仍然太大,我转到了
tf.truncated_normal(stddev=0.1)
,解决了初始权重太大的问题

但是,我也希望消除太小(即太接近零)的值。换句话说,除了重新拾取所有权重+0.2之外,我还希望重新拾取所有介于-0.02和+0.02之间的权重。有没有办法在强力
while
循环之外做到这一点?换句话说,是否存在一个“逆”
tf.truncated_normal()


另一方面,我思考的原因来自于第27分钟的讨论,他讨论了太大或太小的随机初始化如何阻止网络学习。

您可以通过将numpy数组输入numpy数组,从numpy数组创建一个
tf.constant()
变量

# Create a np.array however you want, manipulate and feed
weight_1 = np.random.normal(scale=0.1, size=(256, 64))
weight_1[weight_1 < 0] = weight_1[weight_1 < 0] - 0.01
weight_1[weight_1 > 0] = weight_1[weight_1 > 0] + 0.01
w = tf.constant(weight_1)
你们可以用数学的方法计算出你们需要的价值观,但numpy方法似乎更容易

另外,你正在做的事情看起来很像,你可以如下使用:

weight_1 = tf.get_variable('weight_1', shape=(256, 100),
                initializer=tf.contrib.layers.xavier_initializer())

np.random.randint()
接受整数参数,因此
np.random.randint(0.01,0.02,size=(256,64))
返回零。我认为您需要的是
np.random.randint(100200,size=(10,10))/1000
,但这些值不是正态分布的。
tf.变量(weight\u 1.initialized\u value()*2.0)
只会增加权重的标准偏差;它不会消除小的值。我听说过Xavier初始化。我会调查的。谢谢。是的,我的意思是说
numpy.random.normal
,然后在上面做一些聪明的数学运算,得到你想要的值。但是我的大脑今天不工作了,所以我就这样离开了。randint和浮点数,是的,只是大脑放屁,会解决的,谢谢。我知道你用
weight\u 1[weight\u 1<0]=weight\u 1[weight\u 1<0]-0.01做了什么。聪明。这不完全是我所要求的,但是非常接近,所以+1。给出了一个很好的解释,所以我想这就是我想要的。我运行了你的代码,看起来不错,但我还不确定。请允许我反省一下。非常感谢。
weight_1 = tf.get_variable('weight_1', shape=(256, 100),
                initializer=tf.contrib.layers.xavier_initializer())