感知器模型的目的是对我们的数据进行分类, 并根据先前标记的数据告诉我们发生癌症的机会, 即最大或最小。
我们的模型已经过训练, 现在, 我们测试模型以顺利了解其工作, 并给出或不给出准确的结果。为此, 我们必须在代码中添加一些其他功能。
有以下步骤来测试我们的模型:
步骤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 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')
输出
评论前必须登录!
注册