keras主要模块

Keras主要模块简介

       tf.keras的使用说明了高层API已经被tensorflow使用。tf.keras下提供了许多模块,如:

1)activations激励函数,如relu、softmax、sigmoid等

2)applications应用模型,如densenet、mobilenet、vgg16等

3)dataset数据,如mnist、fashion_mnist等

4)layers神经网络层,如dense、conv2d等

5)model模型,如save、load等

6)utils工具,如to_categorical将类向量转化为二进制类矩阵等

 

一、keras.layers神经网络层

1、常见layer神经网络层

Input(…): 用于实例化一个输入 Tensor,作为神经网络的输入。
average_pooling1d(…): 一维平均池化层
average_pooling2d(…): 二维平均池化层
average_pooling3d(…):三维平均池化层
batch_normalization(…): 批量标准化层
conv1d(…): 一维卷积层
conv2d(…): 二维卷积层
conv2d_transpose(…): 二维反卷积层
conv3d(…): 三维卷积层
conv3d_transpose(…): 三维反卷积层
dense(…): 全连接层
dropout(…): Dropout层
flatten(…): Flatten层,即把一个 Tensor 展平,变为1维Tensor
max_pooling1d(…): 一维最大池化层
max_pooling2d(…): 二维最大池化层
max_pooling3d(…): 三维最大池化层
separable_conv2d(…): 二维深度可分离卷积层

 

2、查看Model中某一层的权重和偏置

       神经网络中可分为卷积层、池化层、全连接层等,并不是Model中的每一层都是可以查看的,如卷积层可以查看权重和偏置,但池化层就不能查看,因为池化层本身没有权重和偏置,这就首先需要理解神经网络各个层次背后的数学推导。Keras中查看某一层的权重和偏置使用model.get_layer('conv2d_1').get_weights(),其中conv2d_1为卷积层的名称。

weight_bc1, bias_bc1 = east_detect.get_layer('block1_conv1').get_weights()

 

 

二、keras.Model模型训练、评估、预测

1、model.compile 配置模型的训练参数,主要是优化器与损失函数

  在训练模型之前,我们需要通过compile来对学习过程进行配置,compile接收三个参数:优化器optimizer,损失函数loss,指标列表metrics。

compile(self, optimizer, loss, metrics=None, sample_weight_mode=None)

       optimizer:字符串(预定义优化器名)或者优化器对象,,如 rmsprop 或 adagrad,也可以是 Optimizer 类的实例。详见:optimizers

  loss:字符串(预定义损失函数名)或目标函数,模型试图最小化的目标函数,它可以是现有损失函数的字符串标识符,如categorical_crossentropy 或 mse,也可以是一个目标函数。详见:losses

  metrics:列表,包含评估模型在训练和测试时的网络性能的指标,典型用法是metrics=[‘accuracy’]。评估标准可以是现有的标准的字符串标识符,也可以是自定义的评估标准函数。

      例子:

# 多分类问题
model.compile(optimizer='rmsprop',
              loss='categorical_crossentropy',
              metrics=['accuracy'])
  
# 二分类问题
model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['accuracy'])
  
# 均方误差回归问题
model.compile(optimizer='rmsprop',
              loss='mse')
  
# 自定义评估标准函数
import keras.backend as K
  
def mean_pred(y_true, y_pred):
    return K.mean(y_pred)
  
model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['accuracy', mean_pred])

 

 

2、训练模型的三个独立函数fit、fit_generator、train_on_batch 

1)使用fit()函数

       当使用.fit()函数时,意味着如下两个条件成立:1)训练数据可以 完整地 放入到内存(RAM)里;2)数据已经不需要再进行任何处理了。 (实际的数据集不会都像Tensorflow官方教程中经常使用的MNIST数据集那样小,一次性加载训练数据到fit是行不通的。)

       fit函数的解释参照

