DL框架之Keras:深度学习框架Keras框架的简介、安装(Python库)、相关概念、Keras模型使用、使用方法之详细攻略
目录
3、Keras深度学习框架的注意事项(自动下载存放路径等)、使用方法之详细攻略
相关文章
DL框架之Keras:Python库之Keras库的简介、安装、使用方法详细攻略
keras-yolo3:python库之keras-yolo3的简介、安装、使用方法详细攻略
Keras是TensorFlow官方的高层API。Keras是一个高层神经网络API,并对TensorFlow等有较好的优化。,Keras由纯Python编写而成并基Tensorflow、Theano以及CNTK后端,也就是Keras基于什么东西来做运算。Keras 为支持快速实验而生,能够把你的idea迅速转换为结果。
(1)、Keras是专为人而非机器设计的API
(2)、Keras易于学习且易于使用
(3)、这种易用性不是以降低灵活性为代价
(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…
(3)、支持多运算平台:CPU, NVIDIA GPU, AMD GPU, TPU
Keras: 基于 Python 的深度学习库
Keras中文文档
tensorflow.org/guide/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的简介、安装、使用方法之详细攻略
0、三种API方式:The Sequential Model (序列模型)、The functional API (函数式API)、Model subclassing(模型子类化)
- from keras.models import Model
- from keras.callbacks import ModelCheckpoint
- from keras.layers import Conv2D, MaxPool2D, Flatten, Dropout, Dense, Input
- from keras.optimizers import Adam
- from keras.backend.tensorflow_backend import set_session
- from keras.utils.vis_utils import model_to_dot
-
-
- import tensorflow as tf
- from keras.backend.tensorflow_backend import set_session
-
- np.random.seed(5)
- config = tf.ConfigProto()
- config.gpu_options.allow_growth=True
- set_session(tf.Session(config=config))
-非常简单
-仅适用于单输入,单输出,顺序的层堆叠
-适用于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,Activation
- from keras.models import Sequential
- from 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'))
-象玩乐高积木
-多输入,多输出,任意静态图拓扑
-适用于95%的用例
Keras 函数式API 是定义复杂模型(如多输出模型、有向无环图,或具有共享层的模型)的方法。
例一:全连接网络 |
-最大的灵活性
-更大的可能错误面
(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
模型需要知道输入数据的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,)
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))
(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 file
- model.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 format
- json_string = model.to_json()
- json_string
- import json
- import pprint
- pprint.pprint(json.loads(json_string))
-
- '从json重新创建模型'
- fresh_model = tf.keras.models.model_from_json(json_string)
(3)整个模型:整个模型可以保存到一个文件中,其中包含权重值、模型配置乃至优化器配置。这样,您就可以对模型设置检查点并稍后从完全相同的状态继续训练,而无需访问原始代码。
- Create a trivial model
- model = 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 file
- model.save('my_model.h5')
-
- Recreate the exact same model, including weights and optimizer.
- model = tf.keras.models.load_model('my_model.h5')
不同于TensorFlow的静态机制。
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() 用于得到传递进来的真实的训练样本
目前可知,Keras 已经将这 6 种预训练模型集成到了库中: VGG16、VGG19、ResNet50、Inception v3、Xception、MobileNet。VGG 网络以及从 2012 年以来的 AlexNet 都遵循现在的基本卷积网络的原型布局:一系列卷积层、最大池化层和激活层,最后还有一些全连接的分类层。MobileNet 本质上是为移动应用优化后的 Xception 架构的流线型(streamline)版本。
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
添加我为好友,拉您入交流群!
请使用微信扫一扫!