查看原文
其他

PyTorch 教程-感知器模型

点击关注👉 Python架构师 2024-02-11
整理:python架构师

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

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

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

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

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

资源分享

👉点击领取:最全Python资料合集

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

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

现在,最大的问题是计算机如何知道如何得出这个线性模型。为此,我们将计算与该模型相关的误差,然后调整模型的参数以最小化误差并正确分类数据点。我们将使用 交叉熵 (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_size 和 output_size 作为参数传递。现在,打印随机权重和偏置值,这些值被分配给它,如下所示:
model= Perceptron_model(2,1) print(list(model.parameters()))
在此之前,为了确保我们的随机结果的一致性,我们可以使用 torch 手动设置随机数生成器的种子,并设置种子为2,如下所示:
torch.manual_seed(2)

步骤3

我们的下一步是通过解压模型提取模型参数。这些参数以包含两个元素的列表的形式提取,即 A、B,并打印两个值,如下所示:
[A,b]=model.parameters() A1,A2=A.view(2) B1=B[0] print(A1.item(), A2.item(),B1.item())

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

为了清晰起见,我们使用函数将值 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')

 
热门推荐
继续滑动看下一个

PyTorch 教程-感知器模型

点击关注👉 Python架构师
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存