人工智能培训

搜索

深度学习基础-使用 tensorflow 构建一个简单神经网络

[复制链接]
喀喀喀2 发表于 2018-4-9 16:13:46 | 显示全部楼层 |阅读模式
喀喀喀2 2018-4-9 16:13:46 355 0 显示全部楼层
前言
今天我尝试构建一个神经网络并演示前向传播和反向传播的代码。
首先定义样本和label
首先我们需要创建我们的样本, 由于是监督学习,所以还是需要label的。 为了简单起见,我们只创建一个样本进行训练, 可以当做是在模拟随机梯度下降的过程。 代码如下:
我们使用tf中的常量来创建样本和label。 这是一个有两个特征的样本。
然后定义每一层的权重和偏差变量
根据上一节讲的内容,我们使用tf的变量来生成权重和偏差。
神经网络模型
我们的神经网络模型大概如下图:
P6p1T1Yu1A2PZyO2.jpg


上面我们尝试创建一个只有两个特征的输入层, 只有一层,3个神经元的隐藏层,以及最后的输出层。 由于我们要做的是二分类,所以输出层只有一个神经元。
前向传播算法
好了现在我们可以来看看前向传播了,如果对前向传播还不太了解的话,请复习一下深度学习的基础概念~ 这里只做简单的介绍。 首先在输入层我们有两个特征输入就是x1和x2,他们都会传递给隐藏层的3个神经元中进行训练。每一个神经元都是输入层取值的加权和,就像图出计算的一样,分别计算出a11,a12和a13. 同样的输出层的计算是上一层的每一个神经元的取值的加权和,也正如上图计算的一样。这就是整个的前向传播算法,上一层的计算结果是下一层的输入,以此类推。对数学比较熟悉的同学一定猜到了,权重(w)的计算过程就是一个矩阵乘法。 首先是由x1和x2组成1*2的矩阵, 以及隐藏层的每一个神经元上对应的权重(w) 组合的2*3的矩阵(2个输入特征的w,3个神经元),他们两个做矩阵乘法就是这一层的前向传播算法,结果是一个1*3的矩阵。再接着跟输出层的3*1的矩阵(3个输入特征的w和1个神经元)继续做矩阵乘法。就是最后的结果。 很幸运的是tf为我们实现了做矩阵乘法的函数就是matmul。 那么上面这个前向传播的过程就是如下的代码:
损失函数
我们需要一个损失函数来计算我们预测的结果与真实值的差距。 tf为我们实现了众多的损失函数。由于这我们要做二分类问题,那么我们就需要sigmoid作为激活函数,所以我们也要使用tf为sigmoid实现的损失函数。
sigmoid_cross_entropy_with_logits的第一个参数是我们的预测值,第二个参数是真实的值,也就是我们的labels。 刚才我们计算前向传播的时候再输出层并没有使用任何激活函数,是因为我们tf的损失函数中会给输出层加入相应的激活函数。 也就是sigmoid_cross_entropy_with_logits已经给输出层加入了sigmoid激活函数了。
反向传播与梯度下降
为了实现梯度下降算法,我们需要进行反向传播计算来求得每一个参数对应损失函数的导数。所幸的是tf同样为我们提供了各种优化的反向传播算法。 这里我们使用专门的梯度下降。如下:
GradientDescentOptimizer是梯度下降的优化算法,参数是学习率,这里我们设置为0.01。 同时优化目标是最小化损失函数。 所以是minimize函数,并且把损失函数作为参数传递过去。
开始训练
完整的代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 返回列表 发新帖

喀喀喀2当前离线
新手上路

查看:355 | 回复:0

快速回复 返回顶部 返回列表