【Keras】30 秒上手 Keras+实例对mnist手写数字进行识别准确率达99%以上

本文我们将学习使用Keras一步一步搭建一个卷积神经网络。具体来说,我们将使用卷积神经网络对手写数字(MNIST数据集)进行识别,并达到99%以上的正确率。

@为什么选择Keras呢?

主要是因为简单方便。更多细节请看:https://keras.io/

@什么卷积神经网络?

简单地说,卷积神经网络(CNNs)是一种多层神经网络,它可以有效地减少全连接神经网络参数量太大的问题。

下面就直接进入主题吧!

import keras 
keras.__version__

‘2.1.5’

from keras.models import Sequential
# 序贯模型
model = Sequential() 
from keras.layers import Dense 
import numpy as np 
import tensorflow as tf

配置keras模型

# units 矩阵运算输出的特征维度,input_dim 输入数据特征维度
model.add(Dense(units=64, activation='relu', input_dim=100))
model.add(Dense(units=10, activation='softmax')) 
model.add(Dense(units = 1024,activation='tanh')) 
model.output_shape

(None, 10)

model.output_shape

(None, 1024)

在完成了模型的构建后, 可以使用 .compile() 来配置学习过程

model.compile(loss='categorical_crossentropy',optimizer='sgd',metrics=['accuracy'])

训练

不需要写for循环

model.fit(x_train, y_train, epochs=5, batch_size=32)

一批批交给模型,需要自己写for循环

model.train_on_batch(x_batch, y_batch)

模型评估

loss_and_metrics = model.evaluate(x_test, y_test, batch_size=128)

模型预测

classes = model.predict(x_test, batch_size=128)



实例 mnist 手写数字进行识别

(外网下载数据可能很慢或者timeouts)

导包、定义变量

import keras
# 数据集
from keras.datasets import mnist
# 序贯模型
from keras.models import Sequential
# Dense:矩阵运算
# Dropout:防止过拟合
# Flatten:reshape(None,-1)
from keras.layers import Dense, Dropout, Flatten
# Conv2D:卷积运算
# MaxPooling2D:池化
from keras.layers import Conv2D, MaxPooling2D# 后端,后台
# 默认Tensorflow
from keras import backend as Kbatch_size = 128
num_classes = 10
epochs = 12# input image dimensions
img_rows, img_cols = 28, 28

数据操作,转换

import tensorflow as tf 
# the data, split between train and test sets
(x_train, y_train), (x_test, y_test) = mnist.load_data()# 四维的NHWC---->卷积运算需要
x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1)
x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1)
input_shape = (img_rows, img_cols, 1)# 类型转换
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')# 归一化 0 ~1
x_train /= 255
x_test /= 255
print('x_train shape:', x_train.shape)
print(x_train.shape[0], 'train samples')
print(x_test.shape[0], 'test samples')print(y_train.shape)
# convert class vectors to binary class matrices
# one-hot
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)

模型构建

# 声明序贯模型
model = Sequential()
# 第一层卷积
model.add(Conv2D(32, kernel_size=(3, 3),activation='relu',input_shape=input_shape))
# 第二层卷积
model.add(Conv2D(64, (3, 3), activation='relu'))
# 池化层
model.add(MaxPooling2D(pool_size=(2, 2)))
# dropout层
model.add(Dropout(0.25))
# reshape
model.add(Flatten())
# 全连接层,矩阵运算
model.add(Dense(1024, activation='relu'))
# dropout层
model.add(Dropout(0.5))
# 输出层
model.add(Dense(num_classes, activation='softmax'))

编译,最优化

model.compile(loss=keras.losses.categorical_crossentropy,optimizer=keras.optimizers.Adadelta(),metrics=['accuracy'])

训练

x_train.shape

(60000, 28, 28, 1)

model.fit(x_train, y_train,batch_size=batch_size,epochs=epochs,verbose=1,validation_data=(x_test, y_test))

Train on 60000 samples, validate on 10000 samples
Epoch 1/12
26752/60000 [============>…] - ETA: 1:38 - loss: 0.3388 - acc: 0.8965

score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

参考:
https://elitedatascience.com/keras-tutorial-deep-learning-in-python
http://adventuresinmachinelearning.com/keras-tutorial-cnn-11-lines/
https://keras.io/zh/#30-keras

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/456002.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分布式资本沈波:未来区块链杀手级应用将出现在“+区块链”

雷锋网5月22日报道,日前“区块链技术和应用峰会”在杭州国际博览中心举行。会上,分布式资本创始管理人沈波作了《区块链的投资现状与发展趋势》演讲。 沈波表示,由于区块链的共识机制和无法篡改两大特点,它在各行各业皆有应用潜力…

帧间预测小记

帧间预测后,在比特流中会有相应的信息:残差信息,运动矢量信息,所选的模式。 宏块的色度分量分辨率是亮度分辨率的一半(Cr和Cb),水平和垂直均一半。色度块采用和亮度块一致的分割模式&#xff0…

ImageJ Nikon_科研论文作图之ImageJ

各位读者朋友们又见面了,今天给大家介绍一款图片处理软件——ImageJ,这是一款免费的科学图像分析工具,广泛应用于生物学研究领域。ImageJ软件能够对图像进行缩放、旋转、扭曲、模糊等处理,也可计算选定区域内分析对象的一系列几何…

python中面向对象

