百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

智造讲堂:深度学习框架之Keras(keras框架介绍)

liuian 2025-03-30 18:30 19 浏览

引自:《深度学习》(作者:文龙, 李新宇)


Keras是深度学习领域另一个常用框架。它以TensorFlow、Theano、CNTK作为后端引擎运行,提供直观而简洁的API,即使是非专业人员,也可以在各自领域轻松使用和开发深度学习模型,如多重感知机、卷积神经网络、循环神经网络以及各种复杂的网络模型(Keras官网为https://keras.io/)。


目前,Keras具有广阔的应用场景,具有良好的模块化设计、用户友好的接口规范等特点。它将大量重复的工作进行抽象并形成接口,使得用户只需采用少量代码完成接口部分即可实现深度学习模型的快速搭建,以节约模型构建时间。同时,Keras支持CPU和GPU的无缝运行,也支持多GPU并行计算。目前,Keras的API已经被TensorFlow借鉴,形成了TensorFlow下的Keras模块。


本案例采用TensorFlow下Keras模块搭建一个CNN模型,并将其应用在Cifar10数据集上。Cifar10数据集是著名的图像分类数据集,包含10个类别,每个类别6000张32x32的彩色图像,总数据量为60000张图像。其中50000张为训练集图像,另外10000张为测试图像。Cifar10数据集下载地址为http://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz。但是,Keras已经将Cifar10的下载和使用进行了封装,只需要调用相关函数即可。本案例的操作如下:


(1)导入相关库。如图1所示,本实例代码共导入了TensorFlow库和tensorflow.keras库下的datasets(数据集)、layers(网络层)和models(模型)的相关库。最后导入了绘图软件matplotlib中的绘图模块pyplot,并将其命名为plt。


图1 导入Keras相关库


(2)准备数据集。下载并准备Cifar10数据集。tensorflow.keras中Cifar10的相关接口在datasets类下,因此直接导入即可,如图2中的代码第8行所示。第11行代码为对其进行预处理。第14~26行为展示其中前25个样本,图像输出结果如图3所示。


图2 导入Cifar10数据集


图3 Cifar10数据集中前25幅图像


(3)构造CNN模型。在tensorflow.keras中,卷积层的构造函数为Conv2D,池化层为MaxPooling2D,全连接层为Dense函数。如图4所示,第30行定义了一个模型(model),第31行构建了第一个卷积层,其参数分别表示卷积层的深度32、卷积核的大小3*3、激活函数Relu。其中input_shape表明其输入的tensor维度,为(32, 32, 3)。CNN模型的输入Tensor的形式为(image_height, image_width, color_channels),分别包含了图像高度、宽度及颜色信息。如果不熟悉图像处理,颜色信息建议使用RGB色彩模式,此模式下,color_channels为(R,G,B)分别对应RGB的三个颜色通道(color_channels)。由于Cifar10数据集是32x32的彩色图像,所以其数据形式正好为(32, 32, 3)。


图4 构造CNN模型


第32行构建了一个最大池化层,池化层的参数为2*2。第33~35行定义了交替的卷积层和池化层,其意义不在重复。


第38行调用Flatten()函数将3维张量转换为1维,之后传入一个或者多个Dense层中。本例中第39行和第40行分别定义了两个Dense层。在最后的Dense层中,添加了softmax激活函数,实现对Cifar10数据集中10个类别的预测输出。


第43层展示了该CNN模型各层的参数状况,其结果如图5所示。图中Layer(type)分别表示层名称、层类型,OutputShape表示数据张量在图中的维度变化,Param表示参数量。由此可见,MaxPooling2D会将数据张量的宽度和高度信息降低一半。而Flatten层将4*4*64的三维张量转化为1024的一维张量。


图5 CNN模型各层的参数状况


(4)编译并训练模型。在本例中,由于Cifar10数据集的label是数字编码,故采用SparseCategoricalCrossentropy函数。对于独热编码的情况,可以直接采用CategoricalCrossentropy函数。在本例中,训练的优化器选择Adam优化器,训练中采用的度量指标为准确率(accuracy)。


模型的编译如图6的第46行所示,分别指定模型的优化器、损失函数和度量指标。第50行表示模型的训练,其中train_images和train_labels分别为训练集样本和训练集的label。参数epoches指定了训练次数。此处并未指定批量,故默认为每批使用全部样本。参数validation_data表示验证集。该模型的训练结果如图7所示。从结果上看,经过10步的训练,该CNN模型的预测精度已经达到74.50%。


图6 编译并训练模型


图7 CNN模型在Cifar10数据集上的训练结果

相关推荐

HR必备Excel函数:4个与日期相关的计算函数。

提到日期函数,很多人首先会想到“today”,它可以显示当天的日期,并且每次打开表格时都会自动更新。但是,对于前天、昨天、明天和后天的日期,就不能用yesterday或者tomorrow等这些英文了,...

这篇文章有点长,但可以让你十分钟玩转Excel的时间函数

日期与时间函数——TODAY、NOW、YEAR、MONTH、DAY!如何用WORKDAY函数查询距离某天的第20个工作日是哪一天?如何用NETWORKDAYS函数查询员工工作了多少个工作日?如何用WE...

Excel2020年日历套装,表格设计,农历显示,查阅套打轻松应用

Hello大家好,我是帮帮。今天跟大家分享一组Excel2020年日历套装,表格设计,自带农历控件,查阅套打轻松应用。有个好消息!为了方便大家更快的掌握技巧,寻找捷径。请大家点击文章末尾的“了解更多”...

巧用NETWORKDAYS函数计算两个日期之间工作日的天数

带有日期的单元格是我们日常使用EXCEL的时候经常见到的,有的时候我们需要求出两个日期之间间隔的天数,可以直接用结束日期减去开始日期即可,这是个非常简单的减法公式。不过这个单纯的减法公式会默认去掉开始...

Excel按工作日、休息日进行汇总

1、按周六日/其它时间汇总为了区分一周的周六日和其它时间,可以使用WEEKDAY函数,把WEEKDAY函数的第2个参数指定为2,如WEEKDAY(A3,2),则周一返回1,周二返回2,…,周六返回...

如何计算每月应出勤天数,如有法定假期和调休,如何计算

本文介绍如何计算每月的应出勤天数。第一部分介绍正常双休制下计算应出勤天数;第二部份介绍当月有法定假期和调休的情况下计算应出勤天数。一、计算正常双休制的应出勤天数如下图所示,要求计算各员工2021年3月...

《Excel一键生成工作日历:让会议排期更轻松!》

每当需要安排会议时,总要翻看日历确认工作日,再逐个标注会议时间,既耗时又容易出错。今天教大家用Excel快速生成工作日历表,让会议排期变得简单高效!一、快速生成日历框架创建基础日期:在A1单元格输入月...

如何计算指定日期区间内,有多少工作日和休息日?

大家好,今天咱们要解决的问题是如何计算给定的一段日期内,正常工作日有多少天,放假时间有多少天?比如咱们要计算2025年3月份工作日一共有多少天,又有多少天放假,如下图所示:通过肉眼我们可以数清楚,20...

如何如何在表格中自动突出显示双休日?

现在不少人喜欢用Excel来制作备忘录或安排工作事项。在表格中输入日期后,可以使用条件格式突出显示双休日,避免在休息日安排了工作。具体方法是这样的:第1步:选择要设置条件格式的日期单元格区域;在“开始...

excel函数技巧:networkdays.intl判断节假日

如图,想知道6月的每一天是否是节假日,公式如下:=NETWORKDAYS.INTL(A2,A2,1,$E$2:$E$28)这个函数既可以判断当前日期(一参=二参)是否是周末及工作日(三参、四参)还可得...

仅需3步,让考勤表根据实际休息日,自动地填充颜色

Hello,大家好,之前跟大家分享了我们如何让考勤表根据单休与双休自动的填充颜色,最近有粉丝问到:能不能让考勤表根据实际的休息日自动的填充颜色呢?可以是可以,只不过因为牵扯到假期调休,我们每年的休息日...

5步搞定动态考勤表!标记节假日、调休日?Excel自动变色!

今天教你用「动态考勤表」一招解决所有问题!只需输入月份,自动变色、自动更新节假日,从此告别加班,效率翻倍!动态考勤表的优势:自动变色:节假日、双休日一键标记,颜色分明。一表多用:修改月份即可...

一起用python做个炫酷音乐播放器,想听啥随便搜

前言前段时间写的Python自制一款炫酷音乐播放器,有不少小伙伴私信我,对播放器提了不少改进建议,让我完善播放器的功能。今天音乐播放器2.0版本完成了,大家一起来看看是如何用python自制一款炫酷的...

用Python做个“冰墩墩雪容融”桌面部件(好玩又有趣)

桌面太单调?今天就带大家,一起用Python的PyQt5开发一个有趣的自定义桌面动画挂件,看看实现的动画挂件效果!下面,我们开始介绍这个自定义桌面动画挂件的制作过程。一、核心功能设计实现将动态图gif...

Python串口调试助手源码分享

以下是一个基于Python和PyQt5实现的串口调试助手示例,包含核心功能实现代码:pythonimportsysimportserialfromPyQt5.QtCoreimportQTim...