Дэвид Рид

Нейросети. Основы


Скачать книгу

CNN (сверточную нейронную сеть), подходящую для классификации изображений.

      – Оценка модели

      Оценим точность модели на тестовом наборе данных.

      – Корректировка и оптимизация

      Настроим гиперпараметры модели, проведем кросс-валидацию и выберем лучшие признаки для улучшения производительности.

      ```python

      # Импортируем необходимые библиотеки

      import numpy as np

      import pandas as pd

      import matplotlib.pyplot as plt

      from sklearn.model_selection import train_test_split

      from tensorflow.keras.preprocessing.image import ImageDataGenerator

      from tensorflow.keras.models import Sequential

      from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout

      # Сбор данных и предварительная обработка

      # Для примера используем ImageDataGenerator для загрузки изображений из папок

      train_datagen = ImageDataGenerator(rescale=1./255, validation_split=0.2)

      train_generator = train_datagen.flow_from_directory(

      'data/train', # Путь к папке с изображениями

      target_size=(150, 150),

      batch_size=32,

      class_mode='binary',

      subset='training')

      validation_generator = train_datagen.flow_from_directory(

      'data/train',

      target_size=(150, 150),

      batch_size=32,

      class_mode='binary',

      subset='validation')

      # Разделение данных уже происходит внутри ImageDataGenerator с использованием параметра validation_split

      # Создание модели

      model = Sequential([

      Conv2D(32, (3, 3), activation='relu', input_shape=(150, 150, 3)),

      MaxPooling2D(2, 2),

      Conv2D(64, (3, 3), activation='relu'),

      MaxPooling2D(2, 2),

      Conv2D(128, (3, 3), activation='relu'),

      MaxPooling2D(2, 2),

      Conv2D(128, (3, 3), activation='relu'),

      MaxPooling2D(2, 2),

      Flatten(),

      Dense(512, activation='relu'),

      Dropout(0.5),

      Dense(1, activation='sigmoid')

      ])

      # Компиляция модели

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

      # Обучение модели

      history = model.fit(

      train_generator,

      steps_per_epoch=train_generator.samples // train_generator.batch_size,

      validation_data=validation_generator,

      validation_steps=validation_generator.samples // validation_generator.batch_size,

      epochs=10

      )

      # Оценка модели

      loss, accuracy = model.evaluate(validation_generator)

      print(f'Test Accuracy: {accuracy*100:.2f}%')

      # Корректировка и оптимизация

      # В данном примере можно попробовать изменить архитектуру модели, количество эпох,

      # использование других оптимизаторов или функций активации для улучшения производительности.

      # График точности обучения и валидации

      plt.plot(history.history['accuracy'], label='Training Accuracy')

      plt.plot(history.history['val_accuracy'], label='Validation Accuracy')

      plt.title('Training and Validation Accuracy')

      plt.legend()

      plt.show()

      # График потерь обучения и валидации

      plt.plot(history.history['loss'], label='Training Loss')

      plt.plot(history.history['val_loss'], label='Validation Loss')

      plt.title('Training and Validation Loss')

      plt.legend()

      plt.show()

      ```

      Описание шагов

      – Сбор данных: Использовали `ImageDataGenerator` для загрузки изображений кошек и собак, и автоматического разделения на обучающий и валидационный наборы.

      – Разделение данных: Произошло в процессе генерации данных с использованием параметра `validation_split`.

      – Обучение модели: Создали и обучили простую сверточную нейронную сеть (CNN) для классификации изображений.

      – Оценка модели: Оценили точность модели на валидационном наборе данных.

      – Корректировка и оптимизация: Визуализировали графики точности и потерь для определения возможностей улучшения модели.

      Этот пример демонстрирует