📅  最后修改于: 2020-11-11 00:47:22             🧑  作者: Mango
了解感知器模型和一些关键术语(如交叉熵,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作为参数传递。现在,print分配给它的随机权重和偏差值,如下所示:
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())
第四步
现在,我们以列表形式提取的参数绘制线性模型。我们使用标题,线方程等。我们创建一个用户定义函数来绘制数据。让我们看一下绘制线性模型的代码。
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')