首页 > 解决方案 > 尝试制作我自己的激活函数

问题描述

我正在尝试制作我自己的激活函数,当 x<0 时为 f(X) = 2/pi * arctan(x),当 x >=0 时为 x/1+abs(x) 我试图在 keras 中做到这一点并且我使用了这段代码:

from keras import backend as k
def fun8(y):
    return ((2/k.pi) * k.atan2(y)) if y<0 else (y/1+k.abs(y))

我在我的模型中使用了它:

model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3), kernel_regularizer=regularizers.l2(w_l2),
             input_shape=input_shape, kernel_initializer='he_normal'))
model.add(BatchNormalization())
model.add(Activation(fun8))
 model.add(Conv2D(64, (3, 3), kernel_regularizer=regularizers.l2(w_l2), 
kernel_initializer='he_normal'))
model.add(BatchNormalization())
model.add(Activation(fun8))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, kernel_regularizer=regularizers.l2(w_l2), kernel_initializer='he_normal'))
model.add(BatchNormalization())
model.add(Activation(fun8))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))



model.compile(loss=keras.losses.categorical_crossentropy,
          optimizer=keras.optimizers.Adam(),
          metrics=['accuracy'])

model.summary()

它给了我这个错误:

TypeError: Using a `tf.Tensor` as a Python `bool` is not allowed. Use `if t is not None:` instead of `if t:` to test if a tensor is defined, and use TensorFlow ops such as tf.cond to execute subgraphs conditioned on the value of a tensor.

标签: pythonkerasdeep-learning

解决方案


问题在于表达式if y<0y<0是一个布尔向量;if需要一个标量参数。您要做的是过滤类型的操作;你不能用这种简单的语法来做到这一点。相反,您需要将其y<0 用作张量,并相应地调整您的表达式。@Marat 已经为您提供了一种可能性(尽管在一侧或另一侧缺少“等于”子句)。


推荐阅读