一、序言

  前面已经逐步从单神经元慢慢“爬”到了神经网络并把常见的优化都逐个解析了,再往前走就是一些实际应用问题,所以在开始实际应用之前还得把“框架”翻出来,因为后面要做的工作需要我们将精力集中在业务而不是网络本身,所以使用框架可以减少非常多的工作量,有了前面自己实现神经网络的经验,现在理解框架的一些设置也比较容易了。本篇我们就使用比较常见的Tensorflow来重置一下前面的工作。

  备注一下Tensorflow的安装:

  1)安装python3.6,高版本不支持

  2)pip install tensorflow即可

二、softmax

  在开始前需要先说下这里使用的一个新的技术“softmax”,前面我们解决的问题是“从一堆图片里识别出数字是否是9”,这里使用softmax我们可以搞定更加高深一点的问题,比如:

  “识别出图片中的数字是几”

  这就厉害了,前面我们只能识别是不是,即”二分类“,这里借助softmax我们可以识别图片是数字几的概率,即”多分类“。

  从技术上来说其实变化不大,神经网络整体结构不变,但是还记得我们之前神经网络中使用的”激活函数“不?一般最后一层使用sigmoid,意思是将输出转为0-1之间的区间值,表示为”是数字9“的概率是多少。这里使用softmax替代sigmoid,此外输出也不是一个数,而是10个数,比如:

  [0.1, 0.2, 0.3, 0.7, 0.3, 0.1, 0.2, 0.3, 0.1, 0.2]

  它的含义如下:

  0的概率:10%

  1的概率:20%

  3的概率:30%

  4的概率:70%

  ...

  相应的输入的label自然也是十个数,比如:

  [0, 0, 0, 0, 1, 0, 0, 0, 0, 0]

  它表示我们输入的图片是数字”4“,此种表示方式称为"one_hot_label"。此种输入与输出形式就是"多分类"的基础,此外我们使用的mnist数据集可以直接将label数据转为one hot形式,只需要"one_hot_label=True"。

  除了输入输出形式不一样,softmax的传播函数和反向传播肯定与sigmoid不一样了,不过借助Tensorflow强大的功能这些我们都不需要操心啦。下面我们就逐步来实现一个基于Tensorflow的神经网络。

三、创建占位符placeholder

  其实这里的输入x,y代表的分别是输入图片的向量大小784和label的向量大小10。tf是tensorflow的实体,这里tf.placeholder其实就是定义了两个空的数组:

  (784, None)和(10, None)

  placeholder得到的一维向量在后面的作用是"占位",占位的意思是在tensorflow构建神经网络时先把位置占好,真正运行时就按这个占位的样子往里面扔数据,比如X是784,输入的img也不管你啥形状了,反正就按784将输入截成一段一段的。

四、初始化参数w、b

  整体上来说与前面初始化参数差不多,变化的除了使用tf来产生随机数,还将wGroup和bGroup合并为parameters(tf框架只给输入一个参数名)。

五、传播函数

  这里tf.matmul()就是实现矩阵w与IN的乘积,再通过tf.add()实现加b。但这里的"传播函数"并没有真的做传播运算,它只是按神经网络的结构将各种运算”安排“好,运算到最后一层没有使用激活函数来计算结果,而是直接返回A。剩下的运算放到了”损失函数“中。

六、损失函数

  这里的tf.transpose()只是一个转置操作,之所以不用A.T这种方式,其实可以想到,此处的A并不是一个矩阵,它是一长串计算的结果,只有当神经网络运行起来了A才会是一个矩阵。所以这里的A其实是一系列“运算”的合集,使用tf.transpose()就是叠加了一个转置运算。

  tf.reduce_mean()在这里就是计算"损失"的,不过暂时也不是真的计算了,只是将这个运算"安排"好了,最终结果返回为costFun

七、完整实现

  等等,还没有说"反向传播"呢?不要慌,这里慢慢来。

  在model中,placeholder、initialize_parameters、forward、costCAL都是前面讲过的,只是"构建"神经网络计算的过程。

  optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(costFun)

  这一句就是构建反向传播,其中AdamOptimizer表明使用Adam优化算法,minimize指明使用的损失函数,其实总结起来就是我们的反向传播需要使用Adam优化算法来使costFun构建的损失函数趋向于最小。

  _ , cost = sess.run([optimizer, costFun], feed_dict={X: train_img, Y: train_label})

  这一句就是真的运行网络了,feed_dict就是按前面"占位符"的形状将train_img和train_label输入到网络中,[optimizer, costFun]是指明网络的“向前传播+反向传播”和损失计算。

  parameters = sess.run(parameters)

  只是将优化后的参数按原样输出回来。

 八、总结

  本节只是简单将之前实现过的神经网络用Tensorflow再实现了一次,其次还引入了softmax将二分类扩展为多分类。Tensorflow是后面研究的基础,可能再开一章单独讲一讲。

  本节完整实现代码请关注公众号“零基础爱学习”回复AI14获取。

