使用tf.layer.conv的正确用法-激活和activity_regularizer

时间:2018-10-23 23:20:30

标签: python python-3.x tensorflow

在tensorflow的tf.layer.conv1d网页https://www.tensorflow.org/api_docs/python/tf/layers/conv1d中,它们提供了为模型设置“激活”和“ activity_regularizer”的选项。我已经建立了一个模型,所以如果我可以设置activity_regularizer = tf.layer.batch_normalization(training = True)或activation = tf.nn.leaky_relu(alpha = 0.001)会很好,但是,如果我尝试要将任何输入放入tf.layer.batch_normalization或tf.nn.leaky_relu中,它们会给出错误,提示缺少参数(前者为“ inputs”,后者为“ features”)。

TLDR:

          conv1 = tf.layers.conv1d(inputs=_inputs, filters=6, kernel_size=4, strides=1,
                                  padding='same', activation=tf.nn.leaky_relu, activity_regularizer = tf.layers.batch_normalization)

似乎“起作用”(至少运行),但这是

          conv1 = tf.layers.conv1d(inputs=_inputs, filters=6, kernel_size=4, strides=1,
                                  padding='same', activation=tf.nn.leaky_relu(alpha = 0.001), activity_regularizer = tf.layers.batch_normalization(training = True, trainable = True))

说缺少激活和activity_regularizer的参数。

我可能在使用激活和activity_regularizer时完全错误,请随时纠正我。我希望对此有一个简单的解决方法,否则对我来说,唯一的选择是编写额外的代码行,以将激活和批处理规范化与conv1d分开。虽然,如果我无法更改其参数,则看不到具有内置的tf.layers.conv1d激活和activity_regularizer的目的。

最后一点:我特别担心tf.layer.batch_normalization,因为我假设将其设置为默认的training = False和trainable = True,这在“工作”的代码块中并不总是如此。

1 个答案:

答案 0 :(得分:2)

activation的参数应该是一个使用张量并返回张量的函数。 tf.nn.leaky_relu是这样的功能。

tf.nn.leaky_relu(alpha = 0.001)是无效的Python。您没有指定唯一必需的参数features。 Python不知道如何在没有必需参数的情况下运行函数。您想要的是这样的:

def my_relu(features):
    return tf.nn.leaky_relu(features, alpha=0.001)

tf.layers.conv1d(..., activation=my_relu, ...)

activity_regularizer的参数是一个函数,用于获取图层的活动(即输出)并为其计算罚金。通常,您对大型激活会给予高额罚款。此函数应输出标量。我不知道为什么activity_regularizer = tf.layers.batch_normalization不会抱怨,但可能没有达到您的期望。典型的正则化器是l1l2规范(请参阅https://keras.io/regularizers/)。批量标准化是一个层,而不是一个正则化器。