python - 选择小于给定标准差的随机正态值

标签 python tensorflow neural-network

为了初始化 tensorflow 神经网络中的权重,我从 tf.random_normal() 开始。我正在寻找零附近的正态分布。为了消除过大的初始权重,我切换到 tf.truncated_normal() 。由于 -2.0 和 +2.0 仍然太大,我移至 tf.truncated_normal(stddev=0.1) ,解决初始权重过大的问题。

但是,我还想消除太小的值(即太接近零)。换句话说,除了重新选择所有权重 <-0.2 或 >+0.2 之外,我还想重新选择所有权重,例如 -0.02 和 +0.02 之间的权重。有没有办法在暴力之外做到这一点while环形?换句话说,是否存在“逆”tf.truncated_normal()

附注我的思考原因来自于一条talk with Ilya Sutskever第27分钟后他在其中讨论了太大或太小的随机初始化如何阻止网络学习。

最佳答案

您可以通过将 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)

或者,您可以在 initialize_all_variables() 之前通过其 initialized_value() 函数操作 tensorflow 张量,并从中创建一个张量。

weight_1 = tf.Variable(tf.random_normal([256, 64], stddev=0.35),
                       name="weight_1")
# code below will give you the weight_1 * 2
weights = tf.Variable(weight_1.initialized_value() * 2.0)

你可以通过某种方式计算出你需要的值,但 numpy 方式似乎更容易。

而且你正在做的事情看起来很像 xavier initialization ,您可以按如下方式使用;

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

关于python - 选择小于给定标准差的随机正态值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42638373/

相关文章:

python - 沿极坐标系的图像信息

python - tensorflow 中嵌入层的输出是什么?GlobalAveragePooling1D 的作用是什么?

python - 如何将急切执行中的模型转换为静态图并保存在 .pb 文件中?

android - 保存和使用 TensorForestEstimator for Android 模型时出错

machine-learning - 具有指数衰减的神经网络输入

python - 异或神经网络,损失不下降

python - 使用 pyocr(tesseract) 在网格上检测字母

python - 如何在python中分离指数函数

python - 无法在 Windows 上安装 lxml, fatal error C1083 : Cannot open include file: 'libxml/xmlversion.h'

python - Keras 自定义损失函数内的 TensorFlow session