我的编程空间,编程开发者的网络收藏夹
学习永远不晚

TensorFlow中Softmax逻辑回归如何识别手写数字MNIST数据集

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

TensorFlow中Softmax逻辑回归如何识别手写数字MNIST数据集

今天就跟大家聊聊有关TensorFlow中Softmax逻辑回归如何识别手写数字MNIST数据集,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

基于MNIST数据集的逻辑回归模型做十分类任务

没有隐含层的Softmax Regression只能直接从图像的像素点推断是哪个数字,而没有特征抽象的过程。多层神经网络依靠隐含层,则可以组合出高阶特征,比如横线、竖线、圆圈等,之后可以将这些高阶特征或者说组件再组合成数字,就能实现精准的匹配和分类。

import tensorflow as tfimport numpy as npimport input_dataprint('Download and Extract MNIST dataset')mnist = input_data.read_data_sets('data/', one_hot=True) # one_hot=True意思是编码格式为01编码print("tpye of 'mnist' is %s" % (type(mnist)))print("number of train data is %d" % (mnist.train.num_examples))print("number of test data is %d" % (mnist.test.num_examples))trainimg = mnist.train.imagestrainlabel = mnist.train.labelstestimg = mnist.test.imagestestlabel = mnist.test.labelsprint("MNIST loaded")"""print("type of 'trainimg' is %s"    % (type(trainimg)))print("type of 'trainlabel' is %s"  % (type(trainlabel)))print("type of 'testimg' is %s"     % (type(testimg)))print("type of 'testlabel' is %s"   % (type(testlabel)))print("------------------------------------------------")print("shape of 'trainimg' is %s"   % (trainimg.shape,))print("shape of 'trainlabel' is %s" % (trainlabel.shape,))print("shape of 'testimg' is %s"    % (testimg.shape,))print("shape of 'testlabel' is %s"  % (testlabel.shape,))"""x = tf.placeholder(tf.float32, [None, 784])y = tf.placeholder(tf.float32, [None, 10]) # None is for infinitew = tf.Variable(tf.zeros([784, 10])) # 为了方便直接用0初始化,可以高斯初始化b = tf.Variable(tf.zeros([10])) # 10分类的任务,10种label,所以只需要初始化10个bpred = tf.nn.softmax(tf.matmul(x, w) + b) # 前向传播的预测值cost = tf.reduce_mean(-tf.reduce_sum(y*tf.log(pred), reduction_indices=[1])) # 交叉熵损失函数optm = tf.train.GradientDescentOptimizer(0.01).minimize(cost)corr = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1)) # tf.equal()对比预测值的索引和真实label的索引是否一样,一样返回True,不一样返回Falseaccr = tf.reduce_mean(tf.cast(corr, tf.float32))init = tf.global_variables_initializer() # 全局参数初始化器training_epochs = 100 # 所有样本迭代100次batch_size = 100 # 每进行一次迭代选择100个样本display_step = 5# SESSIONsess = tf.Session() # 定义一个Sessionsess.run(init) # 在sess里run一下初始化操作# MINI-BATCH LEARNINGfor epoch in range(training_epochs): # 每一个epoch进行循环    avg_cost = 0. # 刚开始损失值定义为0    num_batch = int(mnist.train.num_examples/batch_size)    for i in range(num_batch): # 每一个batch进行选择        batch_xs, batch_ys = mnist.train.next_batch(batch_size) # 通过next_batch()就可以一个一个batch的拿数据,        sess.run(optm, feed_dict={x: batch_xs, y: batch_ys}) # run一下用梯度下降进行求解,通过placeholder把x,y传进来        avg_cost += sess.run(cost, feed_dict={x: batch_xs, y:batch_ys})/num_batch    # DISPLAY    if epoch % display_step == 0: # display_step之前定义为5,这里每5个epoch打印一下        train_acc = sess.run(accr, feed_dict={x: batch_xs, y:batch_ys})        test_acc = sess.run(accr, feed_dict={x: mnist.test.images, y: mnist.test.labels})        print("Epoch: %03d/%03d cost: %.9f TRAIN ACCURACY: %.3f TEST ACCURACY: %.3f"              % (epoch, training_epochs, avg_cost, train_acc, test_acc))print("DONE")

迭代100次跑一下模型,最终,在测试集上可以达到92.2%的准确率,虽然还不错,但是还达不到实用的程度。手写数字的识别的主要应用场景是识别银行支票,如果准确率不够高,可能会引起严重的后果。

Epoch: 095/100 loss: 0.283259882 train_acc: 0.940 test_acc: 0.922

插一些知识点,关于tensorflow中一些函数的用法

sess = tf.InteractiveSession()arr = np.array([[31, 23,  4, 24, 27, 34],                [18,  3, 25,  0,  6, 35],                [28, 14, 33, 22, 30,  8],                [13, 30, 21, 19,  7,  9],                [16,  1, 26, 32,  2, 29],                [17, 12,  5, 11, 10, 15]])
在tensorflow中打印要用.eval()tf.rank(arr).eval() # 打印矩阵arr的维度tf.shape(arr).eval() # 打印矩阵arr的大小tf.argmax(arr, 0).eval() # 打印最大值的索引,参数0为按列求索引,1为按行求索引

看完上述内容,你们对TensorFlow中Softmax逻辑回归如何识别手写数字MNIST数据集有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网行业资讯频道,感谢大家的支持。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

TensorFlow中Softmax逻辑回归如何识别手写数字MNIST数据集

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

TensorFlow中Softmax逻辑回归如何识别手写数字MNIST数据集

今天就跟大家聊聊有关TensorFlow中Softmax逻辑回归如何识别手写数字MNIST数据集,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。基于MNIST数据集的逻辑回归模型做十分
2023-06-25

Python中如何实现MNIST手写数字识别功能

这篇文章主要为大家展示了“Python中如何实现MNIST手写数字识别功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python中如何实现MNIST手写数字识别功能”这篇文章吧。数据集介绍M
2023-06-22

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录