fit(x=None, y=None, batch_size=None, epochs=1, verbose=1, callbacks=None, validation_split=0.0, validation_data=None, shuffle=True, class_weight=None, sample_weight=None, initial_epoch=0, steps_per_epoch=None, validation_steps=None)
  • x: 训练数据的 Numpy 数组。 如果模型中的输入层被命名,你也可以传递一个字典,将输入层名称映射到 Numpy 数组。 如果从本地框架张量馈送(例如 TensorFlow 数据张量)数据,x 可以是 None(默认)。
  • y: 目标(标签)数据的 Numpy 数组。 如果模型中的输出层被命名,你也可以传递一个字典,将输出层名称映射到 Numpy 数组。 如果从本地框架张量馈送(例如 TensorFlow 数据张量)数据,y 可以是 None(默认)。
  • batch_size: 整数或 None。每次提度更新的样本数。如果未指定,默认为 32.
  • epochs: 整数。训练模型迭代轮次。一个轮次是在整个 x 或 y 上的一轮迭代。请注意,与 initial_epoch 一起,epochs 被理解为 「最终轮次」。模型并不是训练了 epochs 轮,而是到第 epochs 轮停止训练。
  • verbose: 0, 1 或 2。日志显示模式。 0 = 安静模式, 1 = 进度条, 2 = 每轮一行。
  • callbacks: 一系列的 keras.callbacks.Callback 实例。一系列可以在训练时使用的回调函数。callbacks可以做的事情有:1)将每一个训练batch的精度写入tensorBoard中的logs以便查阅;2)周期性地将你的模型保存至disk硬盘中;3)提前终止训练。详见 callbacks
  • validation_split: 在 0 和 1 之间浮动。用作验证集的训练数据的比例。模型将分出一部分不会被训练的验证数据,并将在每一轮结束时评估这些验证数据的误差和任何其他模型指标。验证数据是混洗之前 x 和y 数据的最后一部分样本中。

https://www.cnblogs.com/wj-1314/p/9967480.html

2)使用fit_generator()

       在Keras中对于小样本数据而言可以使用fit()和predict(),因为它们可以被一次性放入到内存中。大多数的数据都是非常大的,并且不能一次性加载到内存中。解决办法就是使用fit_generator()和predict_generator(),这是在训练和预测过程中将图像加载到内存中的常用数据生成函数。

  • .fit is used when the entire training dataset can fit into the memory and no data augmentation is applied.
  • .fit_generator is used when either we have a huge dataset to fit into our memory or when data augmentation needs to be applied.

 

3)model.train_on_batch 运行一批样品的单次梯度更新

         train_on_batch用于非固定batch_size的模型训练与模型的继续训练。train_on_batch allows you to expressly update weights based on a collection of samples you provide, without regard to any fixed batch size. One case when it might be nice to use train_on_batch is for updating a pre-trained model on a single new batch of samples. Suppose you've already trained and deployed a model, and sometime later you've received a new set of training samples previously never used. You could use train_on_batch to directly update the existing model only on those samples. Other methods can do this too, but it is rather explicit to use train_on_batch for this case.

 

3、model.evaluate 模型评估

        model.evaluate是评估你训练的模型,它的输出结果是精度accuracy与损失,而不是预测你输入的数据。若需要对当前输入数据进行预测可使用model.predict。

4、model.predict 模型预测

        model.predict除了对于输出层预测外,还能对于中间层进行预测,具体方法为重新搭建一个中间层为最终输出的模型,进行predict。

# 获取中间层输出
layer_name = 'dense_2'
intermediate_layer_model = Model(inputs=load_model.input, outputs=load_model.get_layer(layer_name).output)
intermediate_output = intermediate_layer_model.predict(x_test_forpredict)

 

 

三、keras.utils工具

1)to_categorical 将类向量(整数)转换为二进制类矩阵。

keras.utils.to_categorical(y, num_classes=None, dtype='float32')

例如,用于 categorical_crossentropy。

参数

  • y: 需要转换成矩阵的类矢量 (从 0 到 num_classes 的整数)。
  • num_classes: 总类别数。
  • dtype: 字符串,输入所期望的数据类型 (float32float64int32...)

示例

# 考虑一组 3 个类 {0,1,2} 中的 5 个标签数组:
> labels
array([0, 2, 1, 2, 0])
# `to_categorical` 将其转换为具有尽可能多表示类别数的列的矩阵。
# 行数保持不变。
> to_categorical(labels)
array([[ 1.,  0.,  0.],
       [ 0.,  0.,  1.],
       [ 0.,  1.,  0.],
       [ 0.,  0.,  1.],
       [ 1.,  0.,  0.]], dtype=float32)

返回

输入的二进制矩阵表示。

 

2)绘制网络模型

from tensorflow.keras.utils import plot_model

# 用于 Keras绘制网络模型
draw_model = False
if draw_model == True:
    plot_model(model, show_shapes=True,to_file='../model.png')

 

 

 

参考文章:

【1】https://www.tensorflow.org/api_docs/python/tf/keras/Model

【2】https://blog.csdn.net/xierhacker/article/details/82747919

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值