mnist数据集

  • 手写数字的数据集。
  • 60000行训练数据集,10000行测试数据集
  • 下载地址:http://yann.lecun.com/exdb/mnist/index.html

  • mnist数据集是形状为[60000,784]的张量,60000张图片,每个图片有784个像素点,这些个像素点可以分为如图的矩阵。

图中是5041的图

  • 标签格式

如图是5041的标签

神经网络构建

  • 输入层784(28*28),输出层10
  • 即是分成10类。
  • 这是简单的结构,如果加上中间层效果会好一点。

sofmax

 e=2.718
 所以e的一次方等于2.718。exp(1)=2.718。
 也就是说输出为1,就是x1=1

  • 输出结果为[1,5,3]是什么意思?
     意思为:标签为0的得分为1,标签为1的得分为5,标签为3的得分为3
     输出写全了是[1 5 3 0 0 0 0 0 0 0 ]与十个输出神经元相对应或者说与标签相对应。
  • 通常用在分类的最后一层,将结果转化为概率

3-1 非线性回归的例子

各种函数的解释,tanh函数

  • 列是神经元的个数

    • 输入x,是一个数,所以输入神经元只有一个,列为1
    • 中间层10个神经元,列为10
      • 中间层为什么是10个???

        • 多少应该都可以吧 ,但是要改变W、b的形状来让最后结果变成一列
    • 输出y,也是一个数,所以输出神经元也只有一个,列为1
  • 行是输入的数据的数量。

  • 权值初始随机数,偏移初始值0

  • 计算公式为L1=x * W1+b1,prediction=L1 * W2+b2

  • prediction是预测的y值

      import tensorflow as tfimport numpy as npimport matplotlib.pyplot as plt# 造数据# 200行一列# 使用numpy生成200个随机点x_data=np.linspace(-0.5,0.5,200)#这个是200列一行的数组,在-0.5到+0.5之间返回200个数字,均匀间隔x_data=x_data[:,np.newaxis]#变成了200行一列,np.newaxis=1这样看,实际上打出来是none。#np.newaxis的作用就是在这一位置增加一个一维,这一位置指的是np.newaxis所在的位置,比较抽象,需要配合例子理解。此种就是第二维noise=np.random.normal(0,0.02,x_data.shape)y_data=np.square(x_data)+noise# 定义两个placeholder#输入输出一个神经元,所以一列,中间层十个神经元,所以10列x=tf.placeholder(tf.float32,[None,1])#不定行,确定列只有一列y=tf.placeholder(tf.float32,[None,1])#简单神经网络#定义个中间层,中间层10个神经元Weights_L1=tf.Variable(tf.random_normal([1,10]))biases_L1=tf.Variable(tf.zeros([1,10]))#200*1的矩阵x,和1*10的矩阵Weights_L1的乘积为(200,10)+(1,10)=(200,10)。每一行单独与biases_L1相加。Wx_plus_b_L1=tf.matmul(x,Weights_L1)+biases_L1L1=tf.nn.tanh(Wx_plus_b_L1)#中间层的输出#定义神经网络输出层,只有一个神经元,但是是一个10个数字的数组Weights_L2=tf.Variable(tf.random_normal([10,1]))biases_L2=tf.Variable(tf.zeros([1,1]))# 矩阵形状变化(200,10)*(10,1)=(200,1),(200,1)+(1,1)依然每行单独相加。因为一行是一个数据。Wx_plus_b_L2=tf.matmul(L1,Weights_L2)+biases_L2prediction=tf.nn.tanh(Wx_plus_b_L2)# 二次代价函数loss=tf.reduce_mean(tf.square(y-prediction))#使用梯度下降法训练train_step=tf.train.GradientDescentOptimizer(0.1).minimize(loss)with tf.Session() as sess:# 变量初始化sess.run(tf.global_variables_initializer())for _ in range(2000):print(sess.run(train_step,feed_dict={x:x_data,y:y_data}))L11,pre=sess.run([L1,prediction], feed_dict={x: x_data, y: y_data})print(L11.shape)print(pre.shape)#获得预测值prediction_value=sess.run(prediction,feed_dict={x:x_data})#画图plt.figure()plt.scatter(x_data,y_data)#散点图plt.plot(x_data,prediction_value,'r-',lw=5)#实线plt.show()
    


查看数据实际值的方法

L11,pre=sess.run([L1,prediction], feed_dict={x: x_data, y: y_data})
print(L11.shape)
print(pre.shape)

