– Оценка модели
Оценим точность модели на тестовом наборе данных.
– Корректировка и оптимизация
Настроим гиперпараметры модели, проведем кросс-валидацию и выберем лучшие признаки для улучшения производительности.
```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) для классификации изображений.
– Оценка модели: Оценили точность модели на валидационном наборе данных.
– Корректировка и оптимизация: Визуализировали графики точности и потерь для определения возможностей улучшения модели.
Этот пример демонстрирует