Добавить пользовательскую функцию активации для использования со строкой

Я следил за этим ответом, делая:

get_custom_objects().update(act_dispatcher)

Где act_dispatcher — это словарь со всеми функциями активации, которые я хочу добавить, например {'fun_1':fun_1, 'fun_2': fun_2}.

Первое, что привлекло мое внимание, это то, что в начале, если я ничего не добавляю, get_custom_objects() возвращает пустой диктофон {}. После добавления функции я проверяю, что каждый вызов get_custom_objects() имеет то, что я сказал.

Тем не менее, я получаю ValueError: Unknown activation function:<my_fun>

я добавил строку

assert 'my_func', in get_custom_objects().keys()

tf.keras.layers.Dense(128, activation='my_func')

И утверждение проходит без проблем с ошибкой, упомянутой при инициализации keras Dense.


Ошибка возникает в deserialize_keras_object где:

  • custom_objects это None
  • _GLOBAL_CUSTOM_OBJECTS равно {} (Возможно, это поле не должно быть пустым).
  • module_objects.get(object_name) возвращает None (швы module_objects правильные).

Монтаж

Я использую среду анаконды. Из-за ошибки, которая у меня была сначала с from keras.utils.generic_utils import get_custom_objects, я установил keras-applications с conda install -c conda-forge keras-applications

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
866
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я могу запустить этот код без каких-либо ошибок, вы можете попробовать изменить from tensorflow.keras.utils.generic_utils import get_custom_objects на from tensorflow.keras.utils import get_custom_objects, посмотрите, поможет ли это:

from tensorflow.keras import backend as K
from tensorflow.keras.utils import get_custom_objects
from tensorflow.keras.layers import Activation, Conv2D
from tensorflow.keras.models import Sequential

def my_func(x, beta=1.0):
    return x * K.sigmoid(beta * x)

model = Sequential()
model.add(Conv2D(64, (3, 3)))
model.add(Activation(my_func))

get_custom_objects().update({'my_func': Activation(my_func)})

model.add(Conv2D(64, (3, 3), activation='my_func'))

Итак, я добавил конструктор активации, как вы сказали, но все равно ничего. После его добавления я получаю этот вывод для print(get_custom_objects()): {'my_fun': <tensorflow.python.keras.layers.core.Activation object at 0x7fbc3c24b6d0>}

J Agustin Barrachina 15.12.2020 10:15

@AgustinBarrachina, как вы использовали свою пользовательскую функцию активации? это как model.add(my_fun) или как model.add(Conv2D(64, (3, 3), activation='my_fun')) ? какую ошибку вы получили? также как выглядит ваша пользовательская функция?

Mr. For Example 15.12.2020 10:19
model = tf.keras.Sequential([tf.keras.Input(shape), tf.keras.layers.Flatten, tf.keras.layers.Dense(128, activation='my_fun')])
J Agustin Barrachina 15.12.2020 10:22

Добавил информацию об ошибке, так же зашел в место Tensorflow где возникает ошибка.

J Agustin Barrachina 15.12.2020 10:23

@AgustinBarrachina Я редактирую ответ, дайте мне знать, полезно это или нет

Mr. For Example 15.12.2020 10:37

Хорошо, получил ошибку, я использовал keras.utils вместо tensorflow.keras.utils!!! Так неуклюже с моей стороны и невозможно отладить, потому что я не добавил импорт. Спасибо. Я оставлю вопрос, потому что это может помочь кому-то. Отмечено как решение.

J Agustin Barrachina 15.12.2020 10:42

Ага, я тоже заморочился около минуты, без проблем, рад помочь :)

Mr. For Example 15.12.2020 10:45

Другие вопросы по теме