PS

  1. tf.multiply()两个矩阵中对应元素各自相乘
  2. tf.matmul()将矩阵a乘以矩阵b,生成a * b。
      要求a的行数与b的列数相同。a为x * z的矩阵,b为z * y的矩阵。结果为x*y的矩阵
  3. b的形状依据每个批次的形状而定,在中间层时,每个批次未必是一行n列,也可能变换成多行多列,此时b随之改变。b1(1,10),b2(1,1)

3-2 mnist数据集分类-简单版本

  • one-hot:把标签转化为只有0,1的形式,某一位是1则为某个
  • 把数据集放到这个位置,也可以直接网络下载

常见数据说明

  • batch_size:批次大小,这里是一次性向神经网络里输入多少张图片。一个批次里有多少张图片。
  • n_batch:有时是num_batches。将全部的图片分为多少批次。
  • epoch:迭代次数,整体循环的次数,训练多少次。
  • 一次输入的矩阵:(batch_size,输入层神经元数目)
    • 输入层神经元数目:输入矩阵的列数,一个输入序列的长度,这里是一个图片的像素点数784。

      • 实际图片是28*28的矩阵,这里直接用序列表示,就是784的一维数组
  • 一次输出的矩阵:(batch_size,输出层神经元数目)
    • 输出层神经元数目:输出矩阵的列数,一个输出序列的长度,这里是图片的标签的序列的长度10.

用到的函数

  • tf.equal 比较两个参数的大小是否一样。
  • tf.argmax(y,1)y中取值最大的在哪个位置。index。第二个参数是维度,axis=1即代表在第二维度,列上最大
  • tf.cast(correct_prediction,tf.float32)改变格式
  • tf.reduce_mean求个平均值得到准确率

最终代码

 import tensorflow as tffrom tensorflow.examples.tutorials.mnist import input_data#载入数据集--这个是通过网络下载的,也可直接下载放到当前目录下mnist=input_data.read_data_sets("MNIST_data",one_hot=True)print(mnist)# 每个批次的大小batch_size=100#一次性向神经网络中输入100张图片,以矩阵形式放入#计算一共有多少个批次,也叫epoch,mnist.train.num_examples是总共的图片数,n_batch=mnist.train.num_examples // batch_size# 两个placeholderx=tf.placeholder(tf.float32,[None,784])#None会随着输入的数据而变,因为每个批次是100,所以这里会变成100。每个图片的是784个像素点,是长为784的序列y=tf.placeholder(tf.float32,[None,10])# 创建一个简单的神经网络,直接784投影到10上W=tf.Variable(tf.zeros([784,10]))b=tf.Variable(tf.zeros(10))#b的形状依据每个批次的形状而定,在中间层时,每个批次未必是一行n列,也可能变换成多行多列,此时b随之改变。prediction=tf.nn.softmax(tf.matmul(x,W)+b)#(形状(100,10)# 二次代价函数loss=tf.reduce_mean(tf.square(y-prediction))train_step=tf.train.GradientDescentOptimizer(0.20).minimize(loss)# 初始化init=tf.global_variables_initializer()# 比较两个参数的大小是否一样:tf.equal# tf.argmax(y,1)y中取值最大的在哪个位置。index。第二个参数是维度,axis=1即代表在第二维度,列上最大# 整体结果是个bool形列表correct_prediction=tf.equal(tf.argmax(y,1),tf.argmax(prediction,1))# 求准确率# tf.cast(correct_prediction,tf.float32)改变格式# tf.reduce_mean求个平均值得到准确率accuracy=tf.reduce_mean(tf.cast(correct_prediction,tf.float32))with tf.Session() as sess:sess.run(init)for epoch in range(21):#每次迭代都要对所有数据处理一次for batch in range(n_batch):#每个批次的输入batch_xs,batch_ys=mnist.train.next_batch(batch_size)sess.run(train_step,feed_dict={x:batch_xs,y:batch_ys})print(sess.run(accuracy,feed_dict={x:mnist.test.images,y:mnist.test.labels}))

