ошибка при создании моей собственной функции активации - PullRequest
0 голосов
/ 03 октября 2019

Я пытаюсь проверить функцию активации на данных MNIST, но она выдала ошибку:

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.

Вот моя функция активации:

def fun1(x):
    return np.sqrt(x) if x>=0 else (-(np.sqrt(-x)))

, а вот модель:

model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3),  kernel_regularizer=regularizers.l2(w_l2),
             input_shape=input_shape))
model.add(BatchNormalization())
model.add(Activation(fun1))
model.add(Conv2D(64, (3, 3),  kernel_regularizer=regularizers.l2(w_l2)))
model.add(BatchNormalization())
model.add(Activation(fun1))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, kernel_regularizer=regularizers.l2(w_l2)))
model.add(BatchNormalization())
model.add(Activation(fun1))
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()

1 Ответ

0 голосов
/ 03 октября 2019

В пользовательской функции активации x - тензор, поэтому необходимо использовать методы Keras backend вместо numpy. Ваша реализация может быть изменена на что-то вроде этого:

from keras import backend as K
def fun1(x):
    return K.sqrt(K.abs(x))

. Для большего количества примеров посмотрите на определенные активации Keras:

https://github.com/keras-team/keras/blob/master/keras/activations.py

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...