tensorFlow见基础

实验

MNIST数据集介绍

MNIST是一个手写阿拉伯数字的数据集。
其中包含有60000个已经标注了的训练集,还有10000个用于测试的测试集。
本次实验的任务就是通过手写数字的图片,识别出具体写的是0-9之中的哪个数字。
 
理论知识回顾

一个典型的浅层神经网络结构如下:
  1. 上图所示的是一个只有一层隐藏层的浅层神经网络
  2. 我们有3个输入层节点,分别对应i[1] i[2] i[3]
  3. 隐藏层有4个节点,分别对应h[0] h[1] h[2] h[3],对应的激活函数为ReLu函数
  4. 对于典型的二分类任务,我们只需要1个输出节点,就是out节点,对应的激活函数是softmax函数

激活函数定义(activation function):

模型设计

  1. MNIST数据一共有784个输入,所以我们需要一个有784个节点的输入层。
  2. 对于中间层,我们设置为784个节点,使用的激活函数为ReLu
  3. MNIST数据使用One-Hot格式输出,有0-9 10个label,分别对应是否为数字0-9,所以我们在输出层有10个节点,由于0-9的概率是互斥的,我们使用 Softmax 函数作为该层的激活函数

数据准备

首先我们需要先下载MNIST的数据集。使用以下的命令进行下载:

wget https://devlab-1251520893.cos.ap-guangzhou.myqcloud.com/t10k-images-idx3-ubyte.gz
wget https://devlab-1251520893.cos.ap-guangzhou.myqcloud.com/t10k-labels-idx1-ubyte.gz
wget https://devlab-1251520893.cos.ap-guangzhou.myqcloud.com/train-images-idx3-ubyte.gz
wget https://devlab-1251520893.cos.ap-guangzhou.myqcloud.com/train-labels-idx1-ubyte.gz

实例代码

  1. import numpy as np
  2. import tensorflow as tf
  3. from tensorflow.examples.tutorials.mnist import input_data
  4.  
  5. def add_layer(inputs, in_size, out_size, activation_function=None):
  6. W = tf.Variable(tf.random_normal([in_size, out_size]))
  7. b = tf.Variable(tf.zeros([1, out_size]) + 0.01)
  8.  
  9. Z = tf.matmul(inputs, W) + b
  10. if activation_function is None:
  11. outputs = Z
  12. else:
  13. outputs = activation_function(Z)
  14.  
  15. return outputs
  16.  
  17. if __name__ == "__main__":
  18.  
  19. MNIST = input_data.read_data_sets("./", one_hot=True)
  20.  
  21. learning_rate = 0.05
  22. batch_size = 128
  23. n_epochs = 10
  24.  
  25. X = tf.placeholder(tf.float32, [batch_size, 784])
  26. Y = tf.placeholder(tf.float32, [batch_size, 10])
  27.  
  28. l1 = add_layer(X, 784, 1000, activation_function=tf.nn.relu)
  29. prediction = add_layer(l1, 1000, 10, activation_function=None)
  30.  
  31. entropy = tf.nn.softmax_cross_entropy_with_logits(labels=Y, logits=prediction)
  32. loss = tf.reduce_mean(entropy)
  33.  
  34. optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)
  35.  
  36. init = tf.initialize_all_variables()
  37.  
  38. with tf.Session() as sess:
  39. sess.run(init)
  40.  
  41. n_batches = int(MNIST.train.num_examples/batch_size)
  42. for i in range(n_epochs):
  43. for j in range(n_batches):
  44. X_batch, Y_batch = MNIST.train.next_batch(batch_size)
  45. _, loss_ = sess.run([optimizer, loss], feed_dict={X: X_batch, Y: Y_batch})
  46. if j == 0:
  47. print "Loss of epochs[{0}] batch[{1}]: {2}".format(i, j, loss_)
  48.  
  49. # test the model
  50. n_batches = int(MNIST.test.num_examples/batch_size)
  51. total_correct_preds = 0
  52. for i in range(n_batches):
  53. X_batch, Y_batch = MNIST.test.next_batch(batch_size)
  54. preds = sess.run(prediction, feed_dict={X: X_batch, Y: Y_batch})
  55. correct_preds = tf.equal(tf.argmax(preds, 1), tf.argmax(Y_batch, 1))
  56. accuracy = tf.reduce_sum(tf.cast(correct_preds, tf.float32))
  57.  
  58. total_correct_preds += sess.run(accuracy)
  59.  
  60. print "Accuracy {0}".format(total_correct_preds/MNIST.test.num_examples)

代码讲解

add_layer 函数

允许用户指定上一层的输出节点的个数作为input_size, 本层的节点个数作为output_size, 并指定激活函数activation_function 可以看到我们调用的时候位神经网络添加了隐藏层1输出层
 
执行结果:
  1. Loss of epochs[0] batch[0]: 219.555664062
  2. Loss of epochs[1] batch[0]: 4.43757390976
  3. Loss of epochs[2] batch[0]: 6.34549808502
  4. Loss of epochs[3] batch[0]: 4.51894617081
  5. Loss of epochs[4] batch[0]: 1.93666791916
  6. Loss of epochs[5] batch[0]: 1.16164898872
  7. Loss of epochs[6] batch[0]: 2.4195971489
  8. Loss of epochs[7] batch[0]: 0.164100989699
  9. Loss of epochs[8] batch[0]: 2.35461592674
  10. Loss of epochs[9] batch[0]: 1.77732157707
  11. Accuracy 0.9434

