tf.layers.conv2d和tf.layers.dense中的默认内核初始化程序是什么?


75

Tensorflow API官方文档声称该参数kernel_initializer默认为Nonefortf.layers.conv2dtf.layers.dense

但是,在阅读图层教程(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值为not None。那么,使用哪个初始化器?

在另一个代码中,我没有设置kernel_initializerconv2d和密集层的,一切都很好。然而,当我试图设置kernel_initializertf.truncated_normal_initializer(stddev=0.1, dtype=tf.float32),我得到NaN的错误。这里发生了什么?有人可以帮忙吗?


也许NaN有不同的原因?我正在使用kernel_initializer = tf.truncated_normal_initializer(stddev = 0.001,dtype = tf.float32),它可以按预期工作。
JirkaV

Answers:


105

好问题!找出它是一个绝招!

  • 如您所见,它没有记录在 tf.layers.conv2d
  • 如果查看函数的定义,您会看到该函数调用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)

下一步:当初始值设定项为None时,变量作用域会做什么?

它说:

如果initializer为None(默认值),则使用构造函数中传递的默认初始化程序。如果None也是,则使用new glorot_uniform_initializer

答案是:它使用 glorot_uniform_initializer

为了完整起见,此初始化程序的定义:

Glorot统一初始化器,也称为Xavier统一初始化器。它从[-极限,极限]内的均匀分布中抽取样本,其中limitsqrt(6 / (fan_in + fan_out)) 其中fan_in是权重张量中的输入单位数,而是权重张量中fan_out的输出单位数。参考:http//jmlr.org/proceedings/papers/v9/glorot10a/glorot10a.pdf

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


1
我有同样的问题。根据张量板上的内核图,似乎内核是从某种均匀分布中初始化的。
EXP0

2

根据Andrew Ng和Xavier文档的课程,如果您使用ReLU作为激活函数,则最好通过以下方式将默认的权重初始值设定项(即Xavier统一)更改为Xavier normal

y = tf.layers.conv2d(x, kernel_initializer=tf.contrib.layers.xavier_initializer(uniform=False), )

2
keras.initializers.glorot_normal(seed=None)或仅 在喀拉拉邦kernel_initializer= 'glorot_normal'里面Conv2D
bit_scientist 19/12/10


0

在CNN中,内核值是随机初始化的。然后将在反向传播期间重新调整值,以产生更好的边缘检测(!)内核。看到这个

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.