文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-06-25 12:45

关注

今天就跟大家聊聊有关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

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