Шаг 183.
Глубокое обучение на Python. ... . Разные способы создания моделей Keras. Функциональный API. Обучение модели с несколькими входами и выходами

    На этом шаге мы рассмотрим разные формы обучения такой модели.

    Обучаются модели с несколькими входами и выходами почти так же, как модели Sequential, - вызовом функции fit() со списками входных и выходных данных. Эти списки должны передаваться в том же порядке, в каком информация о входных данных передавалась конструктору модели.


Пример 7.10. Обучение модели с передачей массивов входных данных и целей
import numpy as np
num_samples = 1280

# Фиктивные входные данные
title_data = np.random.randint(0, 2, size=(num_samples, vocabulary_size))
text_body_data = np.random.randint(0, 2, size=(num_samples, vocabulary_size))
tags_data = np.random.randint(0, 2, size=(num_samples, num_tags))

# Фиктивные целевые данные
priority_data = np.random.random(size=(num_samples, 1))
department_data = np.random.randint(0, 2, size=(num_samples, num_departments))

model.compile(optimizer="rmsprop",
              loss=["mean_squared_error", "categorical_crossentropy"],
              metrics=[["mean_absolute_error"], ["accuracy"]])
model.fit([title_data, text_body_data, tags_data],
          [priority_data, department_data],
          epochs=1)
model.evaluate([title_data, text_body_data, tags_data],
               [priority_data, department_data])
priority_preds, department_preds = model.predict(
    [title_data, text_body_data, tags_data])

    Чтобы не зависеть от конкретного порядка передачи аргументов (например, у вашей модели много входов или выходов и вам не хотелось бы в них запутаться), можно также использовать имена, присвоенные объектам Input и выходным слоям, и передавать данные через словари.


Пример 7.11. Обучение модели с передачей массивов входных данных и целей в словаре
model.compile(optimizer="rmsprop",
              loss={"priority": "mean_squared_error",
                    "department": "categorical_crossentropy"},
              metrics={"priority": ["mean_absolute_error"],
                       "department": ["accuracy"]})

model.fit({"title": title_data, "text_body": text_body_data,
           "tags": tags_data},
           {"priority": priority_data, "department": department_data},
           epochs=1)
model.evaluate({"title": title_data, "text_body": text_body_data,
                "tags": tags_data},
               {"priority": priority_data, "department": department_data})
priority_preds, department_preds = model.predict(
    {"title": title_data, "text_body": text_body_data, "tags": tags_data})

    На следующем шаге мы рассмотрим доступ к информации о связях между слоями.




Предыдущий шаг Содержание Следующий шаг