打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
DL框架之Keras:深度学习框架Keras框架的简介、安装(Python库)、相关概念、Keras模型使用、使用方法之详细攻略
DL框架之Keras:深度学习框架Keras框架的简介、安装(Python库)、相关概念、Keras模型使用、使用方法之详细攻略
相关文章
DL框架之Keras:Python库之Keras库的简介、安装、使用方法详细攻略
keras-yolo3:python库之keras-yolo3的简介、安装、使用方法详细攻略
Keras的简介
Keras是TensorFlow官方的高层API。Keras是一个高层神经网络API,并对TensorFlow等有较好的优化。,Keras由纯Python编写而成并基Tensorflow、Theano以及CNTK后端,也就是Keras基于什么东西来做运算。Keras 为支持快速实验而生,能够把你的idea迅速转换为结果。
1、Keras的特点
tensorflow.keras(tf.keras) module
Part of core TensorFlow since v1.4
Full Keras API
针对TF更好的优化
与TF特别功能更好的整合,Estimator API、Eager execution
2、Keras四大特性
1、用户友好:Keras是为人类而非机器设计的API。用户的使用体验始终是我们考虑的首要和中心内容。Keras遵循减少认知困难的最佳实践:Keras提供一致而简洁的API, 能够极大减少一般应用下用户的工作量,同时,Keras提供清晰和具有实践意义的bug反馈。
2、模块性:模型可理解为一个层的序列或数据的运算图,完全可配置的模块可以用最少的代价自由组合在一起。具体而言,网络层、损失函数、优化器、初始化策略、激活函数、正则化方法都是独立的模块,你可以使用它们来构建自己的模型。
3、易扩展性:添加新模块超级容易,只需要仿照现有的模块编写新的类或函数即可。创建新模块的便利性使得Keras更适合于先进的研究工作。
4、与Python协作:Keras没有单独的模型配置文件类型(作为对比,caffe有),模型由python代码描述,使其更紧凑和更易debug,并提供了扩展的便利性。
3、Keras的用户体验
(1)、Keras是专为人而非机器设计的API
它把用户体验放在首要和中心位置。
Keras遵循减少认知困难的最佳实践:它提供一致且简单的API,将常见用例所需的用户操作数量降至最低,并且在用户错误时提供清晰和可操作的反馈。
(2)、Keras易于学习且易于使用
作为Keras用户,可以更高效地工作,让你比竞争对手更快地尝试更多创意和帮助你赢得机器学习竞赛。
(3)、这种易用性不是以降低灵活性为代价
Keras与低级深度学习语言(特别是TensorFlow)集成,能够实现可以用基本语言构建的任何东西。特别是,作为tf.keras,Keras API与TensorFlow工作流程无缝集成。
4、如果你有如下需求,请选择Keras
简易和快速的原型设计(keras具有高度模块化,极简,和可扩充特性)
支持CNN和RNN,或二者的结合
无缝CPU和GPU切换。
5、Keras支持多后端和多平台
(1)、支持多种语言:Develop in Python, R   On Unix, Windows, OSX
(2)、支持多个后端:Keras与TensorFlow&Theano
TensorFlow和theano以及Keras都是深度学习框架,TensorFlow和theano比较灵活,也比较难学,它们其实就是一个微分器  Keras其实就是TensorFlow和Keras的接口(Keras作为前端,TensorFlow或theano作为后端),它也很灵活,且比较容易学。可以把keras看作为tensorflow封装后的一个API。Keras 是一个用于快速构建深度学习原型的高级库。我们在实践中发现,它是数据科学家应用深度学习的好帮手。Keras 目前支持两种后端框架:TensorFlow 与 Theano,而且 Keras 再过不久就会成为 TensorFlow 的默认 API。
Run the same code with…
-TensorFlow
-CNTK
-Theano
-MXNet
-PlaidML
(3)、支持多运算平台:CPU, NVIDIA GPU, AMD GPU, TPU
Keras: 基于 Python 的深度学习库
Keras中文文档
tensorflow.org/guide/keras
Keras的安装
pip install Keras
python -m pip install keras
哈哈,大功告成!继续学习去啦!
pip install --upgrade Kera
190827更新到2.2.5
190827再次还原到2.2.4
相关文章
Py之keras-resnet:keras-resnet的简介、安装、使用方法之详细攻略
Keras的使用方法
0、三种API方式:The Sequential Model (序列模型)、The functional API (函数式API)、Model subclassing(模型子类化)
from keras.models import Modelfrom keras.callbacks import ModelCheckpointfrom keras.layers import Conv2D, MaxPool2D, Flatten, Dropout, Dense, Inputfrom keras.optimizers import Adamfrom keras.backend.tensorflow_backend import set_sessionfrom keras.utils.vis_utils import model_to_dotimport tensorflow as tffrom keras.backend.tensorflow_backend import set_session np.random.seed(5)config = tf.ConfigProto()config.gpu_options.allow_growth=Trueset_session(tf.Session(config=config)) 1、The Sequential Model 序列模型
-非常简单
-仅适用于单输入,单输出,顺序的层堆叠
-适用于70%以上的用例
Sequential 序列模型如所示
可以简单地使用.add() 来堆叠模型
在完成了模型的构建后, 可以使用.compile() 来配置学习过程:
如果需要,还可以进一步地配置优化器:
批量地在训练数据上进行迭代:# x_train 和y_train 是Numpy 数组--就像在Scikit-Learn API 中一样
或者,可以手动地将批次的数据提供给模型:
一行代码就能评估模型性能:
对新的数据生成预测
1、快速开始序贯(Sequential)模型
序贯模型是多个网络层的线性堆叠,也就是“一条路走到黑”。
(1)、可以通过向Sequential模型传递一个layer的list来构造该模型:
from keras.models import Sequential
from keras.layers import Dense, Activation
model = Sequential([ Dense(32, units=784), Activation('relu'), Dense(10), Activation('softmax'), ])
(2)、也可以通过.add()方法一个个的将layer加入模型中:
model = Sequential() model.add(Dense(32, input_shape=(784,)))
model.add(Activation('relu'))
#引入Sequential,Dense,Activationfrom keras.models import Sequentialfrom keras.layers import Dense, Activation#向layer添加list方式model = Sequential([Dense(32, input_dim=784),Activation('relu'),Dense(10),Activation('softmax'),])#通过.add()方式model = Sequential()model.add(Dense(32, input_dim=784))model.add(Activation('relu')) 2、The functional API 函数式API
-象玩乐高积木
-多输入,多输出,任意静态图拓扑
-适用于95%的用例
Keras 函数式API 是定义复杂模型(如多输出模型、有向无环图,或具有共享层的模型)的方法。
例一:全连接网络
3、Model subclassing 模型子类化
-最大的灵活性
-更大的可能错误面
(1)、通过对tf.keras.Model 进行子类化并定义你自己的前向传播来构建完全可自定义的模型。在__init__ 方法中创建层并将它们设置为类实例的属性。在call 方法中定义前向传播。
(2)、在启用Eager Execution 时,模型子类化特别有用,因为可以命令式地编写前向传播。
(3)、以下示例展示了使用自定义前向传播进行子类化的tf.keras.Model
class MyModel(tf.keras.Model): def __init__(self, num_classes=10): super(MyModel, self).__init__(name='my_model') self.num_classes = num_classes # Define your layers here. self.dense_1 = layers.Dense(32, activation='relu') self.dense_2 = layers.Dense(num_classes, activation='sigmoid') def call(self, inputs): # Define your forward pass here, # using layers you previously defined (in `__init__`). x = self.dense_1(inputs) return self.dense_2(x) def compute_output_shape(self, input_shape): # You need to override this function if you want to use the subclassed model # as part of a functional-style model.# Otherwise, this method is optional. shape = tf.TensorShape(input_shape).as_list() shape[-1] = self.num_classes return tf.TensorShape(shape)实例化新模型类model = MyModel(num_classes=10) # The compile step specifies the training configuration.model.compile(optimizer=tf.train.RMSPropOptimizer(0.001), loss='categorical_crossentropy', metrics=['accuracy'])# Trains for 5 epochs.model.fit(data, labels, batch_size=32, epochs=5) 其他概念
1、shape
(1)、指定输入数据的shape
模型需要知道输入数据的shape,因此,Sequential的第一层需要接受一个关于输入数据shape的参数,后面的各个层则可以自动的推导出中间数据的shape,因此不需要为每个层都指定这个参数。
(2)、关于张量shape  更多详细内容参考这个博客https://blog.csdn.net/u013378306/article/details/56281549
在Keras和Tensorflow中,数据是以张量的形式表示的,张量的形状就是shape。TensorFlow用张量这种数据结构来表示所有的数据.你可以把一个张量想象成一个n维的数组或列表.一个张量有一个静态类型和动态类型的维数.张量可以在图中的节点之间流通即Flow。
你可以认为一个二阶张量就是我们平常所说的矩阵,一阶张量可以认为是一个向量.对于一个二阶张量你可以用语句t[i, j]来访问其中的任何元素.而对于三阶张量你可以用't[i, j, k]'来访问其中的任何元素.
(1)input_shape就是指输入张量的shape。例如 input_dim=784,说明输入是一个784维的向量,这相当于一个一阶的张量,它的shape就是(784,)
2、回调
1、回调是传递给模型的对象,用于在训练期间自定义该模型并扩展其行为。你可以编写自定义回调,也可以使用包含以下方法的内置tf.keras.callbacks:
tf.keras.callbacks.ModelCheckpoint '定期保存模型的检查点。'tf.keras.callbacks.LearningRateScheduler '动态更改学习速率。'tf.keras.callbacks.EarlyStopping '在验证效果不再改进时中断训练。'tf.keras.callbacks.TensorBoard '使用TensorBoard 监控模型的行为。'
2、要使用tf.keras.callbacks.Callback,请将其传递给模型的fit 方法:
callbacks = [ # Interrupt training if `val_loss` stops improving for over 2 epochs tf.keras.callbacks.EarlyStopping(patience=2, monitor='val_loss'), # Write TensorBoard logs to `./logs` directory tf.keras.callbacks.TensorBoard(log_dir='./logs') ]model.fit(data, labels, batch_size=32, epochs=5, callbacks=callbacks, validation_data=(val_data, val_labels)) 3、保存和恢复
(1)仅限权重:使用tf.keras.Model.save_weights 保存并加载模型的权重
model = tf.keras.Sequential([layers.Dense(64, activation='relu'), layers.Dense(10, activation='softmax')])model.compile(optimizer=tf.train.AdamOptimizer(0.001), loss='categorical_crossentropy',metrics=['accuracy'])'默认情况下,会以TensorFlow 检查点文件格式保存模型的权重'# Save weights to a TensorFlow Checkpoint filemodel.save_weights('./weights/my_model')# Restore the model's state,# this requires a model with the same architecture.model.load_weights('./weights/my_model')'权重也可以另存为KerasHDF5 格式(Keras多后端实现的默认格式)'# Save weights to a HDF5 filemodel.save_weights('my_model.h5', save_format='h5')# Restore the model's statemodel.load_weights('my_model.h5')
(2)、仅限配置:可以保存模型的配置,此操作会对模型架构(不含任何权重)进行序列化。即使没有定义原始模型的代码,保存的配置也可以重新创建并初始化相同的模型。Keras 支持JSON 和YAML 序列化格式:
# Serialize a model to JSON formatjson_string = model.to_json()json_stringimport json import pprintpprint.pprint(json.loads(json_string))'从json重新创建模型'fresh_model = tf.keras.models.model_from_json(json_string)
(3)整个模型:整个模型可以保存到一个文件中,其中包含权重值、模型配置乃至优化器配置。这样,您就可以对模型设置检查点并稍后从完全相同的状态继续训练,而无需访问原始代码。
# Create a trivial modelmodel = tf.keras.Sequential([layers.Dense(10, activation='softmax', input_shape=(32,)), layers.Dense(10, activation='softmax')])model.compile(optimizer='rmsprop',loss='categorical_crossentropy', metrics=['accuracy'])model.fit(data, labels, batch_size=32, epochs=5)# Save entire model to a HDF5 filemodel.save('my_model.h5')# Recreate the exact same model, including weights and optimizer.model = tf.keras.models.load_model('my_model.h5') 4、动态图机制:Eager Execution
不同于TensorFlow的静态机制。
Eager Execution 是一种命令式编程环境,可立即评估操作。此环境对于Keras 并不是必需的,但是受tf.keras 的支持,并且可用于检查程序和调试。
所有tf.keras 模型构建API 都与Eager Execution 兼容。虽然可以使用Sequential 和函数式API,但Eager Execution 对模型子类化和构建自定义层特别有用。
与通过组合现有层来创建模型的API 不同,函数式API 要求你编写前向传播代码。
Keras的中的模型使用
1、查找使用方法
from keras.models import Sequential
model = Sequential()
help(model.compile)
(1)、model.compile()函数,用来配置训练模型参数,可以指定你设想的随机梯度下降中的网络的损失函数、优化方式等参数(2)、model.summary()函数,Prints a string summary of the network.
(3)、model.fit_generator()函数,Fits the model on data generated batch-by-batch by a Python generator.The generator is run in parallel to the model, for efficiency.For instance, this allows you to do real-time data augmentation on images on CPU in parallel to training your model on GPU.
(4)、K.placeholder()    #用于得到传递进来的真实的训练样本
2、Keras的 6 种预训练模型
目前可知,Keras 已经将这 6 种预训练模型集成到了库中: VGG16、VGG19、ResNet50、Inception v3、Xception、MobileNet。VGG 网络以及从 2012 年以来的 AlexNet 都遵循现在的基本卷积网络的原型布局:一系列卷积层、最大池化层和激活层,最后还有一些全连接的分类层。MobileNet 本质上是为移动应用优化后的 Xception 架构的流线型(streamline)版本。
3、Keras深度学习框架的注意事项(自动下载存放路径等)、使用方法之详细攻略
DL之Keras: Keras深度学习框架的注意事项(自动下载存放路径等)、使用方法之详细攻略
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
深度学习:从理论到实践,探索神经网络的奥秘
【TensorFlow2.0】以后我们再也离不开Keras了?
将Keras作为tensorflow的精简接口
TensorFlow2.0 | 模型保存与加载
tensorflow2.0保存和恢复模型
编织人工智能:机器学习发展总览与关键技术全解析
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服