gpt4 book ai didi

tensorflow - tf.layers.conv2d 和 tf.layers.dense 中的默认内核初始值设定项是什么?

转载 作者:行者123 更新时间:2023-12-03 05:32:31 26 4
gpt4 key购买 nike

官方 Tensorflow API 文档声称,对于 tf.layers.conv2dtf.layers,参数 kernel_initializer 默认为 None .密集.

但是,在阅读图层教程( https://www.tensorflow.org/tutorials/layers )时,我注意到代码中未设置此参数。例如:

# Convolutional Layer #1
conv1 = tf.layers.conv2d(
inputs=input_layer,
filters=32,
kernel_size=[5, 5],
padding="same",
activation=tf.nn.relu)

教程中的示例代码运行时没有任何错误,因此我认为默认的 kernel_initializer 不是 None。那么,使用哪个初始化器?

在另一个代码中,我没有设置 conv2d 和密集层的 kernel_initializer ,一切都很好。但是,当我尝试将 kernel_initializer 设置为 tf.truncated_normal_initializer(stddev=0.1, dtype=tf.float32) 时,出现 NaN 错误。这里发生了什么?有人可以帮忙吗?

最佳答案

问得好!找出来真是一个技巧!

  • 如您所见,它没有记录在 tf.layers.conv2d
  • 如果你看看 the function 的定义您会看到该函数调用 variable_scope.get_variable:

在代码中:

self.kernel = vs.get_variable('kernel',
shape=kernel_shape,
initializer=self.kernel_initializer,
regularizer=self.kernel_regularizer,
trainable=True,
dtype=self.dtype)

下一步:what does the variable scope do when the initializer is None?

这里说:

If initializer is None (the default), the default initializer passed in the constructor is used. If that one is None too, we use a new glorot_uniform_initializer.

所以答案是:它使用 glorot_uniform_initializer

为了完整起见,此初始值设定项的定义:

The Glorot uniform initializer, also called Xavier uniform initializer. It draws samples from a uniform distribution within [-limit, limit] where limit is sqrt(6 / (fan_in + fan_out)) where fan_in is the number of input units in the weight tensor and fan_out is the number of output units in the weight tensor. Reference: http://jmlr.org/proceedings/papers/v9/glorot10a/glorot10a.pdf

编辑:这是我在代码和文档中找到的内容。也许您可以通过对权重运行 eval 来验证初始化是否像这样!

关于tensorflow - tf.layers.conv2d 和 tf.layers.dense 中的默认内核初始值设定项是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43284047/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com