Практические задания по нейросетям: от теории к практике

Нейросети кажутся сложными, но лучший способ их понять — начать программировать. Мы подготовили подборку практических заданий, которые помогут перейти от теории к реальным проектам. Все примеры реализованы на Python с использованием библиотек TensorFlow/Keras и PyTorch.


1. Первая нейросеть: классификация рукописных цифр (MNIST)

Цель: Создать модель, которая распознаёт цифры от 0 до 9.
Инструменты: TensorFlow/Keras, датасет MNIST.

Шаги:

  1. Загрузите данные:

python

Copy

from tensorflow import keras
(X_train, y_train), (X_test, y_test) = keras.datasets.mnist.load_data()
  1. Нормализуйте изображения (значения пикселей от 0 до 1).
  2. Постройте модель:

python

Copy

model = keras.Sequential([
    keras.layers.Flatten(input_shape=(28, 28)),
    keras.layers.Dense(128, activation='relu'),
    keras.layers.Dense(10, activation='softmax')
])
  1. Обучите модель:

python

Copy

model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(X_train, y_train, epochs=5)
  1. Проверьте точность на тестовых данных.

Результат: Точность >97%.


2. Предсказание цен на дома: регрессия

Цель: Научить модель предсказывать стоимость недвижимости.
Инструменты: Boston Housing Dataset, PyTorch.

Шаги:

  1. Загрузите данные:

python

Copy

from sklearn.datasets import load_boston
data = load_boston()
X, y = data.data, data.target
  1. Нормализуйте признаки (StandardScaler).
  2. Создайте модель:

python

Copy

import torch.nn as nn
model = nn.Sequential(
    nn.Linear(13, 64),
    nn.ReLU(),
    nn.Linear(64, 1)
)
  1. Обучите с MSE-лоссом и оптимизатором Adam.
  2. Оцените ошибку (RMSE).

Совет: Попробуйте добавить dropout-слои для борьбы с переобучением.


3. Генерация текста: RNN с LSTM

Цель: Создать модель, которая генерирует текст в стиле Шекспира.
Инструменты: TensorFlow, датасет Shakespeare.

Шаги:

  1. Загрузите текст и создайте словарь символов.
  2. Преобразуйте текст в последовательности:

python

Copy

import numpy as np
text = open('shakespeare.txt').read()
chars = sorted(set(text))
char_to_idx = {char: i for i, char in enumerate(chars)}
  1. Постройте модель:

python

Copy

model = keras.Sequential([
    keras.layers.LSTM(256, input_shape=(seq_length, len(chars))),
    keras.layers.Dense(len(chars), activation='softmax')
])
  1. Обучите на предсказании следующего символа.
  2. Генерируйте текст с температурой сэмплирования.

Результат: Модель пишет стихи в духе «Быть или не быть?».


4. Свёрточная сеть (CNN) для классификации кошек и собак

Цель: Научить модель отличать кошек от собак на фото.
Инструменты: TensorFlow, датасет Kaggle Cats vs Dogs.

Шаги:

  1. Загрузите и разделите изображения (25k фото).
  2. Используйте аугментацию данных (повороты, отражения).
  3. Постройте CNN:

python

Copy

model = keras.Sequential([
    keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(150,150,3)),
    keras.layers.MaxPooling2D(2,2),
    keras.layers.Flatten(),
    keras.layers.Dense(512, activation='relu'),
    keras.layers.Dense(1, activation='sigmoid')
])
  1. Обучите с бинарной кросс-энтропией.
  2. Достигните точности >85% на валидации.

5. Детекция объектов: YOLO на практике

Цель: Настроить предобученную модель YOLO для обнаружения объектов на фото.
Инструменты: OpenCV, Darknet.

Шаги:

  1. Установите YOLO и загрузите веса (yolov3.weights).
  2. Загрузите изображение:

python

Copy

import cv2
img = cv2.imread('image.jpg')
  1. Запустите детекцию:

python

Copy

net = cv2.dnn.readNet('yolov3.weights', 'yolov3.cfg')
blob = cv2.dnn.blobFromImage(img, 1/255, (416,416), swapRB=True)
net.setInput(blob)
outputs = net.forward(net.getUnconnectedOutLayersNames())
  1. Визуализируйте bounding boxes.

Результат: Модель выделяет объекты с подписями (человек, машина, стул).


6. GAN: генерация лиц людей

Цель: Обучить GAN создавать реалистичные лица.
Инструменты: PyTorch, датасет CelebA.

Шаги:

  1. Загрузите датасет с изображениями лиц (202k фото).
  2. Постройте генератор и дискриминатор:

python

Copy

# Генератор
generator = nn.Sequential(
    nn.Linear(100, 256),
    nn.LeakyReLU(0.2),
    nn.Linear(256, 784),
    nn.Tanh()
)

# Дискриминатор
discriminator = nn.Sequential(
    nn.Linear(784, 256),
    nn.LeakyReLU(0.2),
    nn.Linear(256, 1),
    nn.Sigmoid()
)
  1. Обучайте в состязательной манере (minimax игра).
  2. Генерируйте новые лица из шума.

Советы для успешного обучения

  1. Начните с простого: Не беритесь сразу за трансформеры — освойте базовые архитектуры.
  2. Используйте Google Colab: Бесплатные GPU ускорят обучение.
  3. Анализируйте ошибки: Визуализируйте предсказания и confusion matrix.
  4. Экспериментируйте: Меняйте гиперпараметры (learning rate, batch size).

Заключение

Нейросети — это не магия, а инструмент, который требует практики. Выполняйте задания шаг за шагом, и через месяц вы сможете создавать собственные модели. Как говорил профессор Эндрю Ын: «Лучший способ научиться — сделать что-то своими руками и увидеть, как оно ломается. Тогда вы поймёте, как это работает».

P.S. Не бойтесь ошибок. Каждая неудача — это урок, который приближает вас к мастерству.