'''

神经网络的过程:1、准备相应的数据库 2、定义输入成 3、定义输出层 4、定义隐藏层 5、训练(
根据误差进行训练) 6、对结果进行精确度评估

'''

import tensorflow as tf

#首先准备数据库
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)

'''
这里面的数据不仅仅有图像的像素,还有图像代表的信息
他有train的数据和test的数据
'''

#隐藏层
def add_layer(inputs,in_size,out_size,activation_function=None):
  #定义权重,会影响结果的权重,他的值会改变的与真实数据差不多相同的结果
  Weights = tf.Variable(tf.random_normal([in_size,out_size]))
  '''
  其中in_size,out_size分别表示行,列
  '''
  #定义偏置,他的值不改变的,对数据处理的过程有作用
  biases = tf.Variable(tf.zeros([1,out_size])+0.1)
  #数据处理,在矩阵中,使得weights的值更加的接近真实结果
  Wx_plus_b = tf.matmul(inputs,Weights)+biases
  if activation_function==None:
    outputs = Wx_plus_b
  else:
    outputs = activation_function(Wx_plus_b)
  return outputs

#定义输入层
x_data = placeholder(tf.float32,[None,784])
'''
其中None表示可以接受任意的样本,但是这个样本的列要是784
为什么是784呢?:784是一个样本的像素点。tensorflow的计算是一列一列计算的
'''
#定义输出层
y_data = placeholder(tf.float32,[None,10])
'''
其中的None与上面表示的意思一样
为什么10呢?:因为这是对0-9这10个数字的分类,他的一列中的数字最大的索引值表示代表的数字
'''

#训练层,数据改正,运用预测的结果和真是的结果相互比较,从中得到经验后学习
prediction = add_layer(x_data,784,10,activation_function=tf.nn.softmax)
'''
x_data:输入的真是数据
784:表示输入层一行有784列
10:表述输出层一行有10列
very important
****隐藏层里的设置参数是与输入层和输出层是有关,这个矩阵相乘,矩阵相加等是有联系的
这里只有输入层和输出层
'''
#预测值和真实值比较学习的方法适合激励函数是有关的

cross_entrop = tf.reduce_mean(-tf.reduce_sum(y_data*tf.log(prediction),reduction_indices=[1]))
'''
其中reduction_indices=[1],表示一列一列的计算
'''
#训练
train_step = tf.train.GradientDesecentOptimiizer(0.5).minimize(cross_entrop)
'''
优化器:tf.train.GradientDesecentOptimiizer(梯度下降优化器)
minimize(cross_entrop):更改误差值即(train_step)
'''

#开始训练前,一定要所有的变量进行初始化,才能使用
init = tf.global_variables_initializer()

#开始训练.这里我才初始化
with tf.Session()as sess:
  sess.run(init)#初始化所有的变量
  for i in range(1000):#训练1000次
    xs,ys = mnist.train.next_batch(100)
    '''
    从一大堆的数据中拿出100分数据
    '''
    sess.run(train_step,feed_dict={x_data:xs,y_data:ys})
    '''
    在tensorflow中sess.run()这个调度执行
    为什么要用到y_data:因为在测试值和正确值比较时用到
    '''
    '''
    上面的这些,是学习的过程,他已经因为有y_data这个正确值,他会有一定的程度知道
    什么表示0,1,2,3,4,5,6,7,8,9了
    '''
    #为了知道他学习之后判别的效率,我们可以定义一个函数来查看
    if i%100==0:
      print(compute_accuracy(mnist.test.images,mnist.test.labels))
      '''
      其中mnist.test.images,mnist.test.labels这里表示的值是用来测试像素,用来测试的
      正确值
      '''

def compute_accuracy(xs,ys):
  global prediction
  y_data1 = sess.run(prediction,feed_dict={x_data:xs})
  '''
  用一个变量将predication的数据保存起来
  '''
  correct_prediction = tf.equal(tf.argmax(y_data1,1),tf.argmax(ys,1))
  '''
  tf.argmax 是一个非常有用的函数,它能给出某个tensor对象在某一维上的其数据最大值所在
  的索引值。由于标签向量是由0,1组成,因此最大值1所在的索引位置就是类别标签,
  比如tf.argmax(y,1)返回的是模型对于任一输入x预测到的标签值,而 tf.argmax(y_,1)
  代表正确的标签,我们可以用 tf.equal 来检测我们的预测是否真实标签匹配
  (索引位置一样表示匹配)这行代码会给我们一组布尔值。
  '''
  accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))
  '''
  为了确定正确预测项的比例,我们可以把布尔值转换成浮点数,
  然后取平均值。例如,[True, False, True, True] 会变成 [1,0,1,1] ,取平均值后得到 0.75.
  '''
  result = sess.run(accuarcy,feed_dict={x_data:xs,y_data:ys})
  return reslut

