查看原文
其他

PyTorch 教程-测试感知机模型

点击关注👉 Python架构师 2024-02-11
整理:python架构师

本文讨论了感知机模型的目的是对数据进行分类,并根据先前标记的数据,告诉我们癌症的可能性是最大还是最小。

我们的模型已经训练完成,现在,我们需要测试模型是否能顺利工作并给出准确的结果。为此,我们需要在代码中添加一些更多的功能。

测试模型的步骤如下:

步骤 1

我们将重新绘制拟合好的模型,为此我们需要对一个随机点进行预测。在我们的案例中,为了更好地理解,我们将取两个点。
p1=torch.Tensor([1.0,-1.0]) p2=torch.Tensor([-1.0,-1.5])

步骤 2

现在,我们接下来的步骤是绘制这些点,以便我们可以确定这两个点属于哪个类别,即 1 或 0。
plt.plot(p1[0],p1[1],'ro') plt.plot(p2[0],p2[1],'ko')
点 p1 和 p2 最初是以张量(tensor)形式出现的,所以我们通过类型转换将这些点转换为 numpy。
plt.plot(p1.numpy()[0],p1.numpy()[1],'ro') plt.plot(p2.numpy()[0],p2.numpy()[1],'ko')

资源分享

👉点击领取:最全Python资料合集

步骤 3

现在,我们可以对每个点进行预测。我们将预测每个点属于正区域 2 类 1 的概率。我们知道所有橙色的点被标记为 1,所有蓝色的点被标记为 0。因此,概率确定如下
print("Red point positive probability={}".format(model.forward(p1).item())) print("Black point positive probability={}".format(model.forward(p2).item()))

红点和黑点的概率等于它们的预测值。

步骤 4

现在,我们将回到我们的类初始化,并创建一个名为 predict 的方法,它有一个参数。我们使用 self.forward(x) 来找出概率。如果概率大于 0.5,那么我们将返回类别 1,否则返回 0。
def predict(self,x): pred=torch.sigmoid(self.linear(x)) if pred>=0.5: return 1 else: return 0

步骤 5

最后,我们将添加两个更多的打印语句,告诉我们使用 predict 方法的类别
print("Red point in calss={}".format(model.predict(p1))) print("Black point in calss={}".format(model.predict(p2)))

很明显,我们的模型能够顺利工作,并且能够用随机数据给出准确的结果。

完整代码

import torch import numpy as np import matplotlib.pyplot as plt import torch.nn as nn from sklearn import datasets no_of_points=100 centers=[[-0.5,0.5],[0.5,-0.5]] x,y=datasets.make_blobs(n_samples=no_of_points,random_state=123,centers=centers,cluster_std=0.4) xdata=torch.Tensor(x) ydata=torch.Tensor(y.reshape(100,1)) def Scatter(): plt.scatter(x[y==0,0],x[y==0,1]) plt.scatter(x[y==1,0],x[y==1,1]) class Perceptron_model(nn.Module): def __init__(self,input_size,output_size): super().__init__() self.linear=nn.Linear(input_size,output_size) def forward(self,x): pred=torch.sigmoid(self.linear(x)) return pred def predict(self,x): pred=torch.sigmoid(self.linear(x)) If pred>=0.5: return 1 else: return 0 torch.manual_seed(2) model= Perceptron_model(2,1) criterion=nn.BCELoss() optimizer=torch.optim.SGD(model.parameters(),lr=0.01) print(list(model.parameters())) [A,B]=model.parameters() A1,A2=A.view(2) B1=B[0] epochs=1000 losses=[] fori in range(epochs): ypred=model.forward(xdata) loss=criterion(ypred,ydata) print("epoch:",i,"loss:",loss.item()) losses.append(loss) optimizer.zero_grad() loss.backward() optimizer.step() def get_perameters(): return(A1.item(),A2.item(),B[0].item()) def plotfit(title): plt.title=title A1,A2,B1=get_perameters() x1=np.array([-2.0,2.0]) y1=((A1*x1)+B1)/-A2 plt.plot(x1,y1,'r') Scatter() plt.show() p1=torch.Tensor([1.0,-1.0]) p2=torch.Tensor([-1.0,-1.5]) plt.plot(p1.numpy()[0],p1.numpy()[1],'ro') plt.plot(p2.numpy()[0],p2.numpy()[1],'ko') print("Red point positive probability={}".format(model.forward(p1).item())) print("Black point positive probability={}".format(model.forward(p2).item())) print("Red point in calss={}".format(model.predict(p1))) print("Black point in calss={}".format(model.predict(p2))) plotfit('Initial Model')

输出


 
热门推荐
继续滑动看下一个

PyTorch 教程-测试感知机模型

点击关注👉 Python架构师
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存