TensorFlow实现Softmax回归(模型存储与加载)
Softmax
一.Softmax回归简介
案例:MNIST手写数字识别
1.为了得到一张给定图片属于某个特定数字类的证据【evidence】,对图片像素进行加权求和。如果这个像素具有很强的证据说明这张图片不属于该类,那么相应的权值为负值相反如果这个像素拥有有利的证据支持这张图片属于这个类,那么权值即为正数。
如下图,红色代表负数值,蓝色代表正数值:
2.这里的softmax可以看做一个激励【activation】函数或者链接【link】函数,把我们定义的线性函数的输出转化成我们想要的格式,也就是关于10个数字类别的概率分布。因此,给定一张图片,它对于每一个数字的吻合度可以被softmax函数转化成一个概率值。
展开等式右边的子式:
3.softmax把输入值当成幂指数求值,再正则化这些结果值。这个幂运算表示,更大的证据对应更大的假设模型【hypothesis】里面的乘数权重值。反之拥有更少的证据意味着在假设模型里面拥有更小的乘数系数。假设模型里面的权值不可以是小于0的数值。Softmax会正则化这些权重值,使它们的总和等于1,以此构造一个有效的概率分布。
如果把它写成一个等式:
转化为矩阵乘和向量加:
转化为公式:
二.代码实现
- 1 # -*- coding: utf-8 -*-
- 2 """
- 3 Created on Thu Oct 18 18:02:26 2018
- 4
- 5 @author: zhen
- 6 """
- 7
- 8 from tensorflow.examples.tutorials.mnist import input_data
- 9 import tensorflow as tf
- 10
- 11 # mn.SOURCE_URL = "http://yann.lecun.com/exdb/mnist/"
- 12 my_mnist = input_data.read_data_sets("C:/Users/zhen/MNIST_data_bak/", one_hot=True)
- 13
- 14 # The MNIST data is split into three parts:
- 15 # 55,000 data points of training data (mnist.train)
- 16 # 10,000 points of test data (mnist.test), and
- 17 # 5,000 points of validation data (mnist.validation).
- 18
- 19 # Each image is 28 pixels by 28 pixels
- 20
- 21 # 输入的是一堆图片,None表示不限输入条数,784表示每张图片都是一个784个像素值的一维向量
- 22 # 所以输入的矩阵是None乘以784二维矩阵
- 23 x = tf.placeholder(dtype=tf.float32, shape=(None, 784))
- 24 # 初始化都是0,二维矩阵784乘以10个W值
- 25 W = tf.Variable(tf.zeros([784, 10]))
- 26 b = tf.Variable(tf.zeros([10]))
- 27
- 28 y = tf.nn.softmax(tf.matmul(x, W) + b)
- 29
- 30 # 训练
- 31 # labels是每张图片都对应一个one-hot的10个值的向量
- 32 y_ = tf.placeholder(dtype=tf.float32, shape=(None, 10))
- 33 # 定义损失函数,交叉熵损失函数
- 34 # 对于多分类问题,通常使用交叉熵损失函数
- 35 # reduction_indices等价于axis,指明按照每行加,还是按照每列加
- 36 cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y),
- 37 reduction_indices=[1]))
- 38 train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
- 39
- 40 # 评估
- 41
- 42 # tf.argmax()是一个从tensor中寻找最大值的序号,tf.argmax就是求各个预测的数字中概率最大的那一个
- 43
- 44 correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
- 45
- 46 # 用tf.cast将之前correct_prediction输出的bool值转换为float32,再求平均
- 47 accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
- 48
- 49 # 初始化变量
- 50 sess = tf.InteractiveSession()
- 51 tf.global_variables_initializer().run()
- 52 # 创建Saver节点,用于保存训练的模型
- 53 saver = tf.train.Saver()
- 54 for i in range(100):
- 55 batch_xs, batch_ys = my_mnist.train.next_batch(100)
- 56 sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
- 57 # 每隔一段时间保存一次中间结果
- 58 if i % 10 == 0:
- 59 save_path = saver.save(sess, "C:/Users/zhen/MNIST_data_bak/saver/softmax_middle_model.ckpt")
- 60
- 61 # print("TrainSet batch acc : %s " % accuracy.eval({x: batch_xs, y_: batch_ys}))
- 62 # print("ValidSet acc : %s" % accuracy.eval({x: my_mnist.validation.images, y_: my_mnist.validation.labels}))
- 63
- 64 # 测试
- 65 print("TestSet acc : %s" % accuracy.eval({x: my_mnist.test.images, y_: my_mnist.test.labels}))
- 66 # 保存最终的模型
- 67 save_path = saver.save(sess, "C:/Users/zhen/MNIST_data_bak/saver/softmax_final_model.ckpt")
- 68
- 69 # 使用训练好的模型直接进行预测
- 70 with tf.Session() as sess_back:
- 71 saver.restore(sess_back, "C:/Users/zhen/MNIST_data_bak/saver/softmax_final_model.ckpt")
- 72 # 评估
- 73 correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
- 74 accruary = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
- 75 # 测试
- 76 print(accuracy.eval({x : my_mnist.test.images, y_ : my_mnist.test.labels}))
- 77 # 总结
- 78 # 1,定义算法公式,也就是神经网络forward时的计算
- 79 # 2,定义loss,选定优化器,并指定优化器优化loss
- 80 # 3,迭代地对数据进行训练
- 81 # 4,在测试集或验证集上对准确率进行评测
三.结果
四.解析
把训练好的模型存储落地磁盘,有利于多次使用和共享,也便于当训练出现异常时能恢复模型而不是重新训练!
TensorFlow实现Softmax回归(模型存储与加载)的更多相关文章
- 全面解析Pytorch框架下模型存储,加载以及冻结
最近在做试验中遇到了一些深度网络模型加载以及存储的问题,因此整理了一份比较全面的在 PyTorch 框架下有关模型的问题.首先咱们先定义一个网络来进行后续的分析: 1.本文通用的网络模型 import ...
- 手写数字识别 ----Softmax回归模型官方案例注释(基于Tensorflow,Python)
# 手写数字识别 ----Softmax回归模型 # regression import os import tensorflow as tf from tensorflow.examples.tut ...
- 转 tensorflow模型保存 与 加载
使用tensorflow过程中,训练结束后我们需要用到模型文件.有时候,我们可能也需要用到别人训练好的模型,并在这个基础上再次训练.这时候我们需要掌握如何操作这些模型数据.看完本文,相信你一定会有收获 ...
- tensorflow 模型保存与加载 和TensorFlow serving + grpc + docker项目部署
TensorFlow 模型保存与加载 TensorFlow中总共有两种保存和加载模型的方法.第一种是利用 tf.train.Saver() 来保存,第二种就是利用 SavedModel 来保存模型,接 ...
- tensorflow实现线性回归、以及模型保存与加载
内容:包含tensorflow变量作用域.tensorboard收集.模型保存与加载.自定义命令行参数 1.知识点 """ 1.训练过程: 1.准备好特征和目标值 2.建 ...
- [PyTorch 学习笔记] 7.1 模型保存与加载
本章代码: https://github.com/zhangxiann/PyTorch_Practice/blob/master/lesson7/model_save.py https://githu ...
- sklearn模型保存与加载
sklearn模型保存与加载 sklearn模型的保存和加载API 线性回归的模型保存加载案例 保存模型 sklearn模型的保存和加载API from sklearn.externals impor ...
- tensorflow之逻辑回归模型实现
前面一篇介绍了用tensorflow实现线性回归模型预测sklearn内置的波士顿房价,现在这一篇就记一下用逻辑回归分类sklearn提供的乳腺癌数据集,该数据集有569个样本,每个样本有30维,为二 ...
- TensorFlow构建卷积神经网络/模型保存与加载/正则化
TensorFlow 官方文档:https://www.tensorflow.org/api_guides/python/math_ops # Arithmetic Operators import ...
随机推荐
- Servlet-session简介及使用场景
- python语法基础-初始化/继承
写了一些程序,基本上都是直接def函数 然后在main方法中 调用 但是在一些应用程序中 会有基本语法的使用(初始化,继承) 初始化: 1.在程序执行时一定执行一次的操作 2.python中初始化in ...
- Kafka实战-Kafka Cluster
1.概述 在<Kafka实战-入门>一篇中,为大家介绍了Kafka的相关背景.原理架构以及一些关键知识点,本篇博客为大家来赘述一下Kafka Cluster的相关内容,下面是今天为大家分享 ...
- resin4.0.25 安装配置 及结合eclipse开发
resin4.0.25 安装配置 及结合eclipse开发 本文大部分内容是对官网的翻译,及自己配置后的一些体会. 一. 基于win ,resin基本安装1,安装jdk1.6或更高版本2,配置环境 ...
- golang map输出排序
由于GoLang Map 内部存储是无序的,当需要按顺序获得map存储的key -value值时,应该对遍历出来的结果进行重新排序: 在go 1.8版本后,提供的slice sort 功能使排序更简单 ...
- mybatis mapper xml文件的导入方式和查询方式
mybatis mapper xml文件的导入方式和查询方式 ssm框架 Mybatis mapper与SQLSession的关系 每个基于MyBatis的应用都是以一个SqlSessionFact ...
- /proc文件系统 - 汇总
0. /proc目录简介 Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构.改变内核设置的机制. proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间 ...
- 所生成项目的处理器架构“MSIL”与引用“Microsoft.AspNet.Scaffolding.12.0, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=x86”的处理器架构“x86”不匹配。
生成成功后: 3>C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets(1820,5): ...
- 设置实体类型中String类型的属性值为String.Empty
/// <summary> /// 将String类型的属性值设置为String.Empty /// </summary> /// <typeparam name=&qu ...
- HashMap底层实现原理(JDK1.8)源码分析
ref:https://blog.csdn.net/tuke_tuke/article/details/51588156 http://www.cnblogs.com/xiaolovewei/p/79 ...