Как автоматически обнаруживать объекты модели tf / keras

#python #tensorflow #keras #tensorflow2.0 #tf.keras

#python #тензорный поток #keras #tensorflow2.0 #tf.keras

Вопрос:

Я работаю над поддержкой автоматического обнаружения / регистрации моделей для моделей Keras / Tensorflow для нашей платформы машинного обучения https://iko.ai и у меня есть несколько вопросов:

  • Какими различными способами мы можем определить модель tf / keras?

    1. tf.keras.Model
    2. tf.Estimator
    3. tensorflow_estimator
  • Любые другие способы, о которых я не знаю? Почему существует так много способов сделать одно и то же?

  • Каковы надлежащие функции для их сохранения / загрузки?

  • Как мы могли бы отличить экземпляры модели TF / Keras от других немодельных объектов? Я хочу иметь возможность написать функцию, которая проверяет, является ли объект моделью TF / Keras, что-то вроде

 def is_tf_or_keras_model(obj):
    # check somehow if the obj is a TF/Keras model
    pass
  

Ответ №1:

Что касается вопросов 1 и 2:

Другим способом представления модели нейронной сети является использование tf.keras.Sequential . Это позволяет вам легко создавать модель, которая следует последовательной структуре, например:

 import tensorflow as tf
# tf.__version__ == 2.4

model_seq = tf.keras.Sequential()
model_seq.add(tf.keras.Input(shape=(64,1)))
model_seq.add(tf.keras.layers.Conv1D(32, 2, activation='relu'))
model_seq.add(tf.keras.layers.Dense(16, activation='relu'))
model_seq.add(tf.keras.layers.Dense(4, activation='softmax'))
  

Это то же самое, что и при использовании tf.keras функционального API. Это позволяет создавать более сложные сети, которые не следуют последовательной структуре, но, конечно, вы все равно можете создавать последовательные модели:

 i = tf.keras.Input(shape=(64,1))
x = tf.keras.layers.Conv1D(32, 2, activation='relu')(i)
x = tf.keras.layers.Dense(16, activation='relu')(x)
x = tf.keras.layers.Dense(4, activation='softmax')(x)
model_func = tf.keras.Model(inputs=i, outputs=x)
  

tf.estimator.Estimator используется для обучения готовых сетей, поэтому вам нужно только определить некоторые значения гиперпараметров и подготовить готовую модель.

В заключение, метод, используемый для построения модели, зависит от того, насколько сложной / одноранговой является сеть.

Что касается вопроса 3:

Реализация tf.keras позволяет либо сохранять веса модели ( model.save_weights ), либо сохранять всю модель ( model.save ). Чтобы впоследствии загрузить веса модели, вам нужно сначала создать модель, следуя той же структуре модели, которая использовалась для обучения этих весов.

Что касается вопроса 4:

 model_classes = [tf.keras.Model, keras.Model, tf.estimator.Estimator]

def is_keras_or_tf_model(obj, model_classes):
    return isinstance(obj, model_clases)
  

Все, что я сказал здесь, находится в документации TensorFlow .

Комментарии:

1. Это отличный ответ: он включает пояснения, код и ссылки на документацию. Однако сам вопрос не соответствует рекомендациям SO (StackOverflow.com/help ). Он задает слишком много вопросов и в основном запрашивает руководство, а не фокусируется на конкретной проблеме кодирования с точным ответом. Итак, в этом случае правильные ответы будут включать: 1) оставьте комментарий к OP, указав, как он мог бы привести вопрос в соответствие 2) отметьте вопрос для закрытия как не соответствующий рекомендациям 3) оставьте свои ссылки на answer amp; doc в качестве комментария 4) проигнорируйте этот вопрос, ответьте на другойВопрос