Множественные функции активации с эстиматором DNNClassifier в TensorFlow

Вопрос или проблема

Я просто хочу узнать, возможно ли использовать tf.estimator.DNNClassifier с несколькими разными функциями активации. Я имею в виду, могу ли я использовать оценщик DNNClassifier, который использует разные функции активации для разных слоев?

Например, если у меня есть модель из трех слоев, могу ли я использовать для первого слоя функцию sigmoid, для второго – функцию ReLu, а для последнего – функцию tanh?

Мне хотелось бы знать, если это невозможно сделать с DNNClassifier, как я могу сделать это простым способом.

Итак, это очень старый вопрос, но для всех, кто пришел из Google:

Согласно документации, предоставленной TensorFlow, у tf.estimator.DNNClassifier есть параметр activation_fn, который описывается как:

Функция активации, применяемая к каждому слою. Если None, будет использоваться tf.nn.relu

Таким образом, эта модель принимает только одну функцию активации и использует ее на всех слоях. Тем не менее, TensorFlow отмечает:

Предупреждение: оценщики не рекомендуются для нового кода. Оценщики запускают код в стиле v1.Session, который сложнее правильно писать и может вести себя неожиданно, особенно в сочетании с кодом TF 2. Оценщики подпадают под наши гарантии совместимости, но не получат исправлений, кроме устранения уязвимостей безопасности. См. руководство по миграции для подробностей.

Поэтому, чтобы решить эту проблему и быть совместимым с рекомендациями TensorFlow, можно использовать keras для создания желаемого DNN слой за слоем. Как показано в примере здесь:

import tensorflow as tf

inputs = tf.keras.Input(shape=(3,))
x = tf.keras.layers.Dense(4, activation=tf.nn.relu)(inputs)
outputs = tf.keras.layers.Dense(5, activation=tf.nn.softmax)(x)
model = tf.keras.Model(inputs=inputs, outputs=outputs)

Функцию активации для каждого слоя можно указать при создании каждого слоя. Для получения дополнительной информации о keras.layers см. здесь.

Ответ или решение

Да, вы правы касательно функционала tf.estimator.DNNClassifier. К сожалению, данный класс не поддерживает использование различных активационных функций для разных слоев. Параметр activation_fn, который имеется в DNNClassifier, принимает лишь одно значение активационной функции, которая будет применяться ко всем слоям сети. По умолчанию используется tf.nn.relu, и если вы не укажете другую функцию, она будет использоваться во всех слоях модели.

В связи с тем, что TensorFlow на сегодняшний день рекомендует использовать Keras для новых проектов, вам будет проще и удобнее построить модель с различными активационными функциями с использованием API Keras. Основным преимуществом Keras является то, что вы можете задавать активационную функцию отдельно для каждого слоя.

Вот пример, который иллюстрирует, как можно создать DNN с использованием различных активационных функций для каждого слоя с помощью Keras:

import tensorflow as tf

# Определяем входные данные
inputs = tf.keras.Input(shape=(3,))

# Первый слой с активацией sigmoid
x = tf.keras.layers.Dense(4, activation='sigmoid')(inputs)

# Второй слой с активацией ReLU
x = tf.keras.layers.Dense(5, activation='relu')(x)

# Третий слой с активацией tanh
outputs = tf.keras.layers.Dense(2, activation='tanh')(x)

# Создание модели
model = tf.keras.Model(inputs=inputs, outputs=outputs)

# Компилируем модель
model.compile(optimizer='adam', loss='mean_squared_error')

# Выводим информацию о модели
model.summary()

В этом примере мы создаем модель с тремя полносвязными слоями, каждый из которых имеет свою активационную функцию: первый слой использует sigmoid, второй — ReLU, а третий — tanh. Вы можете легко изменять количество нейронов и функции активации, а также добавлять дополнительные слои, по вашему усмотрению.

Таким образом, использование Keras предоставляет гораздо больше гибкости и удобства для построения нейронных сетей с различными активационными функциями.

Оцените материал
Добавить комментарий

Капча загружается...