python - 尝试制作我自己的激活函数
问题描述
我正在尝试制作我自己的激活函数,当 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.
解决方案
问题在于表达式if y<0
。 y<0
是一个布尔向量;if
需要一个标量参数。您要做的是过滤类型的操作;你不能用这种简单的语法来做到这一点。相反,您需要将其y<0
用作张量,并相应地调整您的表达式。@Marat 已经为您提供了一种可能性(尽管在一侧或另一侧缺少“等于”子句)。
推荐阅读
- qt - 鼠标悬停事件在 TableView 的标题中不起作用
- flutter - 英雄小部件多次初始化子小部件
- pgadmin-4 - pgadmin4 无法正确显示
- ios - 如何使用单个自定义单元格用两个数组填充表格视图?
- angular - Angular:根据条件设置按钮文本
- php - Python中的wget无法下载我想要的文件
- javascript - 如何在电子应用弹出浏览器窗口中启用远程网页的 javascript
- xcode - 在 Xcode 上构建存档时如何修复找不到头文件?
- azure - passport-azure-ad / msal.js 和动态范围
- javascript - 我得到每个按钮的相同值