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

基于Tensorflow搭建神经网络

-从简单线性回归到DNN

对于很多刚开始学习深度学习的同学来说,第一步总是最难的,本篇介绍如何使用tensorflow搭建神经网络,从简单的线性回归到多个隐含层的深度神经网络,带你起步带你飞~

模型训练的大致步骤如下:

加载数据集;

定义计算过程;

定义损失和优化;

进行训练;

预测测试集,计算模型准确率。

模型具体是简单线性回归还是多层神经网络,就取决于第二步定义的计算过程。下面详细解释计算过程的定义:

简单线性回归:

Y=WX+b,再熟悉不过的公式了吧,它的计算过程是怎么定义的呢?

首先定义变量W和b:

weights =tf.Variable(tf.truncated_normal([image_size * image_size, num_labels]))

biases =tf.Variable(tf.zeros([num_labels]))

然后实现计算过程,如下图所示(没错,就是这么简单):

DNN:

下图为简单的DNN模型结构示意图,激活函数使用Relu。

神经网络中每层网络的输入都是上一层输出的计算结果,以2层隐含层网络为例,计算过程代码为下:

hidden_layer1 =tf.matmul(tf_train_dataset, w1) + b1

hidden_layer2 =tf.matmul(relu1, w2) + b2

output=tf.add(tf.matmul(relu2, w3), b3)

那么,3层隐藏层,4层、5层、七八层的计算过程代码怎么写呢?看到这里,相信聪明的你一定知道怎么做了,是不是跟搭积木有点像?

善良的我,一如既往地提供了代码~

引入需要用到的包

加载数据集,并打印数据维度

将数据集维度转换为计算需要的维度

定义计算过程,损失函数和优化函数。后面也定义了预测的计算过程,其实预测的计算过程跟模型上面定义的计算过程是一样的,只是输入的数据不一样罢了。下图是简单线性回归的计算过程。

定义计算准确率的函数

训练模型,并打印出准确率

线性回归模型的准确率

一层隐藏层的计算过程定义

一层隐藏层模型的准确率

两层隐藏层的计算过程

两层隐藏层模型的准确率

Tips:

如果你使用两层隐藏层模型进行训练,很快你就会发现loss变成了Nan,恭喜你,你遇到了传说中的“梯度爆炸”。

你可以尝试以下几种方法进行调优:

1. 减小学习率;

2. 使用learning rate decay,原理与上一条相同,这种学习率会随着训练不断衰减;

3.调整参数初始化方法,初始化指定方差或者使用别的参数初始化方法,比如xavier。

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

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券