Python+Softmax+MNIST
# -*- coding: utf-8 -*-
"""
用神经网络搭建的softmax线性分离器
Softmax是用于分类过程,用来实现多分类的,简单来说,它把一些输出的神经元映射到(0-1)之间的实数,并且归一化保证和为1,从而使得多分类的概率之和也刚好为1。
Softmax可以分为soft和max,max也就是最大值,假设有两个变量a,b。如果a>b,则max为a,反之为b。
那么在分类问题里面,如果只有max,输出的分类结果只有a或者b,是个非黑即白的结果。
但是在现实情况下,我们希望输出的是取到某个分类的概率 我们希望分值大的那一项被经常取到,而分值较小的那一项也有一定的概率偶尔被取到,所以我们就应用到了soft的概念,即最后的输出是每个分类被取到的概率。
"""
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense,Activation
from keras.optimizers import SGD
from keras.utils import np_utils
import numpy as np
############################################
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
###########################################
np.random.seed(0)
#导入数据 分离成为训练集+标签 和测试集+标签
(X_train,y_train),(X_test,y_test) = mnist.load_data()
# 训练集的个数
# 60000 行的训练集分拆为 55000 行的训练集和 5000 行的验证集。
# 每个样本都是一张28 * 28像素的灰度手写数字图片。
print(X_train.shape,y_train.shape)
# 测试集的个数
print(X_test.shape,y_test.shape)
#数据变换,变为10个类别
nb_classes = 10
X_train_1 = X_train.reshape(60000,784)
# 归一化的意思 把所有的数弄到【0,1】之间
X_train_1 = X_train_1/255
print(X_train_1.shape)
X_train_1 = X_train_1.astype('float32')
# 使用np_utils.to_categorical(y_train, 10)将原来标签是一列的[1,0,0,0,1…]的转换为一行10列的独热码。
y_train_1 = np_utils.to_categorical(y_train,nb_classes) X_test_1 = X_test.reshape(10000,784)
X_test_1 = X_test_1.astype('float32')
y_test_1 = np_utils.to_categorical(y_test,nb_classes)
print(X_test_1.shape,y_test_1.shape)
print( '-----变换后的数据结构----->')
print(X_train_1.shape)
print(y_train_1.shape)
print('Success!') #建立模型
model = Sequential()
model.add(Dense(nb_classes,input_shape=(784,)))
model.add(Activation('softmax')) # 编译模型
# 梯度下降 SGD 每次更新时对每个样本进行梯度更新
sgd = SGD(lr=0.01)
# 交叉熵函数
model.compile(loss='binary_crossentropy',
optimizer=sgd,
metrics = ['accuracy'])
#model 概要
model.summary()
#训练模型
# X_train_1 输入数据
# y_train_1 标签,
# epochs:训练的总轮数
# verbose:日志显示,0为不在标准输出流输出日志信息,1为输出进度条记录,2为每个epoch输出一行记录
# batch_size:整数,指定进行梯度下降时每个batch包含的样本数
# 最终得到模型 modela
model.fit(X_train_1,y_train_1,
epochs = 20,
verbose=1,
batch_size=100
)
#模型的测试误差指标
print(model.metrics_names)
#对测试数据进行测试
# model.evaluate输入数据(data)和标签(label),然后将预测结果与标签比较,得到两者误差并输出.
loss,accu = model.evaluate(X_test_1,y_test_1,
verbose=2,
batch_size = 100)
print(loss,accu)
图片:

