Python技术迷

PyTorch 教程-测试感知机模型

整理: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')

Image

专属福利 

👉点击领取:最全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()))
红点和黑点的概率等于它们的预测值。

Image

步骤 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)))
Image

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

完整代码

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')

输出

Image

Image
 1
Image
热门推荐

Image