为了掌握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))
Run Code Online (Sandbox Code Playgroud)
然后使用相当基本的神经网络将其准确分类
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
Run Code Online (Sandbox Code Playgroud)
当我对健康数据感兴趣时,我决定尝试使用相同的网络结构对一些基本的现实世界数据集进行分类。我从这里获取了一名患者的心率数据,并对其进行了更改,以便所有> 91的值都被标记为异常(例如a 1
,所有<= 91的值都标记为a 0
)。这是完全任意的,但是我只是想看看分类是如何工作的。此示例的完整笔记本在这里。
对我来说不直观的是,为什么第一个示例在1,000个历元后损失0.0016,而第二个示例在10,000个历元后却损失0.4296 …
python artificial-intelligence machine-learning deep-learning pytorch