PyTorch 教程-测试感知机模型

本文讨论了感知机模型的目的是对数据进行分类,并根据先前标记的数据,告诉我们癌症的可能性是最大还是最小。
我们的模型已经训练完成,现在,我们需要测试模型是否能顺利工作并给出准确的结果。为此,我们需要在代码中添加一些更多的功能。
测试模型的步骤如下:
步骤 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')
步骤 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')
输出