1.Tensorflow实现
继续手写数字识别的运行示例,将此图像识别为0或1。这里我们使用的是如下神经网络架构。上周我们有一个输入x,即图像;第一层有25个神经元,第二层有15个神经元,输出层有一个神经元,如下所示:
如果给你一个包含图像x的训练样本集,像标记为y的证明一样, 你将如何训练这个新网络的参数?下面是在tensorflow中用于训练此网络的代码:(第一部分和上周一样,用Sequential函数将三个层串起来;第二部分是让tensorflow编译模型并告诉tensorflow模型最关键的编译模式是指定你要使用的最后一个函数是什么(这里是loss),在这种情况下,我们将使用稀疏分类交叉熵这个名称(BinaryCrossentropy),第三步指定了最后一个函数fit告诉tensorflow使用最后一个来拟合你在步骤①中指定的模型 ②到数据集X Y)如下所示:
我们必须决定运行多少步来创建以及运行多长时间来创建。epochs是一个技术术语,表示你可能想要运行多少步来创建descent。 注:上图第一步是告诉tensorflow如何计算推理;第二步是用的函数;第三步是训练模型。
2.模型训练细节
在查看神经网络训练的细节之前,来回想一下之前是如何训练逻辑回归模型的: 建立逻辑回归模型的第一步是你会指定如何在给定输入特征x和参数w和b的情况下计算输出。也就是指定逻辑回归的输入输出函数。这取决于输入x和模型的参数。上周我们说逻辑回归模型是预测x的f等于g,应用于w·x+b的sigmoid函数。 第二步是训练识字回归模型,指定损失函数和成本函数: 第三步也是最后一步是使用算法,最小化我们训练逻辑回归的成本函数。特别是梯度下降以最小化成本函数J(w,b)将其最小化,为参数w和b的函数。我们使用梯度下降最小化作为参数函数的成本函数J。 现在让我们来看以上三步如何映射到训练神经网络的: 第一步是计算给定输入x的输出和用这个熟悉的代码片段完成的参数w和b,上周指定的神经网络,这实际上足以指定向前传播所需的计算或推理。 第二步时编译模型并告诉它你想使用什么损失函数的代码。二元交叉熵损失函数,一旦你指定这个损失取平均值,整个训练集还为你提供神经网络的成本函数。 第三步是调用函数以尽量减少成本 神经网络参数的函数。 现在更详细地了解这三个步骤训练神经网络的上下文 ,以下代码指定了整个架构。 数字分类问题是一个二元分类问题,目前最常见,我们要使用的损失函数是这个实际上与我们使用的损失函数相同,但在Tensorflow的术语中,这种损失函数陈为二元交叉熵,语法是使用这个损失函数来编译神经网络。 在指定了单个训练示例的损失后,TensorFlow知道你想要最小化的成本是平均值,取所有训练样例的平均值,所有训练示例的损失。优化这个成本函数将导致神经网络适合你的二进制分类数据。 如果你想解决回归问题而不是分类问题,你可以告诉TensorFlow使用不同的损失函数来编译你的模型。 如果你使用梯度下降来训练神经网络的参数,那么你是重复的对每一层l和每个单元j,根据wlj减去学习率更新wlj。
事实上,神经网络训练的标准是使用一种反向传播的算法来计算这些偏导数项。tensorflow在名为fit的函数中实现了反向传播,所以我们需要做的就是调用model.fit , x ,y 作为你的训练集,并告诉它这样做100次迭代或100个epoch 直接使用库,今天使用TensorFlow或PyTorch之类的库
3.Sigmoid激活函数的替代方案
|