120 практических задач
Шрифт:
print(f"Точность на тестовых данных с Dropout: {test_acc}")
```
Совмещение регуляризации и Dropout
Использование регуляризации L2 вместе с Dropout может дополнительно улучшить обобщающую способность модели.
```python
# Модель с регуляризацией L2 и Dropout
model = models.Sequential
model.add(layers.Dense(512, activation='relu', input_shape=(28 * 28,), kernel_regularizer=regularizers.l2(0.001)))
model.add(layers.Dropout(0.5)) # Dropout слой с вероятностью 0.5
model.add(layers.Dense(10, activation='softmax'))
#
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# Обучение модели
model.fit(train_images, train_labels, epochs=5, batch_size=128)
# Оценка модели
test_loss, test_acc = model.evaluate(test_images, test_labels)
print(f"Точность на тестовых данных с регуляризацией L2 и Dropout: {test_acc}")
```
Добавление регуляризации и Dropout в вашу модель помогает предотвратить переобучение и улучшить её обобщающую способность. Регуляризация L2 уменьшает значения весов, а Dropout снижает зависимость между нейронами, что делает модель более устойчивой к шуму и менее склонной к переобучению. Экспериментируя с различными значениями параметров регуляризации и вероятностью Dropout, вы можете найти оптимальные настройки для вашей задачи.
3. Создание простой свёрточной нейронной сети для распознавания изображений
– Задача: Классификация изображений из набора CIFAR-10.
Для задачи классификации изображений из набора данных CIFAR-10 можно использовать свёрточную нейронную сеть (CNN). CIFAR-10 – это набор данных, состоящий из 60,000 цветных изображений размером 32x32 пикселей, принадлежащих к 10 различным классам.
Свёрточные нейронные сети (CNN) – это класс глубинных нейронных сетей, разработанных специально для работы с двумерными данными, такими как изображения. В отличие от полносвязных сетей, где каждый нейрон связан со всеми нейронами предыдущего слоя, CNN используют свёрточные слои, которые применяют фильтры (или ядра) для извлечения локальных признаков из входных данных. Это позволяет модели эффективно распознавать сложные структуры, такие как края, текстуры и формы, что делает их идеальными для задач компьютерного зрения.
Основные компоненты CNN включают свёрточные слои, пулинговые слои и полносвязные слои. Свёрточные слои применяют фильтры, которые сканируют входное изображение, создавая карты признаков. Эти карты признаков затем проходят через нелинейные функции активации, такие как ReLU, что добавляет в сеть нелинейность и позволяет модели учиться сложным зависимостям. Пулинговые слои, такие как MaxPooling, уменьшают размер карт признаков, сохраняя при этом важную информацию, что снижает количество параметров и вычислительную сложность, а также помогает предотвратить переобучение.
CIFAR-10 – это популярный набор данных, состоящий из 60,000 цветных изображений размером 32x32 пикселей, распределённых по 10 различным классам. Классы включают самолёты, автомобили, птиц, кошек, оленей, собак, лягушек, лошадей, корабли и грузовики. Использование CNN для классификации изображений из CIFAR-10 демонстрирует эффективность этих сетей
Регуляризация и Dropout – это методы, которые помогают улучшить обобщающую способность моделей и предотвратить переобучение. Регуляризация L2 добавляет штраф за большие значения весов к функции потерь, что способствует уменьшению сложности модели и улучшению её обобщающей способности. Dropout случайным образом отключает нейроны во время обучения, что снижает взаимозависимость между ними и делает модель более устойчивой к шуму в данных.
Таким образом, свёрточные нейронные сети являются мощным инструментом для задач компьютерного зрения, позволяя эффективно обрабатывать и классифицировать изображения. Эксперименты с различными архитектурами и методами регуляризации позволяют оптимизировать производительность моделей для конкретных задач и наборов данных, таких как CIFAR-10.
Код
```python
import tensorflow as tf
from tensorflow.keras import datasets, layers, models
import matplotlib.pyplot as plt
# Загрузка и предобработка данных CIFAR-10
(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data
train_images, test_images = train_images / 255.0, test_images / 255.0
# Создание свёрточной нейронной сети
model = models.Sequential
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.Flatten)
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))
# Компиляция модели
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# Обучение модели
history = model.fit(train_images, train_labels, epochs=10,
validation_data=(test_images, test_labels))
# Оценка модели
test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
print(f"Точность на тестовых данных: {test_acc}")
# Визуализация точности и потерь во время обучения
plt.plot(history.history['accuracy'], label='accuracy')
plt.plot(history.history['val_accuracy'], label = 'val_accuracy')
plt.xlabel('Epoch')
plt.ylabel('Accuracy')
plt.ylim([0, 1])
plt.legend(loc='lower right')
plt.show
```
Этот код создает простую свёрточную нейронную сеть для классификации изображений из набора данных CIFAR-10. Вы можете изменить архитектуру модели, параметры обучения и другие аспекты для улучшения производительности.
Простая свёрточная нейронная сеть (CNN) для распознавания изображений из набора CIFAR-10 состоит из нескольких ключевых компонентов:
1. Свёрточные слои (Convolutional Layers):