首先回忆如何训练一个逻辑回归模型,建立一个Logistic回归模型是:你将指定如何计算输出给定输入特征x和参数w和b,在逻辑回归函数预测f(x)=g,它是应用于w*x+b的Z状结肠函数,所以如果z=np.dot(w,x)+b,f_x=1/(1+np.exp(-z)),所以第一步,指定什么是Logistic回归的输入输出函数,这取决于输入x和模型的参数,第二步是训练Logistic回归模型,是指定损失函数和成本函数,损失函数说的是逻辑回归x的输出f和地面真值标签,训练集中的实际标签是Y,那么在单个训练例子上的损失是loss=-y*np.log(f_x)-(1_y)*np.log(1-f_x),这是一个衡量Logistic回归在单个训练示例上做得有多好的指标,给定损失函数的这个定义,然后定义成本函数,成本函数是参数w和b的函数,这只是所有m训练的平均值,在M训练示例上计算损失函数的示例,从X1Y1到XmYm,我们使用的损失函数是学习算法输出的函数,地面真值标签是在单个训练示例上计算的,而成本函数J是在整个训练集上计算的损失函数的平均值,这是在建立逻辑回归时所做的第二步,逻辑回归模型的最后一步是使用算法,特别是梯度下降最小化WB的代价函数J,使其最小化为参数w和b的函数,用梯度下降法最小化成本j作为参数的函数,其中对w和b进行更新。所以有了这三个步骤,步骤一:指定如何计算输出,给定输出x和参数,步骤二:成本细节,步骤三:最小化成本函数,同样的步骤是我们如何在张量流中训练神经网络时所用到的。
这三个步骤是如何训练神经网络的?
第一步是指定如何计算输出,给定输入x和参数w和b,使用代码指定神经网络,这实际上足以指定前向传播所需的计算或者对于推理算法
第二步是编译模型,告诉它你想用什么损失,下边是用来指定这个损失函数的代码,即二元交叉熵损失函数,一旦指定了这个损失,在这个训练集上取平均值,给出了神经网络的成本函数。
第三步是调用一个函数,试图最小化成本,作为神经网络参数的函数。
下边是详细的介绍
第一步指出如何计算输出,给定输入X和参数w和b,此代码段指定神经网络的整个体系结构,第一个隐藏层有25个隐藏单元,然后是15,然后是一个输出单元,我们用Z状结肠的激活值,所以基于这个代码段,我们也知道参数是什么,第一层w[1]b[1],第二层参数和第三层参数分别是w[2]b[2]w[3]b[3],所以这个代码段指定了神经网络的整个架构,因此告诉TensorFlow它所需要的一切,为了将输入X作为函数计算,为了计算输出f(X3),作为输入X的函数,这里的参数我们写了WlBl。
继续第二步的第二步,必须指定损失函数是什么,这也将定义我们用来训练神经网络的成本函数,对于mnist零,一位数分类问题是一个二进制分类问题,到目前为止,最常用的损失函数是这个,它实际上是和我们所得到的相同的损失函数,对于Logistic回归是L(f(x),y),Y是地面真相标签,有时也称为目标标签,x的y和f现在是神经网络的输出,所以用张量流的术语来说,这个损失函数就称为二元交叉熵,语法是让TensorFlow编译神经网络,使用此损失函数,TensorFlow知道你想要最小化的成本是平均值,取所有M训练样本损失的平均值,并优化这个成本函数,将导致神经网络与二进制分类数据拟合,如果你想解决回归问题而不是分类问题,可以告诉TendorFlow使用不同的损失函数编译您的模型,例如,如果你有回归问题,如果你想最小化误差的平方损失,这是误差损失的平方,如果你的学习算法用一个目标输出f(x),或者是Y的基本真值标签,这是误差平方的一半,然后可以在TensorFlow中使用这个损失函数,更直观的命名为均方误差损失函数,然后张量流会试图最小化均方误差,在这个表达式中,用大写的J(W,B)来表示成本函数,成本函数是神经网络中所有参数的函数,所以你可以把W,B看作包括整个神经网络中的所有的W,B参数,所以如果你优化关于w和b的成本函数,会试图优化关于神经网络中的所有参数以及上面的,f(x)写成神经网络的输出,也可以写成Fw,b(x),如果想强调神经网络的输出,作为x的函数,取决于神经网络的所有参数和所有层,这就是损失函数和成本函数,在张量流中,这被称为二元交叉熵损失函数,从统计学上看,上面的这个函数叫做交叉熵损失函数,这就是交叉熵的意思,二进制这个词只是强调或指出这是二进制分类问题,因为这个图像要么是零要么是一。
最后,要求TendorFlow最小化成本函数,你可能还记得第一道菜的梯度下降算法,如果你使用梯度下降来训练神经网络的参数,然后你将重复对每一层l和每一个单位j,根据Wj更新如下,关于wb的费用函数j的那个函数,对于参数b也是如此,在做了100次梯度下降之后,能得到一个很好的参数值,所以为了使用梯度下降,需要计算的关键是这些偏导数项,神经网络训练的标准是使用一种叫做反向传播的算法,为了计算这些偏导数项,TensorFlow可以完成这些事,它在这个名为FIT的函数中实现了反向传播,所以所要做的是调用模型点拟合x y是你的训练集,并告诉它这样做一百次迭代或一百个时代,张量流可以使用比梯度下降更快一点的算法。