了解感知器模型和一些关键术语(如交叉熵, S形梯度下降等)至关重要。那么, 感知器模型是什么, 它有什么作用?
让我们看一个例子来理解感知器模型。想象一下, 有一家医院每年要对数千名患者进行手术, 并告诉你创建一个预测模型, 该模型可以准确地确定某人是否可能患有癌症。
借助先前确定的数据, 我们可以根据某人的年龄(横穿x轴)和其吸入的烟草量(横穿y轴)来预测某人是否患有癌症。
因此, 年龄和吸烟量较高的人患癌的机会更高, 如果年龄和烟草量最小的人患癌的机会也最小。
最初, 每个绿色点表示患癌的可能性较高, 最初将其标记为零, 而每个蓝色点则显示患癌的可能性较低, 最初将其标记为1。
因此, 我们将从一个不能正确分类数据的随机模型开始, 然后通过某种优化算法对模型进行训练。该模型将经过多次迭代训练, 直到达到参数值为止, 该参数值可以正确分类我们的数据。我们使用以前标记的数据, 此处的所有内容都标记为1, 此处的所有内容都标记为零。
我们使用这些标记的数据得出一个预测模型, 该模型将我们的数据分为两个离散的类别。使用该模型, 我们现在可以基于该点是位于线的下方还是上方, 对没有标签的新输入数据进行预测。我们将训练我们的模型, 该模型可以确定此人属于第一类, 因此他们很可能健康。
现在, 最大的问题是计算机如何提出线性模型。为此, 我们将计算与此模型相关的误差, 然后重新调整模型的参数, 以使误差最小化并对数据点进行正确分类。我们将使用交叉熵()函数查找错误, 并使用S型梯度下降来优化参数。让我们开始执行代码, 在代码中我们将看到如何使用交叉熵函数和S形梯度下降。
因此, 我们将处理上一节中创建的数据集。现在, 借助此数据集, 我们将开始实现代码并创建基本的感知器模型。
首先, 我们将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()方法与线性回归模型完全不同。我们在将self替换为第一个参数之前定义forward(), 然后, 我们需要传递输入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.manual_seed(2)
第三步
我们的下一步是通过解压缩模型来提取模型参数。这些参数以具有两个元素的列表的形式提取, 即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')
评论前必须登录!
注册