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& #34)
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,权重在这些预定义的层内定义。如何指定这些图层以随机初始化它们的权重变量?
答案 0 :(得分:3)
您应该提供更多信息。例如,如何在图表中初始化变量?要在神经网络中初始化权重,必须随机初始化它们(偏差可以初始化为零)。因此,您必须使用类似以下的代码通过正确的初始化来定义它们:
# 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)
答案 1 :(得分:1)
我有同样的问题,就像你每次都在执行global_value_initializer()的代码行一样。你需要做的是,例如,如果你正在使用jupyter笔记本,那么在一个单元格中声明会话的一部分(声明init),将其余部分声明在另一个单元格中(训练部分)。
此外,当您想在暂停后继续训练模型时,您可能希望保存参数并恢复它们。怎么做,你可以看here。如果这不能解决您的问题,那么请告诉我您正在处理的部分代码。我或许可以提供更多帮助。
PS:当您更改优化程序时无法恢复参数,据我所知,您必须坚持使用。您不能使用一个优化器进行100次迭代,并继续使用具有相同参数的另一个优化器。或者也许你可以尝试一些可能让你这样做的黑客,也让我知道。