Keras模型与层
Contents
[TOC]
Keras常用的模型与层
模型与层是Keras中的两个最基本的概念。
Keras在Tensorflow.Keras.Layers下内置了丰富的深度学习常用的各种功能的预定义层,举例如下:
– Layers.Dense
– Layers.Flatten
– Layers.RNN
– Layers.BatchNormalization
– Layers.Dropout
– Layers.Conv2D
– Layers.MaxPooling2D
– Layers.Conv1D
– Layers.Embedding
– Layers.GRU
– Layers.LSTM
– Layers.Bidirectional
– Layers.InputLayer
如果上述的内置网络层无法满足需求,则Keras允许我们自定义层,通过继承Tensorflow.Keras.Engine.Layer基类创建自定义网络层
基础层
- Dense:
全连接层,逻辑上等价于这样一个函数,权重W为mxn的矩阵,输入为x为nw维向量,激活函数为Activation,偏置项为Bias,输出向量Out为m维向量。函数如下,Out=Activation(Wx+Bias),即一个线性变化加一个非线性变化产生输出 - Activation
激活函数曾,一般放在全连接层后面,等价于在全连接层中指定激活函数,激活函数可以提高模型的非线性表达能力。 - Dropout
随机丢弃层,训练期间以一定概率将输入置零(等价于按照一定的概率将CNN单元暂时从网络中丢弃),是一种正则化手段,可以作为CNN中防止过拟合、提高训练效果的神器 - BatchNormalization
批标准化层,通过线性变换将输入批次缩放平移成稳定的均值和标准差,可以增强模型对输入批次的不同分布的适应性,加快训练速度,有轻微正则化效果。一般在激活函数之前使用 - SpatialDropout2D
空间随机置零层,训练期间以一定概率将整个特征图置零,是一种正则化手段,有利于避免特征图之间过高的相关性 - InputLayer
输入层,通常在使用Function API方式构建模型时作为第一层 - DenseFeature
特征转换层,用于接收一个特征列表并产生一个全连接层 - Flatten
展平层,用于将多维张量展平开压平成一维张量 - Reshape
形状变换层,可以改变张量的形状 - Concatenate
拼接层,可以将多个张量在某个维度上拼接 - Add
加法层 - Subtract
减法层 - Maximum
取最大值层 - Minimum
取最小值层
卷积层
- Conv1d
普通1维卷积层,常用于文本和时间序列的卷积 - Conv2d
普通2维卷积层,常用于图像的空间卷积 - Conv3d
普通3维卷积层,常用于视频或体积上的空间卷积 - SeparableConv2D
2维深度可分离卷积层,不同于普通卷积层,可以同事对区域和通道进行操作 - DepthwiseConv2D
2维深度卷积层,仅有2维深度可分离卷积层的前半部分操作 - Conv2DTranspose
2维卷积转置层,也称反向卷积层 - LocallyConnected2D
2维局部连接层 - MaxPool2D
2维最大池化层 - AveragePooling2D
2维平均池化层 - GlobalMaxPool2D
全局最大池化层 - GlobalAveragePooling3D
全局平均池化层
循环网络相关层
- Embedding
嵌入层 - LSTM
长短记忆循环网络层 - GRU
门控循环单元层 - SimpleRNN
简单循环网络层 - ConvLSTM2D
卷积长短记忆循环网络层 - Bidirectional
双向循环网络包装器 - RNN
RNN基本层 - Dot-prodcut Attention
Dot-product类型注意力机制层 - AdditiveAttention
Additive类型注意力机制层 - TimeDistributed
时间分布包装器层
自定义层
可以通过集成Tensorflow.Keras.Engine.Layer类来编写自定义层。
集成该类,重新实现层构造函数,并重写Build和call这两个方法(build方法一般定一层需要被训练的参数,call方法一般定义前向传播运算逻辑,也可以添加自定义的方法)
自定义模型
自定义模型需要先集成Tensorflow.Keras.Engine.Model,再在构造函数中初始化模型所需要的层,并重载call()方法进行模型的调用,建立输入和输出之间的函数关系
模型常用API
- 模型类
Tensorflow.Keras.Engine.Model(ModelArgs args)
模型类的参数为ModelArgs参数列表类,包含Inputs(模型的输入)和Outputs(模型的输出)
- 模型类的summary方法
Model.summary(int line_length=-1,float[] positions=null)
line_length:int类型,打印的总行数,默认值为-1,代表打印所有内容
positions:float类型,指定每一行中日志元素的相对或绝对位置,默认值为null
- Sequential类
Tensorflow.Keras.Engine.Sequential(SequentialArgs args)
- Sequential类的add方法
Sequential.add(Layer layer)
- Sequential类的pop方法
Sequential.pop()
用于删除网络模型的最后一个网络层
6. compile(编译)方法
Model.compile(ILossFunc loss,OptimizerV2 optimizer,string[] metrics)
该方法用于配置模型的训练参数。
– optimizer
优化器,参数类型为优化器名称的字符串或优化器实例
– loss
损失函数,参数类型为损失函数体或Tensorflow.Keras.Losses.Loss实例
– metrics
在模型训练和测试过程中采用评估指导列表,列表元素类型为评估函数名称的字符串,评估函数体或Tensorflow.Keras.Metrics.Metric实例
– loss_weigths
可选参数,类型为列表或字典,通过设置损失函数的权重系数来确定输出中损失函数的贡献度
– weighted_metric:
可选参数,类型为列表,包括在训练和测试期间要通过sampleweight或classweigth评估和加权的指标列表
– run_eagerly
可选参数,类型为bool,默认值为false,如果设置为true,则模型结构将不会被tf.function修饰和调用
– stepsperexecution
可选参数,类型为int,默认值为1,,表示每个tf.function调用中要运行的批处理数
- fit(训练)方法
Model.fit(NDArray x,NDArray y,int batch_size=-1,int epochs=1,int verbose=1,float validation_split=0f,bool shuffle=true,int initial_epoch=0,int max_queue_size=10,int workers=1,bool use_multiprocessing=false)
参数如下:
– x;
输入数据,类型为NumPy数组或张量。
– y;
标签数据,类型和x保持一致
– batch_size
批次大小,类型为int,指定每次梯度更新时每个样本批次的数量
– epochs
训练轮次数,类型为int,表示模型训练的迭代轮数
– verbose
详细度,类型为整数0,1或2,设置终端输出信息的详细程度。0位最简模式,1位简单显示进度信息;2位详细显示每个训练周期的数据
– validation_split
验证集划分比,类型为0~1之间的float,自动从训练集中划分出该比例的数据作为验证集。模型将剥离训练数据这一部分,不对其进行训练,并且将在每个轮次结束时评估验证集数据的损失
– shuffle
数据集乱序,类型为bool,默认值为true,表示每次训练前都将该批次中的数据随机打乱。
– initial_epoch
周期起点,类型为int,默认值为0,表示训练开始的轮次起点(常用语重启恢复之前训练中的模型)
– max_queue_size
队列最大容量,默认为10,设置数据生成器队列的最大容量
– workers
进程数,类型为int,默认值为1,设置在使用基于进程的线程时,要启动的最大进程数。如果未指定,则workers的默认值为1;如果为0,则将在主线程上执行数据生成器
– use_multipprocessing:
是否使用异步线程,类型为bool,默认值为flase。如果true,则需要使用基于进程的线程
8. evaluate(评估)方法
Model.evaluate(NDArray x,NDArray y,int batch_size=-1,int verbose=1,int steps=-1,int max_queue_size=10,int workers=1,bool use_multiprocessing=false,bool return_dict=false)
evaluate方法用于返回测试集上评估的模型损失和精度。
– x
输入的测试数据,类型为NumPy数组或张量
– y
测试的标签数据,类型和x保持一致
– batch_size
批次大小,类型为int,指定每次计算时每个样本批次的数量
– verbose
详细度,类型为整数0或1,设置终端输出信息的详细程度。0位最简模式;1位简单现实进度信息
– steps
迭代步数,类型为int,默认值为-1,设置评估周期内的迭代步数(样本批次数量)
– max_queue_size
队列最大容量,类型为int,默认值为10,设置数据生成器队列的最大容量。
– max_queue_size
队列最大容量,类型为int,默认值为10,设置数据生成器队列的最大容量。
– workers
进程数,类型为int,默认值为1,设置在使用基于进程的线程时,要启动的最大进程数。如果未指定,则workers的默认值为1,如果未0,则将在主线程上执行数据生成器
– use_multiprocessing
是否使用异步线程,类型为bool,默认值为flase。如果为true,则需要使用基于进程的线程
– return_dict
返回字典,类型为bool,默认值为flase.如果为true,则返回字典类型的损失和指标结果,字典的key为数据的名称里如果为flase,则正常放回列表类型的结果
9. predict(预测方法)
Model.predict(Tensor x,int batch_size=32,int verbose=0,int steps=-1,int steps=-1,int max_queue_size=10,int workers=1,bool use_multiprocessing=false)
predict方法用于生成输入样本的预测输出
– x
输入的测试数据,类型为张量
– batch_size
批次大小,类型为int。如果未指定,则batch_size的默认值为32,该参数指定了每次计算时每个样本批次的数量
– verbose
详细度,类型为整数0或1,默认值为0,设置终端输出信息的详细程度。0位最简模式,1为简单显示进度信息
– steps
迭代步数,类型为整数,默认值为-1,设置预测周期内的迭代步数(样本批次数量)
– max_queue_size
队列最大容量,类型为int,默认值为10,设置数据生成器队列的最大容量
– worers
进程数,类型为int,默认值为1,设置在使用基于进程的线程时,要启动的最大进程数,如果未指定,则workers的默认值为1,如果未0则将在主线程上执行数据生成器
– use_multiprocessing
是否使用异步线程,类型为bool,默认值为false。如果为true,则需要使用基于进程的线程。
返回张量类型的预测数组
- save(模型保存)方法
Model.save(string filepath,bool overwrite=true,bool include_optimizer=true,string save_format="tf",SaveOptions options=null)
save方法用于将模型保存到TensorFlow的SavedModel或单个H5文件中
– filepath
模型文件路径,类型为string,模型保存SavedModel或H5文件的路径。
– overwrite
是否覆盖,类型为bool,若设置为true,则以默认方式覆盖目标位置上的任何现有文件;若设置为false,则向用户提供手动提示。
– include_optimizer
是否包含优化器信息,类型为bool,如果为true,则将优化器的状态保存在一起
– save_format
保存格式,类型为string,可选择tf或h5,指示是否将模型保存到TensorFlow的SavedModel或H5文件中,在TensorFlow2.x中默认为tf
– SaveOptions
类型为TensorFlow.ModelSaveing.SaveOptiongs对象,用于指定保存到SavedModel的选项
11. load model(模型载入)方法
load_model方法用于加载通过save方法保存的模型
– get_weights方法
– set_weights方法
– save_weights方法
– load_weights方法
– get_config方法
– from_config方法
– model_from_config功能
– to_json方法
– model_from_json功能
– clone_model功能
Keras常用API说明
回调函数Callbacks
用在Model.fit()中作为参数,可以在训练的各个阶段执行一定操作
– 每个批次训练后写入TensorBoard日志以监控指标
– 定期将模型保存到本地文件中
– 提前结束训练
– 在训练器间查看模型的内部状态和统计信息
– 更多其他功能
基础用法
可以将回调列表作为回调参数传播给模型的Model.fit()。这样就可以在训练的每个阶段自动调用回调列表定义的相关方法
已定义的回调函数类
kertas.callbacks子模块中已经定义好的回调函数类
-
ketas.callbacks.Callbacks
用于建立新回调函数的抽象基类,所有回调函数都继承自keras.callbacks.Callbacks基类,他拥有params和model两个属性其中,params是一个dict,记录了训练相关参数(如verbosity、batch size、number of epochs等);model即当前关联模型的引用 -
ModelCheckpoint
用特定频率保存Keras模型或模型权重 - TensorBoard
自带的可视化工具 - EarlyStopping
用于当贝监控指标在设定的若干个轮次后没有提升时,提前终止训练 - LearningRateScheduler
学习控制器,给定学习率和轮次的函数关系,会根据该函数关系在每个轮次前更新学习率 - ReduceLROnPlateau
用于当设置的指标停止改善时,自动降低学习率 - RemoteMonitor
用于将事件流传输到服务器端进行显示 - LambdaCallback
编写较为简单的自定义回调函数 - TerminateOnNan
用于当训练过程遇到损失值为NaN时,自动终止 - CSVLogger
将每个轮次后的log结果以streams流格式记录到本地CSV文件中 - ProgbarLogger
将每个轮次结束后的Log结果打印到标准输出流中
Filed under: TensorFlow,人工智能,编程 - @ 2023年4月19日 下午1:44