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

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

测试模型的步骤如下:

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

6-1.png

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

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

6-2.png

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

6-3.png

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

完整代码

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

输出

6-4.png

6-5.png

标签: Pytorch, Pytorch教程, Pytorch安装, Pytorch入门, Pytorch下载, Pytorch指南, Pytorch编程, Pytorch入门教程, Pytorch初级教程, Pytorch进阶, Pytorch高级教程, Pytorch学习, Pytorch库