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) modulePart of core TensorFlow since v1.4Full Keras API针对TF更好的优化与TF特别功能更好的整合,Estimator API、Eager execution2、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, TPUKeras: 基于 Python 的深度学习库Keras中文文档tensorflow.org/guide/kerasKeras的安装pip install Keraspython -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 Sequentialfrom keras.layers import Dense, Activationmodel = 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.Modelclass 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 Sequentialmodel = 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深度学习框架的注意事项(自动下载存放路径等)、使用方法之详细攻略

(0)

相关推荐