
Сонные проблемы: как недосып разрушает ваше здоровье!
28.09.2024
Топ-5 Техник для Взрывного Мастерства в Анализе Временных Рядов!
30.09.2024
Сонные проблемы: как недосып разрушает ваше здоровье!
28.09.2024
Топ-5 Техник для Взрывного Мастерства в Анализе Временных Рядов!
30.09.2024Что внутри нейронной сети? Узнай правду!
Как визуализировать поверхность ошибки нейронной сети в 3D с помощью PyTorch: синтетические данные, простая модель и построение графика.

Как увидеть ошибки нейросети в 3D?
Привет! Хочешь узнать, как можно увидеть ошибки нейросети в 3D? Представь, что ты можешь буквально «потрогать» эти ошибки. Заманчиво, правда? Давай я покажу тебе, как это сделать с помощью PyTorch и нескольких библиотек.
Как все начиналось
В последний год обучения в университете я, как и многие другие, выбирал тему для дипломной работы. Я изучал гидрометеорологию и планировал писать о климатических моделях. Мой научный руководитель, доктор Грибанов, предложил исследовать применение нейронных сетей для исследования углеродных потоков на Земле.
Представь себе кусок бумаги. Сначала он гладкий, но если его скомкать и расправить, получится «несовершенная» поверхность — с пиками и впадинами. Точно так же работает и поверхность ошибок в нейронной сети!
Теперь бросим вызов и попробуем создать такую поверхность ошибок в 3D и визуализировать ее.
Что нам нужно
Во-первых, нам понадобятся данные. Они должны демонстрировать нелинейную зависимость. В Python это может выглядеть так:
np.random.seed(42)
X = np.random.normal(1, 4.5, 10000)
y = np.piecewise(X, [X < -2,(X >= -2) & (X < 2), X >= 2], [lambda X: 2*X + 5, lambda X: 7.3*np.sin(X), lambda X: -0.03*X**3 + 2]) + np.random.normal(0, 1, X.shape)

Создаем нейронную сеть
Наша нейронная сеть будет иметь всего 2 веса, чтобы мы могли визуализировать пространство ошибок в 3D. Вот как это можно реализовать в PyTorch:
class ANN(nn.Module):
def __init__(self, input_size, N, output_size):
super().__init__()
self.net = nn.Sequential(
nn.Linear(input_size, N, bias=False),
nn.Tanh(),
nn.Linear(N, output_size, bias=False)
)
def forward(self, x):
return self.net(x)
Меняем веса и считаем ошибки
Создаем сетку возможных значений для весов и рассчитываем ошибку для каждой комбинации:
W1, W2 = np.arange(-2, 2, 0.05), np.arange(-2, 2, 0.05)
LOSS = np.zeros((len(W1), len(W2)))
for i, w1 in enumerate(W1):
for j, w2 in enumerate(W2):
# обновляем веса и считаем ошибку здесь
Тренируем модель
Во время обучения собираем значения весов и ошибки, чтобы потом отобразить их:
model = ANN(1,1,1)
epochs = 25
lr = 1e-2
optimizer = optim.SGD(model.parameters(), lr=lr)
errors, weights_1, weights_2 = [], [], []
for epoch in range(epochs):
for x, y in train_loader:
pred = model(x.reshape(-1,1))
error = loss(pred, y)
optimizer.zero_grad()
error.backward()
optimizer.step()
for x, y in test_loader:
preds = model(x.reshape(-1,1))
total_loss += loss(preds, y).item()
weights_1.append(model.net._modules['Layer_1'].weight.data.item())
weights_2.append(model.net._modules['Layer_2'].weight.data.item())
errors.append(total_loss / len(test_loader))
Визуализируем результаты
Создаем 3D-график с помощью Plotly:
import plotly.graph_objects as go
import plotly.io as pio
fig = go.Figure(data=[go.Surface(z=LOSS, x=W1, y=W2)])
fig.update_layout(
title='Loss Surface',
scene=dict(
xaxis_title='w1',
yaxis_title='w2',
zaxis_title='Loss',
),
width=800,
height=800
)
fig.add_trace(go.Scatter3d(x=weights_2, y=weights_1, z=errors,
mode='lines+markers',
line=dict(color='red', width=2),
marker=dict(size=4, color='yellow')))
fig.show()

Заключение
Вот и все! Теперь ты знаешь, как визуализировать поверхность ошибок нейронной сети в 3D. Ты можешь попробовать сам и поделиться своими результатами!
Если у тебя есть вопросы или ты хочешь узнать больше, напиши комментарий ниже или свяжись со мной в LinkedIn. Буду рад поговорить с тобой!
🛰️ Следуй за новыми статьями 🛰️
Автор статьи
Шведков Илья
Специалист по нейросетям и автоматизации
Помогаю экспертам зарабатывать больше через контент и ИИ.
В IT-сфере с 2004 года.
- Разработал 50+ автоворонок в 20 нишах - общий доход клиентов 90+ млн руб. Лучший кейс - 45 млн за 6 месяцев.
- Снял 3000+ Reels для клиентов - 9 видео с 1+ млн просмотров, 200+ роликов на YouTube.
- Автор 4 онлайн-курсов - помог 300 ученикам упаковать экспертность и масштабировать бизнес онлайн.
- Моя миссия: помочь экспертам быть услышанными и зарабатывать больше с нейросетями - чтобы каждый из них помог тысячам своих учеников, и вместе мы изменили жизни миллионов людей к лучшему.
