Читать книгу Нейросети. Основы онлайн

```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}%')

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

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

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