5

在 tensorflow 中,我从教程中了解到,可以使用类似的东西初始化变量 sess.run(tf.global_variables_initializer())

但是我发现每次使用相同的输入数据集运行它时,损失值都以相同的值开始。

我认为这是因为初始化总是设置具有相同值的变量。(可能为零)

我希望随机化权重的值。我已经尝试过搜索,但是如果初始化是使用默认值或随机值完成的,则 tensorflow 文档并没有给出明确的答案。

如何指定初始化以设置随机值?


更新

我的网络首先是一堆 CNN 和池化层,如下所示:``` 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")

```

AFAIK,权重是在这些预定义的层内定义的。如何指定这些层以随机初始化它们的权重变量?

4

2 回答 2

7

您应该提供更多信息。例如,如何在图中初始化变量?为了在神经网络中初始化权重,您必须随机初始化它们(偏差可以全部初始化为零)。因此,您必须使用如下代码通过正确的初始化来定义它们:

# initialize weights randomly from a Gaussian distribution
# step 1: create the initializer for weights
weight_initer = tf.truncated_normal_initializer(mean=0.0, stddev=0.01)
# step 2: create the weight variable with proper initialization
W = tf.get_variable(name="Weight", dtype=tf.float32, shape=[784, 200], initializer=weight_initer)

# initialize biases as zero
# step 1: create the initializer for biases
bias_initer =tf.constant(0., shape=[200], dtype=tf.float32)
# step 2: create the bias variable with proper initialization
b = tf.get_variable(name="Bias", dtype=tf.float32, initializer=bias_initer)
于 2018-05-17T07:03:04.870 回答
1

我遇到了同样的问题,就像您每次都在执行 global_value_initializer() 代码行。例如,您需要做的是,如果您正在使用 jupyter notebook,则在一个单元格中声明会话的那一部分(声明 init),而在另一个单元格中声明其余部分(训练部分)。

此外,当您想在暂停后继续训练模型时,您可能需要保存参数并恢复它们。如何做到这一点,你可以看看这里。如果那不能解决您的问题,请向我展示您正在处理的那部分代码。我也许可以提供更多帮助。



PS:更改优化器时无法恢复参数,据我所知,您必须坚持使用一个。您不能使用一个优化器进行 100 次迭代,然后继续使用具有相同参数的另一个优化器。或者,也许您可​​以尝试一些可能让您这样做的技巧,也请告诉我。

于 2018-05-17T05:37:54.593 回答