Сверточные нейросети - страница 14



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

Пример использования Batch Normalization в сверточной нейронной сети с использованием библиотеки PyTorch:

```python

import torch

import torch.nn as nn

import torch.nn.functional as F

class ConvNet(nn.Module):

def __init__(self):

super(ConvNet, self).__init__()

self.conv1 = nn.Conv2d(3, 64, kernel_size=3, padding=1)

self.bn1 = nn.BatchNorm2d(64) # Batch Normalization после первого сверточного слоя

self.conv2 = nn.Conv2d(64, 128, kernel_size=3, padding=1)

self.bn2 = nn.BatchNorm2d(128) # Batch Normalization после второго сверточного слоя

self.fc1 = nn.Linear(128 * 16 * 16, 256)

self.fc2 = nn.Linear(256, 10)

def forward(self, x):

x = F.relu(self.bn1(self.conv1(x)))

x = F.max_pool2d(x, kernel_size=2, stride=2)

x = F.relu(self.bn2(self.conv2(x)))

x = F.max_pool2d(x, kernel_size=2, stride=2)

x = x.view(-1, 128 * 16 * 16)

x = F.relu(self.fc1(x))

x = self.fc2(x)

return x

# Создаем экземпляр сети

model = ConvNet()

# Определяем функцию потерь и оптимизатор

criterion = nn.CrossEntropyLoss()

optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

# Пример обучения на некоторых данных

for epoch in range(num_epochs):

for images, labels in train_loader:

optimizer.zero_grad()

outputs = model(images)

loss = criterion(outputs, labels)

loss.backward()

optimizer.step()

```

Это простой пример сверточной нейронной сети с Batch Normalization после каждого сверточного слоя. Важно отметить, что в PyTorch Batch Normalization включается просто путем добавления слоя `nn.BatchNorm2d` после сверточного слоя, как показано в примере.

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

Глава 2. Свертка и пулинг

– Свойства и операции свертки

– Различные виды пулинга: max-pooling, average-pooling

– Роль и преимущества пулинга в CNN


Сверточные нейронные сети (CNN) используют свертку и пулинг для эффективного извлечения признаков из входных данных, таких как изображения. Вот более подробное объяснение этих концепций:

Свойства и операции свертки

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

– Ядро свертки – это матрица весов, которая применяется к подматрице входного изображения для вычисления значения на выходном изображении. На этом шаге модель извлекает локальные признаки изображения, учитывая их структуру и распределение.

– Stride (шаг) – это шаг, с которым ядро свертки перемещается по входному изображению. Он определяет расстояние между применениями фильтра к входным данным и влияет на размер выходного изображения.

Давайте рассмотрим пример применения операции свертки на входном изображении.

Предположим, у нас есть следующее изображение размером 5x5 пикселей:

```

[[1, 2, 1, 0, 0],

[0, 1, 0, 2, 1],

[1, 0, 2, 1, 0],

[0, 1, 0, 1, 0],

[1, 2, 1, 0, 0]]

```

Также у нас есть фильтр (ядро свертки) размером 3x3: