个性化阅读
专注于IT技术分析

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

plt.plot(p1.numpy()[0], p1.numpy()[1], 'ro')
plt.plot(p2.numpy()[0], p2.numpy()[1], 'ko')
PyTorch测试感知器模型

第三步

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

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

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

PyTorch测试感知器模型

步骤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)))
PyTorch测试感知器模型

显然, 我们的模型可以顺利运行, 并使用随机数据为我们提供准确的结果。


完整的代码

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

输出

PyTorch测试感知器模型
PyTorch测试感知器模型

赞(0) 打赏
未经允许不得转载:srcmini » PyTorch如何测试感知器模型?
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

微信扫一扫打赏