登 录
注 册
< 人工智能
深度学习
机器学习
大模型
深度学习介绍
现状和未来
数学基础
通用工作流程
Keras简介
过拟合与欠拟合
卷积神经网络
热门推荐>>>
中台架构
中台建设与架构
Hadoop
源码分析-NN启动(三)
HBase
HBased对接Hive
Linux
Nginx高可用
Python
数据导出工具
Flink
3分钟搭建Flink SQL测试环境
Kafka
Kafka对接Flume
数据结构与算法
选择合适的算法
MySQL
数据备份恢复
计算机系统
信号量同步线程
Hive
Hive调优参数大全
其他框架
Azkaban Flow1.0与2.0
ClickHouse
表引擎-其他类型
技术成长
最好的职业建议
精选书单
技术成长书单—机器学习
技术资讯
数据在线:计算将成为公共服务
开发工具
IntelliJ IDEA 20年发展回顾(二)
系统工具
Mac命令行工具
虚拟化
内存虚拟化概述
云原生
云原生构建现代化应用
云服务
一文搞懂公有云、私有云...
Java
Spring Boot依赖注入与Runners
Go
Go函数与方法
SQL
SQL模板
安全常识
一文读懂SSO
当前位置:
首页
>>
深度学习
>>
Keras简介
Keras简介
2020-07-04 17:16:57 星期六 阅读:4251
Keras 是一个 Python 深度学习框架,可以方便地定义和训练几乎所有类型的深度学习模型。Keras 最开始是为研究人员开发的,其目的在于快速实验。Keras具有以下重要特性。 - 相同的代码可以在CPU和GPU上无缝切换运行; 具有用户友好的API,便于快速开发深度学习模型的原型; 内置支持卷积网络(用于计算机视觉)、循环网络(用于序列处理)以及二者的任意组合。 支持任意网络架构:多输入或多输出模型、层共享、模型共享等。这也就是说,Keras能够构建任意深度学习模型,无论是生成式对抗网络还是神经图灵机。 Keras 基于宽松的 MIT 许可证发布,这意味着可以在商业项目中免费使用它。它与所有版本的 Python 都兼容(截至 2017 年年中,从 Python 2.7 到 Python 3.6 都兼容)。 Keras已有200 000多个用户,既包括创业公司和大公司的学术研究人员和工程师,也包括 研究生和业余爱好者。Google、Netf lix、Uber、CERN、Yelp、Square 以及上百家创业公司都在 用 Keras 解决各种各样的问题。Keras 还是机器学习竞赛网站 Kaggle 上的热门框架,最新的深度学习竞赛中,几乎所有的优胜者用的都是 Keras 模型。 ####Keras、TensorFlow、Theano和CNTK Keras 是一个模型级(model-level)的库,为开发深度学习模型提供了高层次的构建模块。 它不处理张量操作、求微分等低层次的运算。相反,它依赖于一个专门的、高度优化的张量库 来完成这些运算,这个张量库就是Keras的后端引擎(backend engine)。Keras没有选择单个张量库并将 Keras 实现与这个库绑定,而是以模块化的方式处理这个问题(见图 3-3)。因此,几 个不同的后端引擎都可以无缝嵌入到 Keras 中。 目前,Keras 有三个后端实现 **`TensorFlow 后端`** **`Theano后端`** **`微软认知工具包(CNTK,Microsoft cognitive toolkit)后端`** 未来 Keras 可能会扩展到支持更多的深度学习引擎。 TensorFlow、CNTK 和 Theano 是当今深度学习的几个主要平台。Theano 由蒙特利尔大学的 MILA 实验室开发,TensorFlow 由 Google 开发,CNTK 由微软开发。你用 Keras 写的每一段代码都可以在这三个后端上运行,无须任何修改。也就是说,你在开发过程中可以在两个后端之间无缝切换,这通常是很有用的。例如,对于特定任务,某个后端的速度更快,那么我们就可以无缝切换过去。`推荐使用 TensorFlow 后端作为大部分深度学习任务的默认后端`,因为它 的应用最广泛,可扩展,而且可用于生产环境。 通过 TensorFlow(或 Theano、CNTK),Keras 可以在 CPU 和 GPU 上无缝运行。在 CPU 上运行 时,TensorFlow 本身封装了一个低层次的张量运算库,叫作 Eigen;在 GPU 上运行时,TensorFlow 封装了一个高度优化的深度学习运算库,叫作 NVIDIA CUDA 深度神经网络库(cuDNN)。 ####使用Keras开发 典型的Keras 工作流程和 MNIST分类的例子是类似的: - (1) 定义训练数据:输入张量和目标张量。 (2) 定义层组成的网络(或模型),将输入映射到目标。 (3) 配置学习过程:选择损失函数、优化器和需要监控的指标。 (4) 调用模型的 fit 方法在训练数据上进行迭代。 定义模型有两种方法: - 一种是使用 Sequential 类(仅用于层的线性堆叠,这是目前最常见的网络架构) 另一种是函数式 API(functional API,用于层组成的有向无环图,让你可以构 建任意形式的架构)。 前面讲过,这是一个利用 Sequential 类定义的两层模型(注意,我们向第一层传入了输 入数据的预期形状)。 ``` from keras import models from keras import layers model = models.Sequential() model.add(layers.Dense(32, activation="relu", input_shape=(784,))) model.add(layers.Dense(10, activation="softmax")) ``` 下面是用函数式 API 定义的相同模型。 ``` input_tensor = layers.Input(shape=(784,)) x = layers.Dense(32, activation="relu")(input_tensor) output_tensor = layers.Dense(10, activation="softmax")(x) model = models.Model(inputs=input_tensor, outputs=output_tensor) ``` 利用函数式 API,你可以操纵模型处理的数据张量,并将层应用于这个张量,就好像这些层是函数一样。 一旦定义好了模型架构,使用 Sequential 模型还是函数式 API 就不重要了。接下来的步 骤都是相同的。 配置学习过程是在编译这一步,你需要指定模型使用的优化器和损失函数,以及训练过程 中想要监控的指标。下面是单一损失函数的例子,这也是目前最常见的。 ``` from keras import optimizers model.compile(optimizer=optimizers.RMSprop(lr=0.0001), loss = "mse", metrics=["accuracy"]) ``` 最后,学习过程就是通过 fit() 方法将输入数据的 Numpy 数组(和对应的目标数据)传 入模型,这一做法与 Scikit-Learn 及其他机器学习库类似。 `model.fit(input_tensor, target_tensor, batch_size=128, epochs=10)`