tensorflow3 非线性回归、mnist、简单神经网络相关推荐

  1. MNIST数据集合在PaddlePaddle环境下使用简单神经网络识别效果

    简 介: 通过PaddlePaddle构造的简单神经网络对于MNIST数据库进行实验,可以看到使用普通的稠密网络,便可以达到很高的识别效果.训练结果存在一定的随机性.这取决于训练其实的条件.由于在Pa ...

  2. 30行代码就可以实现看图识字!python使用tensorflow.keras搭建简单神经网络

    文章目录 搭建过程 1. 引入必需的库 2. 引入数据集 3. 搭建神经网络层 4. 编译神经网络模型 5. 训练模型 效果测试 大概几个月前,神经网络.人工智能等概念在我心里仍高不可攀,直到自己亲身 ...

  3. 数字识别实例两种实现方式(tensorflow2.x):1.调用高级API 2.手写简单神经网络 3.手写深度神经网络(DNN)

    MNIST手写数字数据库的训练集为60,000个示例,而测试集为10,000个示例. 一共4个文件,训练集.训练集标签.测试集.测试集标签,这些数据直接可以用mnist = tf.keras.data ...

  4. python神经网络实例_Python编程实现的简单神经网络算法示例

    本文实例讲述了Python编程实现的简单神经网络算法.分享给大家供大家参考,具体如下: python实现二层神经网络 包括输入层和输出层 # -*- coding:utf-8 -*- #! pytho ...

  5. PyTorch入门(二)--实现简单神经网络

    实现简单神经网络 1. 神经网络基本介绍 2. Autograd包 3. 实现神经网络 3.1 定义神经网络与训练流程 3.2 运行神经网络与计算损失 3.3 反向传递与权值更新 3.4 神经网络中损 ...

  6. Python手撸机器学习系列(十五):简单神经网络

    目录 神经网络 1.简单算法推导 2.简单代码实现 3.矩阵形式优化 4.矩阵形式代码实现 神经网络 1.简单算法推导 搭建一个将二维平面坐标点分开的简单神经网络,输入维度为2*1(特征为2),神经网 ...

  7. 【深度学习】Numpy实现简单神经网络

    原文地址:点击访问 许久未更,是因为开学之后学习任务太充实了.每天都有做不完的事情,每件事情都又想把它做好. 我航中秋国庆假期长达8天,真应了那句话:该放的假一天不少,该补的课一次没有.期间,有多门作 ...

  8. 莫烦Python--Tensorflow(5):简单神经网络

    构建简单神经网络 import tensorflow as tf import numpy as np# creat data x_data = np.random.rand(100).astype( ...

  9. 【AI】利用简单神经网络做动作识别——基于coco关键点

    前言 coco数据集包含了关键点检测,如果想利用提取到的这些关键点做行为识别,该怎么办呢?下文主要通过搭建一个简单神经网络(多层感知机)来做关键点的分类. 任务:假如需要对打电话和玩手机的动作做分类. ...

最新文章

  1. Python删除文件及进行文件夹压缩
  2. hive内部表与外部表区别
  3. 【Flutter】Dart 面向对象 ( 命名构造方法 | 工厂构造方法 | 命名工厂构造方法 )
  4. digit函数(信息学奥赛一本通-T1164)
  5. android多申请内存,Android内存等信息
  6. Python classmethod()
  7. C语言实现FFT算法
  8. android edittext删除文本框,Android EditText 文本框实现搜索和清空效果
  9. 柠檬的45种生活妙用
  10. wannier插值能带拟合4
  11. 计算机页面错误代码,电脑Windows常见错误代码解析
  12. 计算机研究生论文数学公式,研究生论文公式符号细则.doc
  13. 用简单的lnmp实现的论坛搭建
  14. 模版之AnyType
  15. iOS下WebRTC音视频通话(一)
  16. miix4linux双系统,情理之中,意料之外:Lenovo 联想 MIIX4 平板电脑 低配版
  17. 批处理-从零开始(一)
  18. Gmesh学习·tutorial游览(一)
  19. yml和yaml配置文件语法
  20. 2023年软考备考,系统分析师知识点速记,速看

热门文章

  1. SensorKernel层框架分析
  2. 一场不能只看结果的较量
  3. 一个看似是系统问题的应用问题的解决过程
  4. linux 内核宏container_of剖析
  5. Spring简化Java开发_spring如何简化java开发
  6. Redis概述_使用命令对redis的数据进行增删改查_Jedis连接redis进行数据操作_redis进行数据缓存案例
  7. Chapter4-1_Speech_Synthesis(Tacotron)
  8. Chapter1-1_Speech_Recognition(Overview)
  9. LeetCode 2155. 分组得分最高的所有下标(前缀和)
  10. python 属性描述符