PyTorch 教程-感知器模型
了解感知器模型及一些关键术语如交叉熵、Sigmoid梯度下降等是很重要的。那么,什么是感知器模型,它是如何工作的呢?
让我们通过一个例子来理解感知器模型。想象一家每年都会为数千名患者进行手术的医院,请你创建一个预测模型,能够准确判断某人是否可能患癌症。
借助以前确定的数据,我们根据年龄(沿x轴)和吸入的烟草数量(沿y轴)来预测某人是否可能患癌症。
因此,年龄和吸烟量较大的人患癌症的可能性较高,而年龄和吸烟量较小的人患癌症的可能性较小。
每个绿色点表示癌症的可能性较高,最初被分配标签零;每个蓝色点表示癌症的可能性较低,最初被分配标签一。
因此,我们将从一个无法正确分类我们的数据的随机模型开始,然后通过某种优化算法对模型进行训练。该模型将通过多次迭代进行训练,直到达到能够正确分类数据点的参数值。我们使用之前标记的数据,这里所有的数据都标记为零,这里所有的数据都标记为一。
我们使用这些标记的数据来建立一个预测模型,将我们的数据分类为两个离散的类别。利用该模型,我们现在可以对没有标签的新输入数据进行预测,判断该点是在直线下方还是上方。我们将训练一个模型,该模型能够确定这个人属于类别一,即他们很可能是健康的。
现在,最大的问题是计算机如何知道如何得出这个线性模型。为此,我们将计算与该模型相关的误差,然后调整模型的参数以最小化误差并正确分类数据点。我们将使用 交叉熵 (cross-entropy) 函数来找到误差,使用 Sigmoid梯度下降 (Sigmoid gradient descent) 来优化参数。让我们开始实现代码,在其中我们将看到交叉熵函数和Sigmoid梯度下降如何被使用。
因此,我们将在上一节中创建的数据集上工作。现在,借助这个数据集,我们将开始实现代码并创建一个基本的感知器模型。
def Scatter():
plt.scatter(x[y==0,0],x[y==0,1])
plt.scatter(x[y==1,0],x[y==1,1])
为了创建基本的感知器模型,我们需要按照以下步骤进行:
步骤1
首先,我们要创建一个线性模型。为此,我们必须创建我们的模型类,就像我们在线性回归模型中使用 init() 方法和 forward() 方法一样。init() 方法与以前相似,但 forward() 方法与线性回归模型有很大不同。我们定义 forward() 与以前相似,只是将第一个参数替换为 self,然后我们需要传递输入 x。
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=self.linear(X)
return pred
def forward(self,x):
pred=torch.sigmoid(self.linear(x))
return pred
我们的初始化已经完成,现在我们准备好使用它了。
步骤2
model= Perceptron_model(2,1)
print(list(model.parameters()))
torch.manual_seed(2)
步骤3
[A,b]=model.parameters()
A1,A2=A.view(2)
B1=B[0]
print(A1.item(), A2.item(),B1.item())
在这里,A 是权重,B 是偏置。
def get_perameters():
return(A1.item(),A2.item(),B[0].item())
步骤4
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()
plotfit('Initial Model')