在TensorFlow中,我从教程中学到,可以通过以下方式初始化变量:
我认为这是由于初始化始终将变量设置为相同的值(可能是0)。
我希望权重的值是随机的。我尝试搜索这个问题,但TensorFlow文档没有明确回答默认情况下是使用零值还是随机值进行初始化。
如何指定随机值进行初始化?
更新:
我的网络首先是一堆卷积层和池化层,像下面这样:
``` conv1 = tf.layers.conv2d(inputs=input_layer, filters=32, kernel_size=[3,3], padding="same", activation=tf.nn.relu, name="conv_chad_1") ```
sess.run(tf.global_variables_initializer())
但我发现,每次使用相同的输入数据集运行时,损失值始终以相同的值开始。我认为这是由于初始化始终将变量设置为相同的值(可能是0)。
我希望权重的值是随机的。我尝试搜索这个问题,但TensorFlow文档没有明确回答默认情况下是使用零值还是随机值进行初始化。
如何指定随机值进行初始化?
更新:
我的网络首先是一堆卷积层和池化层,像下面这样:
``` conv1 = tf.layers.conv2d(inputs=input_layer, filters=32, kernel_size=[3,3], padding="same", activation=tf.nn.relu, name="conv_chad_1") ```
pool1 = tf.layers.max_pooling2d(inputs=conv1,pool_size=[2,2],strides=2)
conv2 = tf.layers.conv2d(inputs=pool1, filters=64, kernel_size=[3,3], padding="same", activation=tf.nn.relu, name="conv_chad_2")
pool2 = tf.layers.max_pooling2d(inputs=conv2,pool_size=[2,2],strides=2, name="pool_chad_2")
据我所知,这些预定义层内已经定义了权重。我该如何指定这些层以随机初始化其权重变量?
conv2=tf.layers.conv2d(inputs=pool1, filters=64, kernel_size=[3,3], kernel_initializer=tf.contrib.layers.xavier_initializer(), bias_initializer=tf.zeros_initializer(), padding="same", activation=tf.nn.relu, name="conv_chad_2")
。这将使用方差与其输出相关的高斯分布随机初始化权重(Xavier方法),并将偏置项初始化为零。 - Ary