Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用tf.layer.conv正确使用-激活和活动\u正则化器_Python_Python 3.x_Tensorflow - Fatal编程技术网

Python 使用tf.layer.conv正确使用-激活和活动\u正则化器

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

在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:

似乎“工作”(至少运行),但:

          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, ...)