📜  PyTorch测试

📅  最后修改于: 2020-11-11 00:49:15             🧑  作者: Mango

感知器模型的测试

感知器模型的目的是对我们的数据进行分类,并根据先前标记的数据告诉我们发生癌症的机会,即最大或最小。

我们的模型已经过训练,现在,我们测试模型以平稳地了解其工作,并给出或不给出准确的结果。为此,我们必须在代码中添加更多功能。

有以下步骤来测试我们的模型:

步骤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最初为张量形式,因此我们通过类型转换将这些点更改为numpy。

plt.plot(p1.numpy()[0],p1.numpy()[1],'ro')
plt.plot(p2.numpy()[0],p2.numpy()[1],'ko')

第三步

现在,我们可以对每个点进行预测。我们将预测每个点属于2类正区域的概率。我们知道所有橙色点均标记为1,所有蓝色点均标记为0。因此,概率确定为

print("Red point positive probability={}".format(model.forward(p1).item()))
print("Black point positive probability={}".format(model.forward(p2).item()))

红点和黑点的概率等于其预测。

第四步

现在,我们将返回到类初始化,并创建一个称为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步

最后,我们将添加另外两个print语句,该语句使用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')

输出量