面向对象 Object Oriented 面向对象的学习: 面向对象的语法(简单,记忆就可以搞定)面向对象的思想(稍难,需要一定的理解) 面向过程和面向对象的区别 面向过程开发,以函数作为基本结构…

【urllib】url编码问题简述

对url编解码总结 需要用到urllib库中的parse模块 import urllib.parse # Python3 url编码 print(urllib.parse.quote("天天")) # Python3 url解码 print(urllib.parse.unquote("%E5%A4%E5%A4%")) urlparse() # urllib.parse.urlparse(urlstring,scheme,…

冷知识 —— 地理

西安1980坐标系: 1978 年 4 月在西安召开全国天文大地网平差会议,确定重新定位,建立我国新的坐标系。为此有了 1980 国家大地坐标系。1980 国家大地坐标系采用地球椭球基本参数为 1975 年国际大地测量与地球物理联合会第十六届大会推荐的数据…

独家| ChinaLedger白硕:区块链中的隐私保护

隐私问题一直是区块链应用落地的障碍问题之一,如何既能满足监管,又能不侵害数据隐私,是行业都在攻克的问题。那么,到底隐私问题为何难?有什么解决思路,以及实践创新呢?零知识证明、同态加密等技…

手机处理器排行榜2019_手机处理器AI性能排行榜出炉,高通骁龙第一,华为排在第十名...

↑↑↑击上方"蓝字"关注,每天推送最新科技新闻安兔兔在近日公布了今年四月份Android手机处理器AI性能排行榜,榜单显示高通骁龙865处理器的AI性能在Android阵营中排在第一名——该处理器的AI性能得分接近46万分,今年的小米10、三星G…

芯片支持的且会被用到的H.264特性 预测编码基本原理

视频压缩: 1.H.264基本档次和主要档次;2.CAVLC熵编码,即基于上下文的自适应变长编码;(不支持CABAC,即基于上下文的自适应算术编码)分辨率:仅用到1080p60,即分辨率为1920*…

MongoDB 数据库 【总结笔记】

一、MongoDB 概念解析 什么是MongoDB? ​ 1、MongoDB是有C语言编写的,是一个基于分布式文件存储的开源数据库系统,在高负载的情况下,添加更多节点,可以保证服务器的性能 ​ 2、MongoDB为web应用提供了高性能的数据存储…

PHP 函数截图 哈哈哈

转载于:https://www.cnblogs.com/bootoo/p/6714676.html

python中的魔术方法

魔术方法 魔术方法就是一个类/对象中的方法,和普通方法唯一的不同时,普通方法需要调用!而魔术方法是在特定时刻自动触发。 1.__init__ 初始化魔术方法 触发时机:初始化对象时触发(不是实例化触发,但是和实…

2016年光伏电站交易和融资的十大猜想

1领跑者计划备受关注,竞价上网或从试点开始 领跑者计划规模大,上网条件好,又有政府背书,虽说价格也不便宜,但省去很多隐性成本,对于致力于规模化发展的大型企业来说仍是首要选择。同时,从能源管…

loading gif 透明_搞笑GIF:有这样的女朋友下班哪里都不想去

原标题:搞笑GIF:有这样的女朋友下班哪里都不想去这样的广场舞看着不凉快吗?大哥慢点,机器经受不住你这样的速度求孩子的心里阴影面积生孩子就是用来玩的。有这样的媳妇做饭,下班哪里也不想去1.领导在门外用门夹核桃&am…

Redis数据库 【总结笔记】

一、NoSql(非关系型数据库) NoSQL:NoSQL Not Only SQL 非关系型数据库 ​ NoSQL,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型…

基于IP的H.264关键技术

一、 引言 H.264是ITU-T最新的视频编码标准,被称作ISO/IEC14496-10或MPEG-4 AVC,是由运动图像专家组(MPEG)和ITU的视频编码专家组共同开发的新产品。H.264分两层结构,包括视频编码层和网络适配层。视频编码层处理的是块、宏块和片的数据&…

“光伏进社区” 应及早谋划布局

所谓“光伏进社区”就是全国城乡居民家庭大批量的利用家庭光伏系统,甚至出现光伏的社区化联网交换、合作等更深入的活动。虽然“光伏进社区”还有很长的路要走,但“光伏进社区”的各种经济、技术、社会条件正越来越向有利方向发展。 城乡居民集聚社区是光…

python中的装饰器和抽象类

装饰器和抽象类 装饰器就是对函数或者方法或者类进行修饰 #第一步:创建一个普通函数 def laxi():print(噗哧噗哧噗哧噗哧~~~)#调用函数 laxi() laxi()#第二步:扩展函数的功能(不是装饰器) #声明一个扩展函数 def deco…

eigen库安装_OpenCV+Eigen上位机程序移植(七十一)

1、给硬盘分区现在小伙伴们对于给电脑硬盘分区想必比较头疼,给电脑硬盘分区分为两种情况,一是在安装系统之前给系统硬盘分区,二是在安装系统之后给硬盘分区,我们现在购买的品牌机和笔记本的用户比较多,而且笔记本和品牌…

【实战操作】使用FFmpeg将一个视频文件中音频合成到另一个视频中 只需三秒

直接进入主题 主要参数: -i——设置输入文件名。-f——设置输出格式。-y——若输出文件已存在时则覆盖文件。-fs——超过指定的文件大小时则结束转换。-t——指定输出文件的持续时间,以秒为单位。-ss——从指定时间开始转换,以秒为单位。-t从…