Чтобы разобраться с PyTorch (и углубленным изучением в целом), я начал с работы с некоторыми базовыми классификационными примерами. Одним из таких примеров была классификация нелинейного набора данных, созданного с использованием sklearn (полный код доступен в виде блокнота здесь)
n_pts = 500
X, y = datasets.make_circles(n_samples=n_pts, random_state=123, noise=0.1, factor=0.2)
x_data = torch.FloatTensor(X)
y_data = torch.FloatTensor(y.reshape(500, 1))
Затем это точно классифицируется с использованием довольно простой нейронной сети
class Model(nn.Module):
def __init__(self, input_size, H1, output_size):
super().__init__()
self.linear = nn.Linear(input_size, H1)
self.linear2 = nn.Linear(H1, output_size)
def forward(self, x):
x = torch.sigmoid(self.linear(x))
x = torch.sigmoid(self.linear2(x))
return x
def predict(self, x):
pred = self.forward(x)
if pred >= 0.5:
return 1
else:
return 0
Поскольку меня интересуют данные о состоянии здоровья, я решил попробовать использовать ту же структуру сети, чтобы классифицировать некоторые базовые наборы данных реального мира. Я взял данные о частоте сердечных сокращений для одного пациента из здесь и изменил их, чтобы все значения> 91 были помечены как аномалии (например, a 1
и все & lt; = 91 помечено как 0
). Это совершенно произвольно, но я просто хотел посмотреть, как будет работать классификация. Полный блокнот для этого примера здесь.
Для меня не интуитивно понятно, почему первый пример достигает потери 0,0016 после 1000 эпох, в то время как второй пример достигает потери 0,4296 после 10000 эпох
Возможно, я наивен, думая, что пример сердечного ритма будет гораздо легче классифицировать. Любое понимание, которое поможет мне понять, почему это не то, что я вижу, было бы замечательно!