Первая нейронная сеть на Keras
Keras — это высокоуровневый API нейронных сетей, написанный на Python, который может работать поверх TensorFlow, CNTK или Theano. Его разработка сосредоточена на поддержке быстрого экспериментирования, что позволяет быстро переходить от идеи к результату с минимальным количеством кода.
Основные возможности Keras
- Удобство для пользователя: Keras имеет простой и единообразный интерфейс
- Модульность: Различные компоненты нейронной сети (слои, оптимизаторы, схемы инициализации и т. д.) являются компонуемыми модулями
- Простая расширяемость: Новые модули можно легко добавлять для выражения новых исследовательских идей
- Поддержка нескольких бэкендов: Позволяет бесшовно переключаться между TensorFlow, Theano и CNTK в качестве вычислительного бэкенда
Установка Keras
Прежде чем мы начнём, нам нужно установить Keras и его бэкенд-движок (здесь мы используем TensorFlow):
pip install tensorflow keras
Примечание: Keras 2.4.0 и более поздние версии были интегрированы в TensorFlow, и их можно напрямую использовать через
tensorflow.kerasИспользуйте
Создание первой нейронной сети
Начнём с простой полносвязной нейронной сети для решения классической задачи распознавания рукописных цифр MNIST.
1. Импортируйте необходимые библиотеки
Пример
from tensorflow import keras
from tensorflow.keras import layers
2. Подготовка данных
Набор данных MNIST содержит 60,000 обучающих изображений и 10,000 тестовых изображений, каждое из которых является изображением рукописной цифры в оттенках серого размером 28x28 пикселей.
Пример
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
# Предобработка данных
x_train = x_train.reshape(60000, 784).astype("float32") / 255
x_test = x_test.reshape(10000, 784).astype("float32") / 255
# Преобразовать метки в one-hot encoding
y_train = keras.utils.to_categorical(y_train, 10)
y_test = keras.utils.to_categorical(y_test, 10)
3. Построение модели
Мы построим простую полносвязную сеть, содержащую входной слой, скрытый слой и выходной слой.
Пример
layers.Dense(512, activation="relu", input_shape=(784,)),
layers.Dense(10, activation="softmax")
])
Анализ структуры модели
Пример
A[Входной слой 784 нейрона] --> B[Скрытый слой 512 нейронов, активация ReLU]
B --> C[Выходной слой 10 нейронов, активация Softmax]
4. Компиляция модели
Перед обучением модели нам нужно настроить процесс обучения:
Пример
optimizer="rmsprop",
loss="categorical_crossentropy",
metrics=["accuracy"]
)
Описание параметров компиляции
| Параметр | Описание | Типичные значения |
|---|---|---|
| optimizer | Оптимизатор, используется для обновления весов | "rmsprop", "adam", "sgd" |
| loss | Функция потерь, измеряет разницу между предсказаниями модели и истинными значениями | "categorical_crossentropy" (классификация), "mse" (регрессия) |
| metrics | Метрика оценки, используется для мониторинга обучения | ["accuracy"] |
5. Обучите модель
Теперь мы можем начать обучение модели:
Пример
x_train, y_train,
batch_size=128,
epochs=10,
validation_split=0.2
)
Описание параметров обучения
| Параметр | Описание | Рекомендуемые значения |
|---|---|---|
| batch_size | Количество образцов, используемых для каждого обновления градиента | 32-256 |
| epochs | Количество эпох обучения | Настраивайте в зависимости от сложности данных |
| validation_split | Доля обучающих данных, используемая в качестве валидационного набора | 0.1-0.3 |
6. Оценка модели
После завершения обучения мы можем оценить производительность модели на тестовом наборе:
Пример
print(f"Точность на тесте: {test_acc:.4f}")
Полный пример кода
Пример
from tensorflow import keras
from tensorflow.keras import layers
# 1. Загрузить данные
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
# 2. Предобработка
x_train = x_train.reshape(60000, 784).astype("float32") / 255
x_test = x_test.reshape(10000, 784).astype("float32") / 255
y_train = keras.utils.to_categorical(y_train, 10)
y_test = keras.utils.to_categorical(y_test, 10)
# 3. Построение модели
model = keras.Sequential([
layers.Dense(512, activation="relu", input_shape=(784,)),
layers.Dense(10, activation="softmax")
])
# 4. Компиляция модели
model.compile(
optimizer="rmsprop",
loss="categorical_crossentropy",
metrics=["accuracy"]
)
# 5. Обучение модели
history = model.fit(
x_train, y_train,
batch_size=128,
epochs=10,
validation_split=0.2
)
# 6. Оценка модели
test_loss, test_acc = model.evaluate(x_test, y_test)
print(f"Точность на тесте: {test_acc:.4f}")
Рекомендации по улучшению модели
1. Добавьте слой Dropout: предотвратите переобучение
Пример
2. Используйте более продвинутый оптимизатор: например, Adam
Пример
3. Добавьте скрытые слои: постройте более глубокую сеть
Пример
4. Используйте свёрточные слои: более эффективны для данных изображений
Пример
ЧАВО
Вопрос 1: Почему точность моей модели так низка?
- Проверьте, правильно ли выполнена предварительная обработка данных
- Попробуйте изменить скорость обучения
- Увеличьте емкость сети (больше слоев или больше нейронов)
Q2: Что делать, если потери не уменьшаются во время обучения?
- Проверьте, нет ли проблем с данными
- Попробуйте разные оптимизаторы
- Настройте скорость обучения (обычно уменьшите её)
Q3: Как сохранить и загрузить обученную модель?
Пример
model.save("mnist_model.h5")
# Загрузить модель
loaded_model = keras.models.load_model("mnist_model.h5")