Python 使用tf.layer.conv正确使用-激活和活动\u正则化器
在tensorflow的tf.layer.conv1d网页中,它们提供了为您的模型设置“激活”和“活动\正则化器”的选项。我已经建立了一个模型,所以如果我可以设置activity\u regularizer=tf.layer.batch\u normalization(training=True)或activation=tf.nn.leaky\u relu(alpha=0.001),那就太好了。但是,如果我尝试将任何输入放入tf.layer.batch\u normalization或tf.nn.leaky\u relu,它们会给出错误,说缺少参数(“输入”前者为“特征”,后者为“特征”) TLDR: 似乎“工作”(至少运行),但:Python 使用tf.layer.conv正确使用-激活和活动\u正则化器,python,python-3.x,tensorflow,Python,Python 3.x,Tensorflow,在tensorflow的tf.layer.conv1d网页中,它们提供了为您的模型设置“激活”和“活动\正则化器”的选项。我已经建立了一个模型,所以如果我可以设置activity\u regularizer=tf.layer.batch\u normalization(training=True)或activation=tf.nn.leaky\u relu(alpha=0.001),那就太好了。但是,如果我尝试将任何输入放入tf.layer.batch\u normalization或tf.nn
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))
表示缺少激活和活动正则化的参数
我可能完全错误地使用了激活和活动正则化,所以请随时纠正我。我希望有一个简单的解决办法,否则我唯一的选择就是编写额外的代码行,将激活和批处理规范化与conv1d分开。尽管如此,如果我不能更改它们的参数,我看不到在tf.layers.conv1d中内置激活和活动正则化器的目的
最后一点:我特别担心tf.layer.batch_规范化,因为我假设它设置为默认的training=False和trainable=True,这在“工作”的代码块中并不总是如此。激活的参数应该是一个取张量并返回张量的函数
tf.nn.leaky_relu
就是这样一个函数
tf.nn.leaky_relu(alpha=0.001)
无效。您没有指定唯一必需的参数功能
。Python不知道如何在没有必需参数的情况下运行函数。你想要的是这样的:
def my_relu(features):
return tf.nn.leaky_relu(features, alpha=0.001)
tf.layers.conv1d(..., activation=my_relu, ...)
activity\u regularizer
的参数是一个函数,用于获取层的活动(即输出)并计算惩罚。通常情况下,对于大型激活,您会给予很高的惩罚。此函数应输出标量。我不知道为什么activity\u regularizer=tf.layers.batch\u normalization
没有抱怨,但它可能没有达到您的预期。典型的正则化器是l1
和l2
规范(请参阅)。批处理规范化是一个层,而不是正则化器。谢谢,这是我仔细考虑后所期待的答案。只是我读到批量规范化可以作为正则化器,所以我想我有点太有希望了。
def my_relu(features):
return tf.nn.leaky_relu(features, alpha=0.001)
tf.layers.conv1d(..., activation=my_relu, ...)