感知器模型的目的是对我们的数据进行分类, 并根据先前标记的数据告诉我们发生癌症的机会, 即最大或最小。
我们的模型已经过训练, 现在, 我们测试模型以顺利了解其工作, 并给出或不给出准确的结果。为此, 我们必须在代码中添加一些其他功能。
有以下步骤来测试我们的模型:
步骤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()))
红点和黑点的概率等于其预测。
文章图片
步骤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步
最后, 我们将添加另外两个print语句, 该语句使用predict方法将类告知我们
print("Red point in calss={}".format(model.predict(p1)))print("Black point in calss={}".format(model.predict(p2)))
文章图片
显然, 我们的模型可以顺利运行, 并使用随机数据为我们提供准确的结果。
完整的代码
import torchimport numpy as npimport matplotlib.pyplot as pltimport torch.nn as nnfrom sklearn import datasetsno_of_points=100centers=[[-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=http://www.srcmini.com/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 1else:return 0torch.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=1000losses=[]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如何测试感知器模型()】输出
文章图片
文章图片
推荐阅读
- PyTorch LeIF模型对CIFAR-10数据集的Pytorch测试
- PyTorch实战(测试图像识别模型(图解分析))
- 在PyTorch中测试深层神经网络(图解)
- PyTorch如何测试卷积神经网络模型((实例图解))
- PyTorch张量介绍和用法
- PyTorch预测和线性分类使用图解
- PyTorch神经网络(感知器图解)
- PyTorch一维张量用法图解
- PyTorch软件包介绍