На этом шаге мы рассмотрим построение такой модели.
В отличие от этой простой модели большинство моделей глубокого обучения не похожи на списки и скорее напоминают графы. Например, они могут иметь несколько входов или несколько выходов. Именно благодаря таким моделям функциональный API предстает во всем блеске.
Представьте, что вы создаете систему для ранжирования заявок в службу поддержки клиентов по важности и для распределения между соответствующими отделами. Ваша модель имеет три входа:
Входные текстовые данные можно закодировать в виде массивов нулей и единиц с размерами vocabulary_size (мы рассмотрим методы кодирования текста позже).
Модель также имеет два выхода:
С помощью функционального API данную модель можно построить несколькими строками кода
from tensorflow import keras from tensorflow.keras import layers vocabulary_size = 10000 num_tags = 100 num_departments = 4 title = keras.Input(shape=(vocabulary_size,), name="title") # Определение входов модели text_body = keras.Input(shape=(vocabulary_size,), name="text_body") tags = keras.Input(shape=(num_tags,), name="tags") # Объединение входных признаков в один тензор features features = layers.Concatenate()([title, text_body, tags]) # Добавление промежуточного слоя для рекомбинации # входных признаков в более богатые представления features = layers.Dense(64, activation="relu")(features) # Определение выходов модели priority = layers.Dense(1, activation="sigmoid", name="priority")(features) department = layers.Dense( num_departments, activation="softmax", name="department")(features) # Создание модели с передачей ей # информации о входах и выходах model = keras.Model(inputs=[title, text_body, tags], outputs=[priority, department])
Функциональный API - это простой, как конструктор лего, но очень гибкий способ определения произвольных графов слоев, подобных этому.
На следующем шаге мы рассмотрим обучение модели с несколькими входами и выходами.