keras库的安装及使用,以全连接层和手写数字识别MNIST为例
1、什么是keras
什么是keras?
- keras以TensorFlow和Theano作为后端封装,是一个专门用于深度学习的python模块。
- 包含了全连接层,卷积层,池化层,循环层,嵌入层等等等,常见的深度学习模型。
包含用于定义损失函数的Losses,用于训练模型的Optimizers,评估模型的Metrics,定义激活函数的Activations,防止过拟合的Regularizers等功能 - keras不需要了解太多理论知识,可以直接使用模型,新手入门十分友好。
如何安装keras?
- 你可以直接使用pip安装它
pip install keras -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
也可以通过Anaconda安装它
https://gwj1314.blog.csdn.net/article/details/120818390也可以使用conda安装它
conda install keras
- 也可以再Github上找到它
https://github.com/keras-team/keras
2、MNIST数据集
全连接层 mnist_mlp.py
详细数据请见:http://yann.lecun.com/exdb/mnist/
https://en.wikipedia.org/wiki/MNIST_database
数据包含:
训练集图像train-images-idx3-ubyte.gz和标签train-labels-idx1-ubyte.gz
测试集图像t10k-images-idx3-ubyte.gz和标签t10k-labels-idx1-ubyte.gz
训练目标:
基于手写数字图片预测数值。
# 加载包
import numpy as np
from keras.utils import np_utils
import keras
from keras.datasets import mnist # mnist数据集
from keras.models import Sequential #核心模型结构
from keras.layers.core import Dense, Dropout, Activation #Dense即全连接层,Dropout为防止过拟合的采样层,Activation为激活函数
# from keras.optimizers import RMSprop # 导入优化器
# from keras import optimizers
# from tensorflow.python.keras.api._v2.keras.optimizers import SGD, Adam, RMSprop# 1、加载数据
batch_size = 128 # BGD对训练集分批时,每批数据的记录数量128条
nb_classes = 10 # 标签的类别数量,0-9共10类
nb_epoch = 20 # 训练轮数,每次选择一批记录训练,共重复10轮
# 使用keras加载已经准备好的mnist数据
(X_train, y_train), (X_test, y_test) = mnist.load_data() # 将数据集分为训练集和测试集的特征和标签
X_train = X_train.reshape(60000, 784) # 用reshape将返回的numpy array类型转数组
X_test = X_test.reshape(10000, 784) # 将三维的10000*28*28特征降为二维的10000*784
X_train = X_train.astype('float32') # 将0-255的像素点整数变位浮点数
X_test = X_test.astype('float32')
X_train /= 255 # 将像素点归化到0~1
X_test /= 255
print(X_train.shape[0], 'train samples')
print(X_test.shape[0], 'test samples')
Y_train = np_utils.to_categorical(y_train, nb_classes) # 由于原始标签是数字,所以需要对应到类别编码的对应向量
Y_test = np_utils.to_categorical(y_test, nb_classes) # 如2对应到[0,0,1,0,0,0,0,0,0,0]# 2、定义模型
model = Sequential() # 使用Sequential()函数定义一个串联结构的模型, 使用add()函数向模型中添加网络层
model.add(Dense(512, Activation('relu'), input_shape=(784,))) # 全连接层(512个神经元,激活函数为relu, 接受大小为784的输入层)
model.add(Dropout(0.2)) # Dropout层,防止过拟合,上一层的输出有0.2的概念被忽略
model.add(Dense(512)) # 再添加一个全连接层(512个神经元)
model.add(Activation('relu'))
model.add(Dropout(0.2)) # 再一个Dropout层
model.add(Dense(10)) # 最后一个输出层
model.add(Activation('softmax')) # 使用softmax作为激活函数,对10个神经元输出进行归一化
model.summary() # 查看模型总结(每一层的网络类型,输出形状,参数数量,以及模型总共的参数数量)# 3、训练模型
model.compile(loss='sparse_categorical_crossentropy', # compile()函数编译模型,指定所需的损失函数,优化算法,评估指标#optimizer=keras.optimizers.RMSprop(), # 这里设置为多分类交叉熵,RMSprop算法,正确率optimizer='adam',metrics=['acc'])
history = model.fit(x=X_train, y=y_train, # fix()函数在指定训练集上训练模型,需要指定参数batch_size和verbosebatch_size=512,epochs=10,#verbose=1, # verbose指定训练过程中打印信息的方式validation_data=(X_test, y_test)) # 使用测试集作为校验数据,实时根据校验数据优化训练的方向# 4、预测数据
score = model.evaluate(X_test, y_test, verbose=0) # 使用evaluate()函数在测试机上评估模型的性能
print('Test score:', score[0])
print('Test accuracy:', score[1])
每一轮训练结束后,都会打印出当前的模型在训练集和测试集上的损失函数和正确率。
随着训练轮数的增加,损失函数逐渐减小,正确率逐渐提高,说明模型得到了优化。
最后得到了98.1%左右准确率的模型。
keras库的安装及使用,以全连接层和手写数字识别MNIST为例相关推荐
- python手写英文识别_pytorch三层全连接层实现手写字母识别方式
先用最简单的三层全连接神经网络,然后添加激活层查看实验结果,最后加上批标准化验证是否有效 首先根据已有的模板定义网络结构SimpleNet,命名为net.py import torch from to ...
- 全连接神经网络——MINST手写数字识别
简介 本文构建了一个全连接神经网络(FCN),实现对MINST数据集手写数字的识别,没有借助任何深度学习算法库,从原理上理解手写数字识别的全过程,包括反向传播,梯度下降等.最终的代码总行数不超过200 ...
- 两层全连接神经网络实现手写数字识别
一,思路: 分为两步,第一步是训练模型然后把模型保存到磁盘,第二步是复现模型结构然后读取模型权重系数,输入手写数字图片验证模型识别能力. 二,模型训练 在这部分使用mnist数据集,该数据集含有七万张 ...
- Keras搭建CNN(手写数字识别Mnist)
MNIST数据集是手写数字识别通用的数据集,其中的数据是以二进制的形式保存的,每个数字是由28*28的矩阵表示的. 我们使用卷积神经网络对这些手写数字进行识别,步骤大致为: 导入库和模块 我们导入Se ...
- 莫烦keras学习代码二(手写数字识别MNIST classifier CNN版)
知道了CNN的原理,同样是只要将之前用tensorflow写的几个建立网络的函数用keras的更简单的方法替换就行. 训练结果: 用Sequential().add()添加想要的层,添加卷积层就用Co ...
- 1、基于Keras、Mnist手写数字识别数据集构建全连接(FC)神经网络训练模型
文章目录 前言 一.MNIST数据集是什么? 二.构建神经网络训练模型 1.导入库 2.载入数据 3.数据处理 4.创建模型 5.编译模型 6.训练模型 7.评估模型 三.总代码 前言 提示: 1.本 ...
- 深蓝学院第二章:基于全连接神经网络(FCNN)的手写数字识别
如何用全连接神经网络去做手写识别??? 使用的是jupyter notebook这个插件进行代码演示.(首先先装一个Anaconda的虚拟环境,然后自己构建一个自己的虚拟环境,然后在虚拟环境中安装ju ...
- 深度学习--TensorFlow(项目)Keras手写数字识别
目录 效果展示 基础理论 1.softmax激活函数 2.神经网络 3.隐藏层及神经元最佳数量 一.数据准备 1.载入数据集 2.数据处理 2-1.归一化 2-2.独热编码 二.神经网络拟合 1.搭建 ...
- 用MXnet实战深度学习之一:安装GPU版mxnet并跑一个MNIST手写数字识别 (zz)
用MXnet实战深度学习之一:安装GPU版mxnet并跑一个MNIST手写数字识别 我想写一系列深度学习的简单实战教程,用mxnet做实现平台的实例代码简单讲解深度学习常用的一些技术方向和实战样例.这 ...
最新文章
- Ant 脚本打印系统属性变量、ant内置属性
- Python+Selenium WebDriver API:浏览器及元素的常用函数及变量整理总结
- 伪原创工具安全第一嘛~~
- Zookeeper基本概念
- 报告显示37%网站存在JavaScript库漏洞
- php页面采集正则,PHP simple_html_dom.php+正则 采集文章代码
- 2010年3月再谈前端工程师的笔试题
- java trunc函数_TRUNC函数的用法
- 微积分应用 计算机,微积分及其应用 P.D.Lax等著;林开亮
- 汇编语言典型例子详解_汇编语言及编程实例(电子教案).pdf
- 保持简单----纪念丹尼斯•里奇(Dennis Ritchie)
- The essense of the software atchitecture
- 解决电脑关机后自动重启问题
- Bluefish Linux下的web编辑神器-Hello,World
- 用c语言用*组成C字母,C语言字符集由字母,数字,空格,标点符号和特殊字符组成...
- Html源代码图片解密,通过图片加密、解密文件
- 谷歌浏览器怎么拦截网页广告 5步解决广告困扰
- php 精湛技术,【名医风采】范学民:用精湛技术温暖患者
- 如何运用VR3d模型线上展示构建博物馆展厅与展馆
- Android面试题和答案