(三) Keras Mnist分类程序以及改用交叉熵对比
视频学习来源
https://www.bilibili.com/video/av40787141?from=search&seid=17003307842787199553
笔记
Mnist分类程序
import numpy as np
from keras.datasets import mnist #将会从网络下载mnist数据集
from keras.utils import np_utils
from keras.models import Sequential #序列模型
from keras.layers import Dense
from keras.optimizers import SGD
C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\site-packages\h5py\__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.
from ._conv import register_converters as _register_converters
Using TensorFlow backend.
第一次运行时,建议先下载数据集
1 打开cmd 输入python 回车
2 将上面的代码输入,导入相关文件包库
3 输入
(x_train,y_train),(x_test,y_test)=mnist.load_data()
回车
启动下载。加载完成便可在jupyter notebook中运行
#载入数据
(x_train,y_train),(x_test,y_test)=mnist.load_data()
#查看格式
#(60000,28,28)
print('x_shape:',x_train.shape)
#(60000)
print('y_shape:',y_train.shape)
#(60000,28,28)->(60000,784)
#行数60000,列-1表示自动设置
#除以255是做数据归一化处理
x_train=x_train.reshape(x_train.shape[0],-1)/255.0 #转换数据格式
x_test=x_test.reshape(x_test.shape[0],-1)/255.0 #转换数据格式
#label标签转换成 one hot 形式
y_train=np_utils.to_categorical(y_train,num_classes=10) #分成10类
y_test=np_utils.to_categorical(y_test,num_classes=10) #分成10类 #创建模型,输入754个神经元,输出10个神经元
#偏执值初始值设为1(默认为0)
model=Sequential([
Dense(units=10,input_dim=784,bias_initializer='one',activation='softmax')
]) #定义优化器
#学习速率为0.2
sgd=SGD(lr=0.2) #定义优化器,损失函数,训练效果中计算准确率
model.compile(
optimizer=sgd, #sgd优化器
loss='mse', #损失用均方差
metrics=['accuracy'], #计算准确率
) #训练(不同于之前,这是新的训练方式)
#六万张,每次训练32张,训练10个周期(六万张全部训练完算一个周期)
model.fit(x_train,y_train,batch_size=32,epochs=10) #评估模型
loss,accuracy=model.evaluate(x_test,y_test) print('\ntest loss',loss)
print('accuracy',accuracy)
x_shape: (60000, 28, 28)
y_shape: (60000,)
Epoch 1/10
60000/60000 [==============================] - 4s 65us/step - loss: 0.0384 - acc: 0.7673
Epoch 2/10
60000/60000 [==============================] - 5s 88us/step - loss: 0.0204 - acc: 0.8808
Epoch 3/10
60000/60000 [==============================] - 3s 57us/step - loss: 0.0178 - acc: 0.8934
Epoch 4/10
60000/60000 [==============================] - 3s 48us/step - loss: 0.0165 - acc: 0.8995
Epoch 5/10
60000/60000 [==============================] - 3s 45us/step - loss: 0.0157 - acc: 0.9038
Epoch 6/10
60000/60000 [==============================] - 3s 46us/step - loss: 0.0151 - acc: 0.9064
Epoch 7/10
60000/60000 [==============================] - 3s 48us/step - loss: 0.0146 - acc: 0.9093
Epoch 8/10
60000/60000 [==============================] - 3s 49us/step - loss: 0.0143 - acc: 0.9110
Epoch 9/10
60000/60000 [==============================] - 3s 46us/step - loss: 0.0140 - acc: 0.9126
Epoch 10/10
60000/60000 [==============================] - 3s 52us/step - loss: 0.0138 - acc: 0.9137
10000/10000 [==============================] - 0s 28us/step
test loss 0.01308599321632646
accuracy 0.9169
改用交叉熵
#定义优化器,损失函数,训练效果中计算准确率
model.compile(
optimizer=sgd, #sgd优化器
loss='categorical_crossentropy', #损失用交叉熵,速度会更快
metrics=['accuracy'], #计算准确率
)
完整代码
import numpy as np
from keras.datasets import mnist #将会从网络下载mnist数据集
from keras.utils import np_utils
from keras.models import Sequential #序列模型
from keras.layers import Dense
from keras.optimizers import SGD
C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\site-packages\h5py\__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.
from ._conv import register_converters as _register_converters
Using TensorFlow backend.
#载入数据
(x_train,y_train),(x_test,y_test)=mnist.load_data()
#查看格式
#(60000,28,28)
print('x_shape:',x_train.shape)
#(60000)
print('y_shape:',y_train.shape)
#(60000,28,28)->(60000,784)
#行数60000,列-1表示自动设置
#除以255是做数据归一化处理
x_train=x_train.reshape(x_train.shape[0],-1)/255.0 #转换数据格式
x_test=x_test.reshape(x_test.shape[0],-1)/255.0 #转换数据格式
#label标签转换成 one hot 形式
y_train=np_utils.to_categorical(y_train,num_classes=10) #分成10类
y_test=np_utils.to_categorical(y_test,num_classes=10) #分成10类 #创建模型,输入754个神经元,输出10个神经元
#偏执值初始值设为1(默认为0)
model=Sequential([
Dense(units=10,input_dim=784,bias_initializer='one',activation='softmax')
]) #定义优化器
#学习速率为0.2
sgd=SGD(lr=0.2) #定义优化器,损失函数,训练效果中计算准确率
model.compile(
optimizer=sgd, #sgd优化器
loss='categorical_crossentropy', #损失用交叉熵,速度会更快
metrics=['accuracy'], #计算准确率
) #训练(不同于之前,这是新的训练方式)
#六万张,每次训练32张,训练10个周期(六万张全部训练完算一个周期)
model.fit(x_train,y_train,batch_size=32,epochs=10) #评估模型
loss,accuracy=model.evaluate(x_test,y_test) print('\ntest loss',loss)
print('accuracy',accuracy)
x_shape: (60000, 28, 28)
y_shape: (60000,)
Epoch 1/10
60000/60000 [==============================] - 5s 82us/step - loss: 0.3782 - acc: 0.8926
Epoch 2/10
60000/60000 [==============================] - 4s 60us/step - loss: 0.3031 - acc: 0.9145
Epoch 3/10
60000/60000 [==============================] - 3s 54us/step - loss: 0.2894 - acc: 0.9186
Epoch 4/10
60000/60000 [==============================] - 3s 55us/step - loss: 0.2826 - acc: 0.9204
Epoch 5/10
60000/60000 [==============================] - 3s 54us/step - loss: 0.2773 - acc: 0.9227
Epoch 6/10
60000/60000 [==============================] - 3s 57us/step - loss: 0.2748 - acc: 0.9226
Epoch 7/10
60000/60000 [==============================] - 4s 59us/step - loss: 0.2715 - acc: 0.9239
Epoch 8/10
60000/60000 [==============================] - 4s 61us/step - loss: 0.2694 - acc: 0.9252
Epoch 9/10
60000/60000 [==============================] - 3s 55us/step - loss: 0.2664 - acc: 0.9254
Epoch 10/10
60000/60000 [==============================] - 4s 67us/step - loss: 0.2654 - acc: 0.9267
10000/10000 [==============================] - 0s 29us/step
test loss 0.28354966330975295
accuracy 0.9229
改用后精度在提高,速度也在变快
(三) Keras Mnist分类程序以及改用交叉熵对比的更多相关文章
- 深度学习原理与框架-Tensorflow卷积神经网络-卷积神经网络mnist分类 1.tf.nn.conv2d(卷积操作) 2.tf.nn.max_pool(最大池化操作) 3.tf.nn.dropout(执行dropout操作) 4.tf.nn.softmax_cross_entropy_with_logits(交叉熵损失) 5.tf.truncated_normal(两个标准差内的正态分布)
1. tf.nn.conv2d(x, w, strides=[1, 1, 1, 1], padding='SAME') # 对数据进行卷积操作 参数说明:x表示输入数据,w表示卷积核, stride ...
- TensorFlow学习笔记(三)MNIST数字识别问题
一.MNSIT数据处理 MNSIT是一个非常有名的手写体数字识别数据集.包含60000张训练图片,10000张测试图片.每张图片是28X28的数字. TonserFlow提供了一个类来处理 MNSIT ...
- BP神经网络——交叉熵作代价函数
Sigmoid函数 当神经元的输出接近 1时,曲线变得相当平,即σ′(z)的值会很小,进而也就使∂C/∂w和∂C/∂b会非常小.造成学习缓慢,下面有一个二次代价函数的cost变化图,epoch从15到 ...
- 最大似然估计 (Maximum Likelihood Estimation), 交叉熵 (Cross Entropy) 与深度神经网络
最近在看深度学习的"花书" (也就是Ian Goodfellow那本了),第五章机器学习基础部分的解释很精华,对比PRML少了很多复杂的推理,比较适合闲暇的时候翻开看看.今天准备写 ...
- 信息论随笔3: 交叉熵与TF-IDF模型
接上文:信息论随笔2: 交叉熵.相对熵,及上上文:信息论随笔 在读<数学之美>的时候,相关性那一节对TF-IDF模型有这样一句描述:"其实 IDF 的概念就是一个特定条件下.关键 ...
- 关于交叉熵(cross entropy),你了解哪些
二分~多分~Softmax~理预 一.简介 在二分类问题中,你可以根据神经网络节点的输出,通过一个激活函数如Sigmoid,将其转换为属于某一类的概率,为了给出具体的分类结果,你可以取0.5作为阈值, ...
- 『TensorFlow』分类问题与两种交叉熵
关于categorical cross entropy 和 binary cross entropy的比较,差异一般体现在不同的分类(二分类.多分类等)任务目标,可以参考文章keras中两种交叉熵损失 ...
- 归一化(softmax)、信息熵、交叉熵
机器学习中经常遇到这几个概念,用大白话解释一下: 一.归一化 把几个数量级不同的数据,放在一起比较(或者画在一个数轴上),比如:一条河的长度几千甚至上万km,与一个人的高度1.7m,放在一起,人的高度 ...
- 机器学习之路:tensorflow 深度学习中 分类问题的损失函数 交叉熵
经典的损失函数----交叉熵 1 交叉熵: 分类问题中使用比较广泛的一种损失函数, 它刻画两个概率分布之间的距离 给定两个概率分布p和q, 交叉熵为: H(p, q) = -∑ p(x) log q( ...
随机推荐
- java游戏开发杂谈 - 事件处理
大家都知道,游戏需要跟玩家交互,需要接收玩家的鼠标.键盘发出的命令,比如在地图上点击一下,人物就自动寻路走过去:键盘上按下某个键,就弹出一个背包界面. 这些逻辑是怎么处理的呢? 大家先不用深究太详细的 ...
- 一文带你认识Spring事务
前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y Spring事务管理我相信大家都用得很多,但可能仅仅 ...
- C#设计模式整理
我居然连一月一随笔都没有,啊啊啊,忙死个人 这个随笔主要是记录基于自己学习[美]James W.Cooper著的<C# Design Patterns : A Tutorial>一书中常用 ...
- Docker 创建 Crucible4.6.1 以及与 Crowd3.3.2 实现 SSO 单点登录
目录 目录 1.介绍 1.1.什么是 Crucible? 2.Crucible 的官网在哪里? 3.如何下载安装? 4.对 Crucible 进行配置 4.1.破解 Crucible 第一步 4.2. ...
- Windows Server 2016-活动目录NTP时间同步
在实际生产域环境下,往往会有很多跟时间不同步相关的问题,简单的说几种常见的情景:本地客户端时间与域控时间不统一导致无法加域:每次客户端电脑输入密码到进入桌面环境等N久:Skype for Busine ...
- Windows -- cmd命令: ipconfig 和 nbtstat
1. ipconfig 命令格式及参数如下: 2. nbtstat 命令格式及参数如下:
- 解决Maven无法下载fastdfs-client-java依赖,Dependency 'org.csource:fastdfs-client-java:1.27-SNAPSHOT' not found.
因为fastdfs-client-java-1.27-SNAPSHOT.jar这个依赖包在maven中央仓库是没有的, 需要自己编译源码成jar本地安装到maven 的本地仓库,安装完以后就能正常引用 ...
- AI应用开发实战 - 从零开始搭建macOS开发环境
AI应用开发实战 - 从零开始搭建macOS开发环境 本视频配套的视频教程请访问:https://www.bilibili.com/video/av24368929/ 建议和反馈,请发送到 https ...
- Spring之旅第三篇-Spring配置详解
上一篇学习了IOC的概念并初步分析了实现原理,这篇主要学习Spring的配置,话不多说,让我们开始! 一.Bean元素配置 1.1 基本配置 看一个最基本的bean配置 <bean name=& ...
- Fiddler原理~知多少?
首先我们学习Fidder这个工具,我们就应该去了解它的基本东西,比如这个单词的意思.Fiddler叫:小提琴.骗子的意思. 那么它是干什么的呢? Fiddler是一个http协议调试代理工具,它能够记 ...