Перейти к основному содержимому

Keras и TensorFlow — нейросети

Разработчику

TensorFlow — платформа глубокого обучения от Google: вычислительный граф, автоматическое дифференцирование, GPU/TPU, экспорт в TensorFlow Lite (мобильные устройства) и TensorFlow.js (браузер). Keras с TensorFlow 2.x встроен как высокоуровневый API (tf.keras) для быстрой сборки и обучения сетей.

Табличные задачи на старте проще закрыть scikit-learn — см. Scikit-learn. Keras уместен, когда нужны изображения, последовательности, эмбеддинги или глубокие архитектуры (CNN, LSTM, трансформеры). Теория нейрона и слоёв — Нейрон; первый код без фреймворка — перцептрон на NumPy.


ML и DL в одной картине

Scikit-learnKeras (TensorFlow)
ДанныеТаблицы, разреженные матрицыТензоры (изображения, последовательности)
ПризнакиЧасто готовят вручную (pandas)Извлекаются слоями сети
ОбучениеCPU, секунды–минутыGPU желателен для больших моделей
Типичные задачиЦена, отток, кластерыCV, NLP, аудио

Раздел глубокое обучение в Машинное обучение даёт расширенные примеры CNN и RNN; здесь — компактный практический маршрут.


Установка и проверка

pip install tensorflow
import tensorflow as tf
print(tf.__version__)
print("GPU:", tf.config.list_physical_devices("GPU"))

Sequential — слои друг за другом

Модель для табличных или простых задач (бинарная классификация после нормализации):

import tensorflow as tf
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y
)

scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

model = tf.keras.Sequential([
tf.keras.layers.Dense(64, activation="relu", input_shape=(X_train.shape[1],)),
tf.keras.layers.Dropout(0.3),
tf.keras.layers.Dense(32, activation="relu"),
tf.keras.layers.Dense(1, activation="sigmoid"),
])

model.compile(
optimizer="adam",
loss="binary_crossentropy",
metrics=["accuracy"],
)

history = model.fit(
X_train, y_train,
epochs=30,
batch_size=32,
validation_split=0.2,
verbose=0,
)

loss, acc = model.evaluate(X_test, y_test, verbose=0)
print(f"Test accuracy: {acc:.3f}")
Параметр compileКогда использовать
binary_crossentropyДва класса, выход sigmoid
sparse_categorical_crossentropyНесколько классов, метки — целые числа 0…K-1
categorical_crossentropyНесколько классов, метки — one-hot
mseРегрессия, выход linear

MNIST — первая свёрточная сеть

from tensorflow.keras.datasets import mnist
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
from tensorflow.keras.utils import to_categorical

(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = x_train.reshape(-1, 28, 28, 1).astype("float32") / 255.0
x_test = x_test.reshape(-1, 28, 28, 1).astype("float32") / 255.0
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)

cnn = tf.keras.Sequential([
Conv2D(32, 3, activation="relu", input_shape=(28, 28, 1)),
MaxPooling2D(2),
Conv2D(64, 3, activation="relu"),
MaxPooling2D(2),
Flatten(),
Dense(128, activation="relu"),
Dense(10, activation="softmax"),
])

cnn.compile(optimizer="adam", loss="categorical_crossentropy", metrics=["accuracy"])
cnn.fit(x_train, y_train, epochs=5, batch_size=128, validation_split=0.1, verbose=1)
cnn.evaluate(x_test, y_test, verbose=0)

Свёрточные слои (Conv2D) ищут локальные паттерны (штрихи, углы); пулинг уменьшает размер карты признаков. Такие сети — основа распознавания объектов и лиц.


Functional API — ветвления и несколько входов

Когда нужны общие слои, несколько входов или выходов:

inputs = tf.keras.Input(shape=(100,))
x = tf.keras.layers.Dense(128, activation="relu")(inputs)
x = tf.keras.layers.Dropout(0.5)(x)
outputs = tf.keras.layers.Dense(10, activation="softmax")(x)
model = tf.keras.Model(inputs=inputs, outputs=outputs)
model.compile(optimizer="adam", loss="categorical_crossentropy", metrics=["accuracy"])

Callbacks и ранняя остановка

callbacks = [
tf.keras.callbacks.EarlyStopping(
monitor="val_loss", patience=5, restore_best_weights=True
),
tf.keras.callbacks.ModelCheckpoint(
"best.keras", monitor="val_accuracy", save_best_only=True
),
]

model.fit(X_train, y_train, epochs=100, validation_split=0.2, callbacks=callbacks)

EarlyStopping останавливает обучение, когда validation перестаёт улучшаться — защита от переобучения. Подробнее — смещение и дисперсия.


Сохранение и инференс

model.save("model.keras")
restored = tf.keras.models.load_model("model.keras")
restored.predict(X_test[:5])

Для мобильных устройств — экспорт в TFLite; для сервера — SavedModel или ONNX. Обзор продакшен-развёртывания — Применение ИИ в продакшене.


PyTorch — альтернатива

PyTorch (Meta) популярен в исследованиях и среди LLM/CV-команд: динамический граф, torch.nn, экосистема Hugging Face. Идеи те же (слои, loss, optimizer); синтаксис другой.

Практический вход с установкой, autograd, градиентным спуском и сквозным пайплайном — в статье PyTorch для разработчика. После перцептрона на NumPy это естественный следующий шаг.

ВыборОриентир
Учебник, Kaggle, корпоративный Google-стекTensorFlow / Keras
Исследование, кастомные архитектуры, HF-моделиPyTorch

Дальше по маршруту

  1. Transfer learning — EfficientNet, заморозка слоёв.
  2. Распознавание лиц, объектов и текста — YOLO, OCR, NER.
  3. Облачные Cognitive API — если своё обучение не нужно.
  4. Большие языковые модели — трансформеры поверх тех же идей эмбеддингов.

См. также

Другие статьи этого же раздела в боковом меню (как на странице "О разделе").