可以看到经过10轮的训练,准确度大约在94%左右

tensorFlow(四)浅层神经网络的更多相关文章

  1. Tensorflow MNIST浅层神经网络的解释和答复

    本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/51416540 看到之前的一篇博文:深入 ...

  2. deeplearning.ai 神经网络和深度学习 week3 浅层神经网络 听课笔记

    1. 第i层网络 Z[i] = W[i]A[i-1] + B[i],A[i] = f[i](Z[i]). 其中, W[i]形状是n[i]*n[i-1],n[i]是第i层神经元的数量: A[i-1]是第 ...

  3. deeplearning.ai 神经网络和深度学习 week3 浅层神经网络

    1. 第i层网络 Z[i] = W[i]A[i-1] + B[i],A[i] = f[i](Z[i]). 其中, W[i]形状是n[i]*n[i-1],n[i]是第i层神经元的数量: A[i-1]是第 ...

  4. Andrew Ng - 深度学习工程师 - Part 1. 神经网络和深度学习(Week 3. 浅层神经网络)

     =================第3周 浅层神经网络=============== ===3..1  神经网络概览=== ===3.2  神经网络表示=== ===3.3  计算神经网络的输出== ...

  5. 吴恩达《深度学习》-第一门课 (Neural Networks and Deep Learning)-第三周:浅层神经网络(Shallow neural networks) -课程笔记

    第三周:浅层神经网络(Shallow neural networks) 3.1 神经网络概述(Neural Network Overview) 使用符号$ ^{[

  6. 矩池云 | 搭建浅层神经网络"Hello world"

    作为图像识别与机器视觉界的 "hello world!" ,MNIST ("Modified National Institute of Standards and Te ...

  7. ng-深度学习-课程笔记-4: 浅层神经网络(Week3)

    1 神经网络概览( Neural Networks Overview ) 先来快速过一遍如何实现神经网络. 首先需要输入特征x,参数w和b,计算出z,然后用激活函数计算出a,在神经网络中我们要做多次这 ...

  8. [DeeplearningAI笔记]神经网络与深度学习3.2_3.11(激活函数)浅层神经网络

    觉得有用的话,欢迎一起讨论相互学习~Follow Me 3.2 神经网络表示 对于一个由输入层,隐藏层,输出层三层所组成的神经网络来说,输入层,即输入数据被称为第0层,中间层被称为第1层,输出层被称为 ...

  9. 基于MNIST数据集使用TensorFlow训练一个没有隐含层的浅层神经网络

    基础 在参考①中我们详细介绍了没有隐含层的神经网络结构,该神经网络只有输入层和输出层,并且输入层和输出层是通过全连接方式进行连接的.具体结构如下: 我们用此网络结构基于MNIST数据集(参考②)进行训 ...

随机推荐

  1. 记录一则xtts测试遇到的诡异现象

    背景:在一次xtts的测试中遇到因源库数据文件名称包含特殊字符导致表空间全量备份缺失文件,之所以说是诡异现象,是因为xtts的全备日志不报任何错误,在恢复阶段才发现缺少文件,这个缺陷比较隐晦,尤其在迁 ...

  2. 微信小程序组件封装

    第一步,在page下面新建一个template文件,如下图 第二部,在template.wxml中编写公用组件即要封装的代码模块 <!--pages/template/template.wxml ...

  3. kendo treeview checkbox初始化选中问题,没解决,暂时记录下

    想做带有checkbox的tree,由于项目一直用kendo ui for mvc,感觉 牛逼的kendo肯定有tree.结果碰到了选中的问题. 无法根据后台传来的IsChecked字段来设置  tr ...

  4. vue安装,router-link的一些属性,用法,tag active-class,to,replace,exex等等

    第一步:$ npm install -g vue-cli 第二部:$ vue init webpack my-projectName 下面内容转载自:https://www.cnblogs.com/c ...

  5. 设计模式综合列表【QQ空间日志转载】

    C++设计模式全篇 [QQ空间日志转载]

  6. ASP.NET MVC案例教程(三)

    ASP.NET MVC案例教程(二) 让第一个页面跑起来 现在,我们来实现公告系统中的第一个页面——首页.它非常简单,只包括所有公告分类的列表,并且每个列表项是一个超链接.其中分类数据是用我们的Moc ...

  7. 转:C#使用Dotfuscator混淆代码的加密方法

    Author:flymorn Source:flymornCategories:C#编程 PostTime:2011-9-16 1:04:49 正 文:   C#编写的代码如果不进行一定程度的混淆和加 ...

  8. DB2 错误代码

    sqlcode sqlstate 说明 000 00000 SQL语句成功完成 01xxx SQL语句成功完成,但是有警告 +012 01545 未限定的列名被解释为一个有相互关系的引用 +098 0 ...

  9. Android开发中使用Intent跳转到系统应用中的拨号界面、联系人界面、短信界面

    现在开发中的功能需要直接跳转到拨号.联系人.短信界面等等,查找了很多资料,自己整理了一下. 首先,我们先看拨号界面,代码如下: Intent intent =new Intent(); intent. ...

  10. Dvelopment descriptor

    部署描述符是JavaEE程序常见的一部分,但是之前都没有较为全面的学习过,这里就较为全面的记录一下部署描述符中的元素.部署一个Servlet 3 或以上应用程序是一件轻而易举的事.通过Servlet注 ...