Литмир - Электронная Библиотека
Содержание  
A
A

model.add(layers.Dense(10, activation='softmax'))

model.compile(optimizer='adam',

loss='sparse_categorical_crossentropy',

metrics=['accuracy'])

model.fit(train_images_scaled, train_labels, epochs=5, batch_size=128)

test_loss, test_acc = model.evaluate(test_images_scaled, test_labels)

print(f"Точность на тестовых данных со стандартизацией: {test_acc}")

```

Эти дополнительные шаги помогут вам лучше понять поведение модели и улучшить её производительность за счёт оптимизации различных параметров и методов предобработки данных.

2. Улучшение модели с использованием регуляризации и dropout

– Задача: Повышение точности классификации.

Регуляризация и Dropout – это мощные методы, которые помогают улучшить обобщающую способность модели и предотвращают переобучение. Регуляризация добавляет штраф за сложные модели, уменьшая значения весов, а Dropout отключает случайный набор нейронов в процессе обучения, что снижает зависимость между нейронами.

Регуляризация L2

Регуляризация L2 добавляет штраф за большие веса к функции потерь, что помогает предотвратить переобучение.

```python

import tensorflow as tf

from tensorflow.keras import layers, models, regularizers

import numpy as np

import matplotlib.pyplot as plt

# Загрузка и предобработка данных

(train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.mnist.load_data()

train_images = train_images / 255.0

test_images = test_images / 255.0

train_images = train_images.reshape((60000, 28 * 28))

test_images = test_images.reshape((10000, 28 * 28))

# Модель с регуляризацией L2

model = models.Sequential()

model.add(layers.Dense(512, activation='relu', input_shape=(28 * 28,), kernel_regularizer=regularizers.l2(0.001)))

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: {test_acc}")

```

Dropout

Dropout случайным образом отключает нейроны в процессе обучения, что снижает вероятность переобучения.

```python

# Модель с Dropout

model = models.Sequential()

model.add(layers.Dense(512, activation='relu', input_shape=(28 * 28,)))

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"Точность на тестовых данных с 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 демонстрирует эффективность этих сетей в задачах распознавания образов. CNN учатся распознавать иерархию признаков, начиная с простых, таких как грани и текстуры, и заканчивая более сложными, такими как части объектов и сами объекты.

Регуляризация и 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)))

2
{"b":"902364","o":1}