了解感知器模型及一些关键术语如交叉熵、Sigmoid梯度下降等是很重要的。那么,什么是感知器模型,它是如何工作的呢?

让我们通过一个例子来理解感知器模型。想象一家每年都会为数千名患者进行手术的医院,请你创建一个预测模型,能够准确判断某人是否可能患癌症。

借助以前确定的数据,我们根据年龄(沿x轴)和吸入的烟草数量(沿y轴)来预测某人是否可能患癌症。

4-1.jpg

因此,年龄和吸烟量较大的人患癌症的可能性较高,而年龄和吸烟量较小的人患癌症的可能性较小。

每个绿色点表示癌症的可能性较高,最初被分配标签零;每个蓝色点表示癌症的可能性较低,最初被分配标签一。

4-2.jpg

因此,我们将从一个无法正确分类我们的数据的随机模型开始,然后通过某种优化算法对模型进行训练。该模型将通过多次迭代进行训练,直到达到能够正确分类数据点的参数值。我们使用之前标记的数据,这里所有的数据都标记为零,这里所有的数据都标记为一。

4-3.jpg

我们使用这些标记的数据来建立一个预测模型,将我们的数据分类为两个离散的类别。利用该模型,我们现在可以对没有标签的新输入数据进行预测,判断该点是在直线下方还是上方。我们将训练一个模型,该模型能够确定这个人属于类别一,即他们很可能是健康的。

4-4.jpg

现在,最大的问题是计算机如何知道如何得出这个线性模型。为此,我们将计算与该模型相关的误差,然后调整模型的参数以最小化误差并正确分类数据点。我们将使用 交叉熵 (cross-entropy) 函数来找到误差,使用 Sigmoid梯度下降 (Sigmoid gradient descent) 来优化参数。让我们开始实现代码,在其中我们将看到交叉熵函数和Sigmoid梯度下降如何被使用。

因此,我们将在上一节中创建的数据集上工作。现在,借助这个数据集,我们将开始实现代码并创建一个基本的感知器模型。

首先,我们将 plt.scatter(x[y==0,0],x[y==0,1])plt.scatter(x[y==1,0],x[y==1,1]) 放入一个函数中以备将来使用,如下所示:

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

之后,我们通过将我们的数据 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  

这还不够,我们必须通过应用 sigmoid() 方法将值转换为概率,如下所示:

def forward(self,x):  
    pred=torch.sigmoid(self.linear(x))  
    return pred  

我们的初始化已经完成,现在我们准备好使用它了。

步骤2

我们将使用 Perceptron_model() 构造函数初始化一个新的线性模型,并将 input_sizeoutput_size 作为参数传递。现在,打印随机权重和偏置值,这些值被分配给它,如下所示:

model= Perceptron_model(2,1)  
print(list(model.parameters()))  

在此之前,为了确保我们的随机结果的一致性,我们可以使用 torch 手动设置随机数生成器的种子,并设置种子为2,如下所示:

torch.manual_seed(2)  

步骤3

我们的下一步是通过解压模型提取模型参数。这些参数以包含两个元素的列表的形式提取,即 AB,并打印两个值,如下所示:

[A,b]=model.parameters()  
A1,A2=A.view(2)  
B1=B[0]  
print(A1.item(), A2.item(),B1.item())  

在这里,A 是权重,B 是偏置。

4-5.png

为了清晰起见,我们使用函数将值 A1.item()A2.item()B1[0].item() 返回如下:

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

4-6.png

4-7.png

标签: Pytorch, Pytorch教程, Pytorch安装, Pytorch入门, Pytorch下载, Pytorch指南, Pytorch编程, Pytorch入门教程, Pytorch初级教程, Pytorch进阶, Pytorch高级教程, Pytorch学习, Pytorch库