在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,这在“工作”的代码块中并不总是如此。
答案 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
不会抱怨,但可能没有达到您的期望。典型的正则化器是l1
和l2
规范(请参阅https://keras.io/regularizers/)。批量标准化是一个层,而不是一个正则化器。