Machine learning 如何在tensorflow中使用tf.nn.crelu?

Machine learning 如何在tensorflow中使用tf.nn.crelu?,machine-learning,tensorflow,computer-vision,activation-function,Machine Learning,Tensorflow,Computer Vision,Activation Function,我正在我的简单神经网络中尝试不同的激活函数 使用tf.nn.relu,tf.nn.sigmoid,。。。网络做它应该做的事 但是如果我使用的是tf.nn.crelu,那么我就有一个维度错误 它返回类似于[max,min]的值,并且宽度维度要大两倍。 我该怎么办?将以下权重和偏差拟合到crelu的输出?没错,如果您是手动构建网络,则需要调整以下层的尺寸以匹配tf.nn.crelu输出。从这个意义上说,tf.nn.crelu不能与tf.nn.relu,tf.nn.elu等互换 如果使用高级API,情

我正在我的简单神经网络中尝试不同的激活函数

使用
tf.nn.relu
tf.nn.sigmoid
,。。。网络做它应该做的事

但是如果我使用的是
tf.nn.crelu
,那么我就有一个维度错误

它返回类似于
[max,min]
的值,并且宽度维度要大两倍。
我该怎么办?将以下权重和偏差拟合到
crelu
的输出?

没错,如果您是手动构建网络,则需要调整以下层的尺寸以匹配
tf.nn.crelu
输出。从这个意义上说,
tf.nn.crelu
不能与
tf.nn.relu
tf.nn.elu
等互换

如果使用高级API,情况会更简单,例如。在这种情况下,层函数负责匹配维度,因此您可以在代码中轻松地将
tf.nn.relu
替换为
tf.nn.crelu
。然而,请记住,网络正在悄悄地变大一倍

下面是一个例子:

具有slim.arg_作用域([slim.conv2d,slim.fully_connected],
激活\u fn=tf.nn.crelu,
规格化器\u fn=slim.batch\u norm,
规范化器_参数={'is_training':is_training,'decause':0.95}):
conv1=slim.conv2d(x_图像,16[5,5],scope='conv1')
pool1=slim.max_pool2d(conv1[2,2],scope='pool1')
conv2=slim.conv2d(pool1,32[5,5],scope='conv2')
pool2=slim.max_pool2d(conv2[2,2],scope='pool2')
展平=苗条。展平(池2)
fc=slim.完全连接(平坦,1024,范围='fc1')
下降=苗条。下降(fc,保持概率=保持概率)
logits=slim.完全连接(drop,10,激活\u fn=None,scope='logits')

slim.arg\u scope
仅将提供的所有参数应用于底层,特别是
激活\u fn
。还要注意最后一层中的
activation\u fn=None
,以固定输出维度。完整的代码可以是。

CReLu将仅选择激活的正部分的ReLU与仅选择激活的负部分的ReLU连接起来。请注意,因此,这种非线性使激活深度加倍。你可以在这里读更多。是的,这就是它的功能。但是如何使用它呢?你能检查一下下面的链接吗?它包含一个示例实现(使用chainer的crelu,但它与tensorflow非常相似/相同)