一、序言

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

    上期我们讲了遍历的祖先.后代和同胞的问题,现在我们讲讲遍历遍历过滤 三个最基本的过滤方法是:first(), last() 和 eq(),它们允许您基于其在一组元素中的位置来选择一个特定的元素.其他过 ...

  2. 移动端调试工具Vconsole

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. 【Linux】修改CentOS7启动方式

    ## 查看当前系统的默认启动方式: systemctl get-default ## 查看如下文件 cat /etc/inittab 可以看到 此文件中提示了如何进行修改默认的启动方式 ## 命令行启 ...

  4. 软工作业-----Alpha版本第一周小结

            软工作业-----Alpha版本第一周小结   Part1.第一周周计划记录 姓名 学号 周前计划安排 每周工作记录 自我打分 yrz(队长) 1417 1.进行任务分析 2.任务分配 ...

  5. java相关网址汇总1

    Java网站汇总 官方 框架 数据库 资源网站 视频学习网站 开发工具 其他工具 github/gitee框架项目 社区 博客/个人 官方 Sun公司网站Sun公司中文网站J2SE下载网站JavaSE ...

  6. k8s的组件

    1.Master组件 1.API Server K8S对外的唯一接口,提供HTTP/HTTPS RESTful API,即kubernetes API.所有的请求都需要经过这个接口进行通信.主要负责接 ...

  7. 【Java】Javadoc的使用

    一.名词解释 javadoc是从程序源代码中抽取类.方法.成员等注释形成一个和源代码配套的API帮助文档.也就是说,只要在编写程序时以一套特定的标签作注释,在程序编写完成后,通过Javadoc就可以同 ...

  8. 如何在vscode中用standard style 风格去验证 vue文件

    1 JavaScript Standard Style简介 本工具通过以下三种方式为你(及你的团队)节省大量时间: 无须配置. 史上最便捷的统一代码风格的方式,轻松拥有. 自动代码格式化. 只需运行 ...

  9. 1. let与const

    1.ES6 新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. var a = []; for (var i = 0;i<10;i++) ...

  10. VMWARE许可文件

    VMware 14 Pro 永久许可证激活密钥FF31K-AHZD1-H8ETZ-8WWEZ-WUUVACV7T2-6WY5Q-48EWP-ZXY7X-QGUWD