tensorflow学习之路-----MNIST数据的更多相关文章

  1. 深度学习-tensorflow学习笔记(1)-MNIST手写字体识别预备知识

    深度学习-tensorflow学习笔记(1)-MNIST手写字体识别预备知识 在tf第一个例子的时候需要很多预备知识. tf基本知识 香农熵 交叉熵代价函数cross-entropy 卷积神经网络 s ...

  2. 深度学习-tensorflow学习笔记(2)-MNIST手写字体识别

    深度学习-tensorflow学习笔记(2)-MNIST手写字体识别超级详细版 这是tf入门的第一个例子.minst应该是内置的数据集. 前置知识在学习笔记(1)里面讲过了 这里直接上代码 # -*- ...

  3. tensorflow学习笔记(10) mnist格式数据转换为TFrecords

    本程序 (1)mnist的图片转换成TFrecords格式 (2) 读取TFrecords格式 # coding:utf-8 # 将MNIST输入数据转化为TFRecord的格式 # http://b ...

  4. tensorflow学习笔记————分类MNIST数据集

    在使用tensorflow分类MNIST数据集中,最容易遇到的问题是下载MNIST样本的问题. 一般是通过使用tensorflow内置的函数进行下载和加载, from tensorflow.examp ...

  5. tensorflow学习之路----保存和提取数据

    #保存数据注意他只能保存变量,不能保存神经网络的框架.#保存数据的作用:保存权重有利于下一次的训练,或者可以用这个数据进行识别#np.arange():arange函数用于创建等差数组,使用频率非常高 ...

  6. TensorFlow学习笔记(MNIST报错修正 适用Tensorflow1.3)

    在Tensorflow实战Google框架下的深度学习这本书的MNIST的图像识别例子中,每次都要报错   错误如下: Only call `sparse_softmax_cross_entropy_ ...

  7. tensorflow学习之路-----简单卷积神经网路

    import tensorflow as tf#取数据,目的是辨别数字from tensorflow.examples.tutorials.mnist import input_data'''手动添加 ...

  8. TensorFlow学习之路1-TensorFlow介绍

    TensorFlow是一个采用数据流图(data flow graphs),用于数据计算的开源软件库. 什么是数据流图? TensorFlow的数据流图是由“节点”(nodes)和“线”(edges) ...

  9. tensorflow学习之路---解决过拟合

    ''' 思路:1.调用数据集 2.定义用来实现神经元功能的函数(包括解决过拟合) 3.定义输入和输出的数据4.定义隐藏层(函数)和输出层(函数) 5.分析误差和优化数据(改变权重)6.执行神经网络 ' ...

随机推荐

  1. 我的Android进阶之旅------>怎样将Activity变为半透明的对话框?

    我的Android进阶之旅------>怎样将Activity变为半透明的对话框?能够从两个方面来考虑:对话框和半透明. 在定义Activity时指定Theme.Dialog主题就能够将Acti ...

  2. Android控件篇

    Android中提供了丰富的UI空间.为了最大限度地发挥平台的性能.每个开发人员必须熟练掌握UI控件尤其是经常使用的UI控件.并能依据须要呈现的内容选择最恰当的控件. Android提供了XML配置和 ...

  3. 物理读之LRU(近期最少被使用)的深入解析

    转载请注明出处: http://blog.csdn.net/guoyjoe/article/details/38264883 一组LRU链表包含LRU主链.LRU辅助链.LRUW主链,LRUW辅助链, ...

  4. Oracle单实例情况下的library cache pin的问题模拟与问题分析

    Oracle单实例情况下的library cache pin的问题模拟与问题分析 參考自: WAITEVENT: "library cache pin" Reference Not ...

  5. 基于IBM Bluemix的数据缓存应用实例

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:IBM® Data Cache for Bluemix 是快速缓存服务.支持 Web 和 ...

  6. 浅谈 trie树 及事实上现

    定义:又称字典树,单词查找树或者前缀树,是一种用于高速检索的多叉树结构. 如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树. 核心思想:是空间换时间.利用字符串的公共前缀来减少查询时间的开 ...

  7. 从设计稿到demo

    前言 先省略产品设计师的wireframe和mockup,为什么线框图和视觉设计稿不在叙述范围内,由于这里要做的是网页重构,从接收设计师的PSD那一刻開始: 一.接到设计稿 1.接收到PSD后.不要着 ...

  8. hdoj--2138--How many prime numbers(暴力模拟)

    How many prime numbers Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  9. rest_framework 解析器(下 全局配置使用)

    解析器 一般都是全局设置 参考文档 www.cnblogs.com/wupeiqi/articles/.html REST_FRAMEWORK=( "DEFAULT_PARSER_CLASS ...

  10. C#篇(二)——属性的实质

    属性的内部实现其实就是方法 我们平时写的代码: class Student { private int age; public int Age { get { return age; } set { ...