首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

前言

今天我尝试构建一个神经网络并演示前向传播和反向传播的代码。

首先定义样本和label

首先我们需要创建我们的样本, 由于是监督学习,所以还是需要label的。 为了简单起见,我们只创建一个样本进行训练, 可以当做是在模拟随机梯度下降的过程。 代码如下:

我们使用tf中的常量来创建样本和label。 这是一个有两个特征的样本。

然后定义每一层的权重和偏差变量

根据上一节讲的内容,我们使用tf的变量来生成权重和偏差。

神经网络模型

我们的神经网络模型大概如下图:

上面我们尝试创建一个只有两个特征的输入层, 只有一层,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函数,并且把损失函数作为参数传递过去。

开始训练

完整的代码

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180408G08DRZ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券