Keras
Keras — это высокоуровневый API Python для создания и обучения нейронных сетей. Начиная с Keras 3 один и тот же код работает на JAX, TensorFlow и PyTorch.
Keras — это API Python с открытым исходным кодом и высоким уровнем абстракции для создания и обучения нейронных сетей. Франсуа Шолле выпустил его в марте 2015 года, чтобы упростить написание экспериментов с глубоким обучением: модель представляет собой стек или граф слоёв, compile задаёт оптимизатор, функцию потерь и метрики, а fit запускает цикл обучения. Keras стал официальным API высокого уровня для TensorFlow, а Keras 3, выпущенный в ноябре 2023 года, позволяет запускать один и тот же код модели на JAX, TensorFlow или PyTorch; используемый фреймворк выбирается при импорте Keras. Краткий и понятный код сделал Keras популярным выбором для обучения, прототипирования и соревнований Kaggle, а также для производственных моделей классификации изображений и обработки естественного языка.
Как работает Keras#
Модель Keras состоит из слоёв, например Dense, Conv2D, LSTM и MultiHeadAttention, каждый из которых хранит собственные веса. Keras предлагает три способа их объединения: API Sequential для простой последовательности, функциональный API для графов с ветвлениями, общими слоями или несколькими входами и создание подкласса keras.Model для полного контроля над прямым проходом. Скомпилированная модель обучается с помощью fit, который обрабатывает формирование батчей, обратное распространение ошибки, метрики, валидационные данные и колбэки для сохранения контрольных точек или ранней остановки. Затем модель оценивает новые данные с помощью evaluate и predict. Этот код обучает небольшой классификатор цифр на входящем в Keras датасете MNIST:
import os
os.environ["KERAS_BACKEND"] = "torch" # or "jax" or "tensorflow", set before importing Keras
import keras
# MNIST handwritten digits, with pixels scaled to [0, 1]
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
# Define the model as a stack of layers
model = keras.Sequential(
[
keras.Input(shape=(28, 28)),
keras.layers.Flatten(),
keras.layers.Dense(128, activation="relu"),
keras.layers.Dense(10, activation="softmax"),
]
)
# Configure training, then train and evaluate
model.compile(optimizer="adam", loss="sparse_categorical_crossentropy", metrics=["accuracy"])
model.fit(x_train, y_train, epochs=2, batch_size=64, verbose=0)
loss, accuracy = model.evaluate(x_test, y_test, verbose=0)
print(f"Test accuracy: {accuracy:.3f}")После двух эпох код выводит точность на тестовых данных около 0.96. Если заменить "torch" на "jax" или "tensorflow", та же модель запустится на другом фреймворке без изменения остальных строк.
Keras 3 и его бэкенды#
Изначально Keras работал на нескольких движках, включая Theano, TensorFlow и CNTK. Keras 2.3, выпущенный в сентябре 2019 года, стал последней версией с поддержкой нескольких бэкендов; после этого разработка продолжилась в TensorFlow как tf.keras. Keras 3 вновь стал независимым от бэкенда: слои и модели пишутся на keras.ops — наборе операций в стиле NumPy, реализованном каждым бэкендом. Поэтому модель, сохранённую в формате .keras, можно загрузить и обучать на любом бэкенде. При использовании бэкенда PyTorch модель Keras также является объектом torch.nn.Module, который можно применять в собственном цикле обучения PyTorch. Начиная с Keras 3.8, бэкенд OpenVINO для инференса запускает обученные модели на оборудовании Intel.
Начиная с TensorFlow 2.16, установка TensorFlow устанавливает Keras 3, а для кода, которому по-прежнему нужен Keras 2, используется отдельный пакет tf_keras. Конвертеры моделей также поддерживают Keras: когда Ultralytics YOLO экспортирует YOLO26 в формат TensorFlow SavedModel, конвертер onnx2tf послойно воссоздаёт сеть PyTorch из графа ONNX в виде модели Keras, а затем сохраняет её.
Предварительно обученные модели в KerasHub#
KerasHub предоставляет реализации популярных архитектур для Keras 3 с предварительно обученными контрольными точками, например ResNet для изображений, BERT для текста и большие языковые модели Gemma. Имя пресета загружает модель, готовую к переносу обучения: keras_hub.models.ImageClassifier.from_preset("resnet_50_imagenet") возвращает классификатор, обученный на ImageNet, который можно адаптировать к новому датасету с помощью дообучения и того же вызова fit, что использовался выше. Как и остальные модели Keras 3, модели KerasHub работают на любом из трёх бэкендов обучения.
Keras в сравнении с TensorFlow и PyTorch#
- TensorFlow: Полноценный фреймворк с собственной средой выполнения, компилятором и средствами развёртывания, например TensorFlow Serving и LiteRT. Многие пользователи TensorFlow пишут модели через Keras, а TensorFlow — один из движков, на которых выполняется код Keras.
- PyTorch: Фреймворк, в котором пользователи обычно самостоятельно пишут цикл обучения или используют такую библиотеку, как PyTorch Lightning. Keras предоставляет цикл через
fitи может использовать PyTorch как бэкенд, поэтому эти инструменты не исключают друг друга. - JAX: Библиотека Google для компонуемых преобразований функций, дифференцирования, компиляции XLA и векторизации. В JAX нет встроенного API для слоёв или обучения; Keras — один из способов получить такой API поверх JAX.










