Я пытаюсь построить график обучения и тестовых потерь моей несбалансированной модели NN с двоичной классификацией.
Не могли бы вы сказать мне, что мне следует добавить, чтобы построить их? Или не могли бы вы предоставить другие источники, которые я могу проверить?
Еще одна вещь: похоже, потери не сильно уменьшаются.
Например, потери сохраняются изменяется между 0,90 и 0,50, не показывая явной тенденции к уменьшению с течением времени.
Я начал делать это только вчера...
import torch
from torch.utils.data import Dataset, DataLoader, WeightedRandomSampler
class ImbalancedDataset(Dataset):
def __init__(self, data, targets):
self.data = data
self.targets = targets
def __len__(self):
return len(self.data)
def __getitem__(self, idx):
return self.data[idx], self.targets[idx]
# Load CSV file into a Pandas DataFrame
import pandas as pd
df = pd.read_csv('E:/myCodes/R_projects/paper/binary.csv')
# Assuming the last column is the target variable
data = df.iloc[:, 9:30].values
targets = df.iloc[:, 1:2].values
data = torch.from_numpy(data)
targets = torch.from_numpy(targets)
dataset = ImbalancedDataset(data, targets)
##
class_sample_count = torch.tensor([(targets == t).sum() for t in torch.unique(targets)])
weight = 1. / class_sample_count.float()
samples_weight = torch.tensor([weight[int(t)] for t in targets])
sampler = WeightedRandomSampler(samples_weight, len(samples_weight))
train_loader = DataLoader(dataset, batch_size=64, sampler=sampler)
import torch.nn as nn
import torch.optim as optim
class SimpleNN(nn.Module):
def __init__(self):
super(SimpleNN, self).__init__()
self.fc1 = nn.Linear(21, 50)
self.fc2 = nn.Linear(50, 2)
self.double()
def forward(self, x):
x = torch.relu(self.fc1(x))
x = self.fc2(x)
return x
model = SimpleNN()
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)
num_epochs = 100
for epoch in range(num_epochs):
for inputs, labels in train_loader:
optimizer.zero_grad()
outputs = model(inputs)
loss = criterion(outputs, labels.long().squeeze()) # fix
loss.backward()
optimizer.step()
print(f'Epoch {epoch + 1}/{num_epochs}, Loss: {loss.item()}')
Подробнее здесь: https://stackoverflow.com/questions/790 ... y-nn-model
Как построить график поездов и проверить потери несбалансированной двоичной модели NN ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Набор поездов/тестов для прогнозирования категорий (XGB для двоичной классификации)
Anonymous » » в форуме Python - 0 Ответы
- 6 Просмотры
-
Последнее сообщение Anonymous
-
Мобильная версия