2. Подготовка данных: Загрузка набора данных CIFAR-10, который содержит 60,000 цветных изображений размером 32x32, разделенных на 10 классов. Данные нормализуются, чтобы ускорить обучение.
3. Построение модели: Модель создается как последовательная (Sequential). Добавляются несколько сверточных слоев, за которыми следуют слои подвыборки (Pooling) и полносвязные слои.
4. Компиляция и обучение: Модель компилируется с использованием оптимизатора Adam и функции потерь Sparse Categorical Crossentropy. Затем модель обучается на тренировочных данных.
5. Оценка и тестирование: После обучения модель оценивается на тестовых данных, и визуализируется точность на тренировочном и валидационном наборах данных.
Эта структура сети может быть расширена и усложнена в зависимости от задачи и доступных данных.
Построение модели
Создание последовательной модели (Sequential)
Для создания сложной сверточной нейронной сети (CNN) мы будем использовать последовательную модель `Sequential` из библиотеки Keras. Этот тип модели позволяет добавлять слои один за другим, что упрощает процесс построения и настройки сети.
Добавление сверточных слоев
Сверточные слои (Conv2D) являются основным элементом CNN. Они применяют фильтры к входному изображению, чтобы выделить различные признаки, такие как края, текстуры и другие важные детали. В нашем примере мы добавляем три сверточных слоя:
1. Первый сверточный слой:
```python
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)))
```
– 32 фильтра: Каждый фильтр будет извлекать определенный признак из изображения.
– Размер фильтра 3x3: Это небольшой размер, который хорошо подходит для выделения мелких деталей.
– Функция активации ReLU: Rectified Linear Unit (ReLU) помогает сети обучаться нелинейным отношениям между признаками.
– input_shape=(32, 32, 3): Указываем форму входных данных (32x32 пикселя, 3 цветовых канала).
2. Второй сверточный слой:
```python
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
```
–64 фильтра: Увеличиваем количество фильтров, чтобы сеть могла извлекать более сложные признаки.
3. Третий сверточный слой:
```python
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
```
– Дополнительный сверточный слой для дальнейшего выделения признаков.
Добавление слоев подвыборки (Pooling)
Слои подвыборки (MaxPooling2D) уменьшают размерность выходных данных от сверточных слоев, что снижает вычислительную сложность и помогает избежать переобучения. Они выбирают максимальное значение из каждого подмассива данных, тем самым сохраняя наиболее значимые признаки.
1. Первый слой подвыборки:
```python
model.add(layers.MaxPooling2D((2, 2)))
```
– Размер пула 2x2: Снижение размерности выходных данных в два раза по каждой оси.
2. Второй слой подвыборки:
```python
model.add(layers.MaxPooling2D((2, 2)))
```
– Дополнительный слой подвыборки для дальнейшего уменьшения размерности данных.
Добавление полносвязных слоев (Fully Connected Layers)
После извлечения признаков из изображений с помощью сверточных и подвыборочных слоев, мы используем полносвязные слои (Dense) для классификации. Эти слои соединяют каждый нейрон предыдущего слоя с каждым нейроном текущего слоя.
1. Приведение данных в одномерный вид:
```python
model.add(layers.Flatten())
```
– Преобразование