Python+Softmax+MNIST的更多相关文章
- python读取mnist
python读取mnist 其实就是python怎么读取binnary file mnist的结构如下,选取train-images TRAINING SET IMAGE FILE (train-im ...
- Python读取MNIST数据集
MNIST数据集获取 MNIST数据集是入门机器学习/模式识别的最经典数据集之一.最早于1998年Yan Lecun在论文: Gradient-based learning applied to do ...
- python 将Mnist数据集转为jpg,并按比例/标签拆分为多个子数据集
现有条件:Mnist数据集,下载地址:跳转 下载后的四个.gz文件解压后放到同一个文件夹下,如:/raw Step 1:将Mnist数据集转为jpg图片(代码来自这篇博客) 1 import os 2 ...
- caffe的python接口学习(4):mnist实例---手写数字识别
深度学习的第一个实例一般都是mnist,只要这个例子完全弄懂了,其它的就是举一反三的事了.由于篇幅原因,本文不具体介绍配置文件里面每个参数的具体函义,如果想弄明白的,请参看我以前的博文: 数据层及参数 ...
- softmax分类算法原理(用python实现)
逻辑回归神经网络实现手写数字识别 如果更习惯看Jupyter的形式,请戳Gitthub_逻辑回归softmax神经网络实现手写数字识别.ipynb 1 - 导入模块 import numpy as n ...
- python读取,显示,保存mnist图片
python处理二进制 python的struct模块可以将整型(或者其它类型)转化为byte数组.看下面的代码. # coding: utf-8 from struct import * # 包装成 ...
- mnist手写数字检测
# -*- coding: utf-8 -*- """ Created on Tue Apr 23 06:16:04 2019 @author: 92958 " ...
- python调用Opencv库和dlib库
python是一门胶水语言,可以调用C++编译好的dll库 python调用opencv-imggui.dll文件 https://www.cnblogs.com/zhangxian/articles ...
- C++基于文件流和armadillo读取mnist
发现网上大把都是用python读取mnist的,用C++大都是用opencv读取的,但我不怎么用opencv,因此自己摸索了个使用文件流读取mnist的方法,armadillo仅作为储存矩阵的一种方式 ...
- 深度学习(一)之MNIST数据集分类
任务目标 对MNIST手写数字数据集进行训练和评估,最终使得模型能够在测试集上达到\(98\%\)的正确率.(最终本文达到了\(99.36\%\)) 使用的库的版本: python:3.8.12 py ...
随机推荐
- 计算机COM口数据测试
计算机COM口数据测试一.基本使用流程 程序需要以管理员身份运行,COM口回路测试需短接2,3pin,测试时候使用控制台,配置测试相关路径,并在测试完成后 1.测试配置路径D:\bigdata\INI ...
- requests高级用法、代理池搭建
requests高级用法 1.自动携带cookie的session对象 # session对象---->已经模拟登录上了一些网站--->单独把cookie 取出来 import reque ...
- Dubbo 我手写几行代码,就把通信模式给你解释清楚!
作者:小傅哥 博客:https://bugstack.cn 原文:https://bugstack.cn/md/road-map/road-map.html 沉淀.分享.成长,让自己和他人都能有所收获 ...
- JDBC:使用IDEA配置JDBC
IDEA使用Jar包 操作流程 步骤1:创建lib路径 步骤2:复制jar包 步骤3:必须要做的一步 参考链接 https://blog.csdn.net/upup1006/article/detai ...
- windows安装uwsgi报错 AttributeError: module 'os' has no attribute 'uname'
Win10系统不支持安装UWSGI, 不用尝试了 安装 pip install uwsgi windows安装报错 AttributeError: module 'os' has no attribu ...
- UiAutomator2.0(转)
1. 概述 UI测试(功能测试.黑盒测试)不需要测试者了解应用程序的内部实现细节,只需要知道当执行了某些特定的动作后是否会得到其预期的输出.这种测试方法,在团队合作中可以更好地分离的开发和测试 ...
- Linq开发技巧与业务逻辑校验
Linq 是一种基于 .NET Framework 的编程语言,它的出现极大地提高了开发效率.Linq 提供了一种统一的查询语法,使得开发人员可以使用一种语言来查询不同类型的数据源,包括对象.集合.数 ...
- 如何用windows任务视图管理多个程序,提高.net开发效率
在 Windows 操作系统中,任务栏是一个非常重要的工具栏,用来显示当前正在运行的程序和任务.如果同时运行了很多程序,任务栏上的图标就会变得非常拥挤,不方便管理和切换.为了提高工作效率,可以通过任务 ...
- Blazor前后端框架Known-V1.2.12
V1.2.12 Known是基于C#和Blazor开发的前后端分离快速开发框架,开箱即用,跨平台,一处代码,多处运行. Gitee: https://gitee.com/known/Known Git ...
- ❤️ GitHub Copilot 读心术揭秘,Copilot 逆向工程笔记
总览 你是否好奇 GitHub Copilot 如何知道你想写的内容?有时候它聪明得甚至好像读过你项目里其他文件一样,不要怀疑,它确实读过.这篇文章记录了我阅读一个对 Copilot 的逆向工程的笔记 ...