【零基础】使用Tensorflow实现神经网络的更多相关文章

  1. Python学习宝典,Python400集让你成为从零基础到手写神经网络的Python大神

    当您学完Python,你学到了什么? 开发网站! 或者, 基础语法要点.函数.面向对象编程.调试.IO编程.进程与线程.正则表达式... 当你学完Python,你可以干什么? 当程序员! 或者, 手写 ...

  2. kaggle赛题Digit Recognizer:利用TensorFlow搭建神经网络(附上K邻近算法模型预测)

    一.前言 kaggle上有传统的手写数字识别mnist的赛题,通过分类算法,将图片数据进行识别.mnist数据集里面,包含了42000张手写数字0到9的图片,每张图片为28*28=784的像素,所以整 ...

  3. 【雕爷学编程】MicroPython动手做(03)——零基础学MaixPy之开机测试

    1.几个知识点(1)MicroPython 是 Python 3 语言的精简高效实现 ,包括Python标准库的一小部分,并针对嵌入式微控制器(单片机)和受限制的环境进行了优化,它是Python延伸出 ...

  4. (转)一文学会用 Tensorflow 搭建神经网络

    一文学会用 Tensorflow 搭建神经网络 本文转自:http://www.jianshu.com/p/e112012a4b2d 字数2259 阅读3168 评论8 喜欢11 cs224d-Day ...

  5. 编程零基础应当如何开始学习 Python?

    提前说一下,这篇福利多多,别的不说,直接让你玩回最有手感的怀旧游戏,参数贴图很方便自己可以根据喜好修改哦. 本篇通过以下四块展开,提供大量资源对应. 选一个好版本 有没有看过<在下坂本,有何贵干 ...

  6. 作为比湖南还火的python网红,零基础要如何系统的开始学习呢?

    Python(发音:英[?pa?θ?n],美[?pa?θɑ:n]),是一种面向对象.直译式电脑编程语言,也是一种功能强大的通用型语言,已经具有近二十年的发展历史,成熟且稳定.它包含了一组完善而且容易理 ...

  7. 一文学会用 Tensorflow 搭建神经网络

    http://www.jianshu.com/p/e112012a4b2d 本文是学习这个视频课程系列的笔记,课程链接是 youtube 上的,讲的很好,浅显易懂,入门首选, 而且在github有代码 ...

  8. 零基础学习Python数据分析

    网上虽然有很多Python学习的教程,但是大多是围绕Python网页开发等展开.数据分析所需要的Python技能和网页开发等差别非常大,本人就是浪费了很多时间来看这些博客.书籍.所以就有了本文,希望能 ...

  9. (转)零基础入门深度学习(6) - 长短时记忆网络(LSTM)

    无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的技术,会不会感觉马上就o ...

随机推荐

  1. wepy框架 怎么在template模板中使用函数

    呵呵.介绍说是类似vue,用起来真累人,就想在模板中使用个函数都要查N久的文档才知道. 具体要怎么操作呢? 要先创建个wxs脚本文件,在里面定义函数或其它的,然后在页面或组件中引入这文件,就可以在模板 ...

  2. EntityFramework进阶(一)- DbContext与ObjectContext互转

    本系列原创博客代码已在EntityFramework6.0.0测试通过,转载请标明出处 EF中我们常用的是DbContext作为上下文,如果要想获取元数据等信息还是要用到ObjectContext这个 ...

  3. SMARTY的知识

    smarty的原理: <?php class Smarty { $ldelimiter = "{";//左分隔符 $rdelimiter = "}";// ...

  4. 【日语】日语单词N3_N4_N5

    日语单词N3_N4_N5 单 词 讲 解 あ行单词 ああ:0[副]那样.那种 例句:ああ言うことはしないほうがいい.那样的事情最好不做. 電車の窓からごみを棄てているああ言うことはしないほうがいい. ...

  5. 解决Apache启动错误:httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

    启动apache遇到提示: [root@bqh-119 conf]# ../bin/apachectl -thttpd: apr_sockaddr_info_get() failed for bqh- ...

  6. centos7 配置yum源

    简单粗暴方法: 1.首先在本机上测试 ping www.baidu.com 是否通,不通的话配置网卡ip.dns等. 2.进入yum路径下: cd /etc/yum.repos.d/ 3.下载repo ...

  7. linux命令详解

    命令语法介绍 命令   [参数] [文件或路径] rm       -f                  /etc/hosts 注:命令和参数至少一个空格(可以多个连着写)      路径不带空格  ...

  8. .symtab

    参考:剖析.o文件ELF组成 目标文件 .symtab中记录的符号是从.s文件来的,所以.s这个汇编文件很关键. .symtab所记录符号的种类 示例代码 a.c ; static float a_v ...

  9. 偶然发现的几个OPENWRT工具安装包

    https://rychly.gitlab.io/openwrt-packages/ 有心人已经打好包了,下载拿用 例如:dropbrute https://rychly.gitlab.io/open ...

  10. Django drf: 跨域机制

    一.同源策略 二.CORS(跨域资源共享)简介 三.CORS基本流程 四.CORS两种请求流程 五.Django项目中支持CORS 一.同源策略 同源策略是一种约定,它是浏览器最核心的最基本的安全功能 ...