На этом шаге мы рассмотрим простой пример создания модели.
Начнем с чего-нибудь простого - например, воспроизведем последовательность из двух слоев, что была создана на предыдущих шагах. Следующий пример иллюстрирует создание этой модели с помощью функционального API.
from tensorflow import keras from tensorflow.keras import layers inputs = keras.Input(shape=(3,), name="my_input") features = layers.Dense(64, activation="relu")(inputs) outputs = layers.Dense(10, activation="softmax")(features) model = keras.Model(inputs=inputs, outputs=outputs)
Рассмотрим этот процесс шаг за шагом.
Сначала объявляется форма входных данных в виде экземпляра класса Input (обратите внимание, что этим объектам, как и любым другим, тоже можно присваивать имена):
inputs = keras.Input(shape=(3,), name="my_input")
Объект input хранит информацию о форме и типе данных, которые будет обрабатывать модель:
# Модель будет обрабатывать пакеты, в которых каждый образец # имеет форму (3,). Количество образцов в пакете может меняться # (о чем говорит значение None, определяющее размер пакета) print(inputs.shape) # Данные в пакетах имеют тип float32 print(inputs.dtype) (None, 3) float32
Такие объекты называются символическими тензорами. Они не содержат никаких действительных данных, но определяют параметры фактических тензоров, которые модель будет получать на входе. То есть они представляют будущие тензоры данных.
Затем создается слой и при создании ему передается информация о входных данных:
features = layers.Dense(64, activation="relu")(inputs)
Любым слоям Keras могут передаваться тензоры с реальными данными или такие вот символические тензоры. В последнем случае они возвращают новый символический тензор с информацией о форме и типе выходных данных:
print(features.shape)
(None, 64)
После получения информации о выходных данных последнего слоя создается экземпляр модели; при этом конструктору модели передаются сведения о входах и выходах.
outputs = layers.Dense(10, activation="softmax")(features) model = keras.Model(inputs=inputs, outputs=outputs)
Вот сводная информация о получившейся модели:
model.summary() Model: "functional" Layer (type) Output Shape Param # my_input (InputLayer) (None, 3) 0 dense (Dense) (None, 64) 256 dense_1 (Dense) (None, 10) 650 Total params: 906 (3.54 KB) Trainable params: 906 (3.54 KB) Non-trainable params: 0 (0.00 B)
На следующем шаге мы рассмотрим модели с несколькими входами и выходами.