#python #tensorflow #keras #tensorflow2.0 #tf.keras
#python #тензорный поток #keras #tensorflow2.0 #tf.keras
Вопрос:
Я работаю над поддержкой автоматического обнаружения / регистрации моделей для моделей Keras / Tensorflow для нашей платформы машинного обучения https://iko.ai и у меня есть несколько вопросов:
-
Какими различными способами мы можем определить модель tf / keras?
tf.keras.Model
tf.Estimator
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) проигнорируйте этот вопрос, ответьте на другойВопрос