失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 【keras】keras教程(参考官方文档)

【keras】keras教程(参考官方文档)

时间:2020-07-04 06:59:29

相关推荐

【keras】keras教程(参考官方文档)

文章目录

一、callbacks篇1、ReduceLROnPlateau 训练过程优化学习率2、EarlyStopping 早停操作3、ModelCheckpoint 用于设置保存的方式4、TensorBoard 训练可视化工具6、CSVLogger二、Model类(函数式API)1、fit_generator2、compile3、fit4、evaluate5、predict6、get_layer三、keras网络结构层 keras.layers1、Input2、Conv2D3、Conv2DTranspose参考

一、callbacks篇

keras官方文档callbacks是一个函数的合集,会在训练的阶段中所使用。你可以使用回调函数来查看训练模型的内在状态和统计。你可以传递一个列表的回调函数(作为callbacks关键字参数)到SequentialModel类型的.fit()方法。在训练时,相应的回调函数的方法就会被在各自的阶段被调用。Available metrics are: val_loss,val_acc,loss,acc,lr

1、ReduceLROnPlateau 训练过程优化学习率

目的:定义学习率之后,经过一定epoch迭代之后,模型效果不再提升,该学习率可能已经不再适应该模型。需要在训练过程中缩小学习率,进而提升模型。如何在训练过程中缩小学习率呢?我们可以使用keras中的回调函数ReduceLROnPlateau。与EarlyStopping配合使用,会非常方便。参数:

monitor: 被监测的数据。factor: 学习速率被降低的因数。新的学习速率 = 学习速率 * 因数patience: 没有进步的训练轮数,在这之后训练速率会被降低。verbose: 整数。0:安静,1:更新信息。mode: {auto, min, max} 其中之一。如果是 min 模式,学习速率会被降低如果被监测的数据已经停止下降; 在 max 模式,学习塑料会被降低如果被监测的数据已经停止上升; 在 auto 模式,方向会被从被监测的数据中自动推断出来。min_delta: 对于测量新的最优化的阀值,只关注巨大的改变。cooldown: 在学习速率被降低之后,重新恢复正常操作之前等待的训练轮数量。min_lr: 学习速率的下边界。Reduce=ReduceLROnPlateau(monitor='val_accuracy',factor=0.1,patience=2,verbose=1,mode='auto',epsilon=0.0001,cooldown=0,min_lr=0)

代码示例

# 学习率下降的方式,val_loss三次不下降就下降学习率继续训练reduce_lr = ReduceLROnPlateau(monitor='val_loss',factor=0.5,patience=3,verbose=1)

2、EarlyStopping 早停操作

EarlyStopping是Callbacks的一种,callbacks用于指定在每个epoch开始和结束的时候进行哪种特定操作。Callbacks中有一些设置好的接口,可以直接使用,如’acc’, 'val_acc’, ’loss’ 和 ’val_loss’等等。

EarlyStopping则是用于提前停止训练的callbacks。具体地,可以达到当训练集上的loss不在减小(即减小的程度小于某个阈值)的时候停止继续训练。

早停法旨在解决epoch数量需要手动设置的问题。它也可以被视为一种能够避免网络发生过拟合的正则化方法(与L1/L2权重衰减和丢弃法类似)。

参数

monitor: 被监测的数据。min_delta: 在被监测的数据中被认为是提升的最小变化, 例如,小于 min_delta 的绝对变化会被认为没有提升。patience: 没有进步的训练轮数,在这之后训练就会被停止。verbose: 详细信息模式。mode: {auto, min, max} 其中之一。 在 min 模式中, 当被监测的数据停止下降,训练就会停止;在 max 模式中,当被监测的数据停止上升,训练就会停止;在 auto 模式中,方向会自动从被监测的数据的名字中判断出来。baseline: 要监控的数量的基准值。 如果模型没有显示基准的改善,训练将停止。restore_best_weights: 是否从具有监测数量的最佳值的时期恢复模型权重。 如果为 False,则使用在训练的最后一步获得的模型权重。

示例

# 是否需要早停,当val_loss一直不下降的时候意味着模型基本训练完毕,可以停止early_stopping = EarlyStopping(monitor='val_loss',min_delta=0,patience=10,verbose=1)

3、ModelCheckpoint 用于设置保存的方式

参数

filename:字符串,保存模型的路径,filepath可以是格式化的字符串,里面的占位符将会被epoch值和传入on_epoch_end的logs关键字所填入。例如:filepath = “weights_{epoch:03d}-{val_loss:.4f}.h5”则会生成对应epoch和验证集loss的多个文件。monitor:需要监视的值,通常为:val_acc 或 val_loss 或 acc 或 lossverbose:信息展示模式,0或1。为1表示输出epoch模型保存信息,默认为0表示不输出该信息,信息形如:Epoch 00001: val_acc improved from -inf to 0.49240, saving model to /xxx/checkpoint/model_001-0.3902.h5save_best_only:当设置为True时,将只保存在验证集上性能最好的模型mode:‘auto’,‘min’,‘max’之一,在save_best_only=True时决定性能最佳模型的评判准则,例如,当监测值为val_acc时,模式应为max,当检测值为val_loss时,模式应为min。在auto模式下,评价准则由被监测值的名字自动推断。save_weights_only:若设置为True,则只保存模型权重,否则将保存整个模型(包括模型结构,配置信息等)period:CheckPoint之间的间隔的epoch数

示例

# 保存的方式,1世代保存一次checkpoint_period = ModelCheckpoint(log_dir + 'ep{epoch:03d}-loss{loss:.3f}-val_loss{val_loss:.3f}.h5',monitor='val_loss',save_weights_only=True,save_best_only=True,period=1)

4、TensorBoard 训练可视化工具

参数

log_dir: 用来保存被 TensorBoard 分析的日志文件的文件名。histogram_freq: 对于模型中各个层计算激活值和模型权重直方图的频率(训练轮数中)。 如果设置成 0 ,直方图不会被计算。对于直方图可视化的验证数据(或分离数据)一定要明确的指出。write_graph: 是否在 TensorBoard 中可视化图像。 如果 write_graph 被设置为 True,日志文件会变得非常大。write_grads: 是否在 TensorBoard 中可视化梯度值直方图。 histogram_freq 必须要大于 0 。batch_size: 用以直方图计算的传入神经元网络输入批的大小。write_images: 是否在 TensorBoard 中将模型权重以图片可视化。embeddings_freq: 被选中的嵌入层会被保存的频率(在训练轮中)。embeddings_layer_names: 一个列表,会被监测层的名字。 如果是 None 或空列表,那么所有的嵌入层都会被监测。embeddings_metadata: 一个字典,对应层的名字到保存有这个嵌入层元数据文件的名字。 查看 详情 关于元数据的数据格式。 以防同样的元数据被用于所用的嵌入层,字符串可以被传入。embeddings_data: 要嵌入在 embeddings_layer_names 指定的层的数据。 Numpy 数组(如果模型有单个输入)或 Numpy 数组列表(如果模型有多个输入)。 Learn ore about embeddings。update_freq: 'batch' 或 'epoch' 或 整数。当使用 'batch' 时,在每个 batch 之后将损失和评估值写入到 TensorBoard 中。同样的情况应用到 'epoch' 中。如果使用整数,例如 10000,这个回调会在每 10000 个样本之后将损失和评估值写入到 TensorBoard 中。注意,频繁地写入到 TensorBoard 会减缓你的训练。

示例

# 设置log的存储位置,将网络权值以图片格式保持在tensorboard中显示,设置每一个周期计算一次网络的tb_cb = keras.callbacks.TensorBoard(log_dir='weights/' + args.exp_name + '/%s/log' % args.model_name, write_images=True,histogram_freq=0)

6、CSVLogger

把训练轮结果数据流到 csv 文件的回调函数。

支持所有可以被作为字符串表示的值,包括 1D 可迭代数据,例如,np.ndarray。

参数

filename: csv 文件的文件名,例如 'run/log.csv'。separator: 用来隔离 csv 文件中元素的字符串。append: True:如果文件存在则增加(可以被用于继续训练)。False:覆盖存在的文件。

示例

csv_logger = CSVLogger(log_file_path, append=False)

二、Model类(函数式API)

在函数式 API 中,给定一些输入张量和输出张量,可以通过以下方式实例化一个 Model:

from keras.models import Modelfrom keras.layers import Input, Densea = Input(shape=(32,))b = Dense(32)(a)model = Model(inputs=a, outputs=b)

这个模型将包含从 a 到 b 的计算的所有网络层。

在多输入或多输出模型的情况下,你也可以使用列表:

model = Model(inputs=[a1, a2], outputs=[b1, b3, b3])

1、fit_generator

fit_generator(generator, steps_per_epoch=None, epochs=1, verbose=1, callbacks=None, validation_data=None,validation_steps=None,class_weight=None, max_queue_size=10,workers=1, use_multiprocessing=False,shuffle=True, initial_epoch=0)

使用 Python 生成器(或 Sequence 实例)逐批生成的数据,按批次训练模型。生成器与模型并行运行,以提高效率。 例如,这可以让你在 CPU 上对图像进行实时数据增强,以在 GPU 上训练模型。keras.utils.Sequence 的使用可以保证数据的顺序, 以及当 use_multiprocessing=True 时 ,保证每个输入在每个 epoch 只使用一次。参数

generator: 一个生成器,或者一个 Sequence (keras.utils.Sequence) 对象的实例, 以在使用多进程时避免数据的重复。 生成器的输出应该为以下之一:一个 (inputs, targets) 元组一个 (inputs, targets, sample_weights) 元组。这个元组(生成器的单个输出)组成了单个的 batch。 因此,这个元组中的所有数组长度必须相同(与这一个 batch 的大小相等)。 不同的 batch 可能大小不同。 例如,一个 epoch 的最后一个 batch 往往比其他 batch 要小, 如果数据集的尺寸不能被 batch size 整除。 生成器将无限地在数据集上循环。当运行到第 steps_per_epoch 时,记一个 epoch 结束。steps_per_epoch: 在声明一个 epoch 完成并开始下一个 epoch 之前从 generator 产生的总步数(批次样本)。 它通常应该等于你的数据集的样本数量除以批量大小。 对于 Sequence,它是可选的:如果未指定,将使用len(generator) 作为步数。epochs: 整数。训练模型的迭代总轮数。一个 epoch 是对所提供的整个数据的一轮迭代,如 steps_per_epoch 所定义。注意,与 initial_epoch 一起使用,epoch 应被理解为「最后一轮」。模型没有经历由 epochs 给出的多次迭代的训练,而仅仅是直到达到索引 epoch 的轮次。verbose: 0, 1 或 2。日志显示模式。 0 = 安静模式, 1 = 进度条, 2 = 每轮一行。callbacks: keras.callbacks.Callback 实例的列表。在训练时调用的一系列回调函数。validation_data: 它可以是以下之一:验证数据的生成器或 Sequence 实例一个 (inputs, targets) 元组一个 (inputs, targets, sample_weights) 元组。在每个 epoch 结束时评估损失和任何模型指标。该模型不会对此数据进行训练。validation_steps: 仅当 validation_data 是一个生成器时才可用。 在停止前 generator 生成的总步数(样本批数)。 对于 Sequence,它是可选的:如果未指定,将使用 len(generator) 作为步数。class_weight: 可选的将类索引(整数)映射到权重(浮点)值的字典,用于加权损失函数(仅在训练期间)。 这可以用来告诉模型「更多地关注」来自代表性不足的类的样本。max_queue_size: 整数。生成器队列的最大尺寸。 如未指定,max_queue_size 将默认为 10。workers: 整数。使用的最大进程数量,如果使用基于进程的多线程。 如未指定,workers 将默认为 1。如果为 0,将在主线程上执行生成器。use_multiprocessing: 布尔值。如果 True,则使用基于进程的多线程。 如未指定, use_multiprocessing 将默认为 False。 请注意,由于此实现依赖于多进程,所以不应将不可传递的参数传递给生成器,因为它们不能被轻易地传递给子进程。shuffle: 是否在每轮迭代之前打乱 batch 的顺序。 只能与 Sequence (keras.utils.Sequence) 实例同用。initial_epoch: 开始训练的轮次(有助于恢复之前的训练)。

2、compile

compile(optimizer,loss=None,metrics=None, loss_weights=None, sample_weight_mode=None, weighted_metrics=None, target_tensors=None)

参数

optimizer: 字符串(优化器名)或者优化器实例。 详见 optimizers。loss: 字符串(目标函数名)或目标函数。 详见 losses。 如果模型具有多个输出,则可以通过传递损失函数的字典或列表,在每个输出上使用不同的损失。 模型将最小化的损失值将是所有单个损失的总和。metrics: 在训练和测试期间的模型评估标准。 通常你会使用 metrics = ['accuracy']。 要为多输出模型的不同输出指定不同的评估标准, 还可以传递一个字典,如 metrics = {'output_a':'accuracy'}。loss_weights: 可选的指定标量系数(Python 浮点数)的列表或字典, 用以衡量损失函数对不同的模型输出的贡献。 模型将最小化的误差值是由 loss_weights 系数加权的加权总和误差。 如果是列表,那么它应该是与模型输出相对应的 1:1 映射。 如果是张量,那么应该把输出的名称(字符串)映到标量系数。sample_weight_mode: 如果你需要执行按时间步采样权重(2D 权重),请将其设置为 temporal。 默认为 None,为采样权重(1D)。 如果模型有多个输出,则可以通过传递 mode 的字典或列表,以在每个输出上使用不同的 sample_weight_mode。weighted_metrics: 在训练和测试期间,由 sample_weight 或 class_weight 评估和加权的度量标准列表。target_tensors: 默认情况下,Keras 将为模型的目标创建一个占位符,在训练过程中将使用目标数据。 相反,如果你想使用自己的目标张量(反过来说,Keras 在训练期间不会载入这些目标张量的外部 Numpy 数据), 您可以通过 target_tensors 参数指定它们。 它可以是单个张量(单输出模型),张量列表,或一个映射输出名称到目标张量的字典。**kwargs: 当使用 Theano/CNTK 后端时,这些参数被传入 K.function。 当使用 TensorFlow 后端时,这些参数被传递到 tf.Session.run。

异常

ValueError: 如果 optimizer, loss, metrics 或 sample_weight_mode 这些参数不合法。

3、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 数组的列表(如果模型有多个输入)。 如果模型中的输入层被命名,你也可以传递一个字典,将输入层名称映射到 Numpy 数组。 如果从本地框架张量馈送(例如 TensorFlow 数据张量)数据,x 可以是 None(默认)。y: 目标(标签)数据的 Numpy 数组(如果模型只有一个输出), 或者是 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。validation_split: 0 和 1 之间的浮点数。用作验证集的训练数据的比例。 模型将分出一部分不会被训练的验证数据,并将在每一轮结束时评估这些验证数据的误差和任何其他模型指标。 验证数据是混洗之前 x 和y 数据的最后一部分样本中。validation_data: 元组 (x_val,y_val) 或元组 (x_val,y_val,val_sample_weights), 用来评估损失,以及在每轮结束时的任何模型度量指标。 模型将不会在这个数据上进行训练。这个参数会覆盖 validation_split。shuffle: 布尔值(是否在每轮迭代之前混洗数据)或者 字符串 (batch)。 batch 是处理 HDF5 数据限制的特殊选项,它对一个 batch 内部的数据进行混洗。 当 steps_per_epoch 非 None 时,这个参数无效。class_weight: 可选的字典,用来映射类索引(整数)到权重(浮点)值,用于加权损失函数(仅在训练期间)。 这可能有助于告诉模型 「更多关注」来自代表性不足的类的样本。sample_weight: 训练样本的可选 Numpy 权重数组,用于对损失函数进行加权(仅在训练期间)。 您可以传递与输入样本长度相同的平坦(1D)Numpy 数组(权重和样本之间的 1:1 映射), 或者在时序数据的情况下,可以传递尺寸为 (samples, sequence_length) 的 2D 数组,以对每个样本的每个时间步施加不同的权重。 在这种情况下,你应该确保在 compile() 中指定 sample_weight_mode="temporal"。initial_epoch: 整数。开始训练的轮次(有助于恢复之前的训练)。steps_per_epoch: 整数或 None。 在声明一个轮次完成并开始下一个轮次之前的总步数(样品批次)。 使用 TensorFlow 数据张量等输入张量进行训练时,默认值 None 等于数据集中样本的数量除以 batch 的大小,如果无法确定,则为 1。validation_steps: 只有在指定了 steps_per_epoch 时才有用。停止前要验证的总步数(批次样本)。

返回

一个 History 对象。其 History.history 属性是连续 epoch 训练损失和评估值,以及验证集损失和评估值的记录(如果适用)。

异常

RuntimeError: 如果模型从未编译。ValueError: 在提供的输入数据与模型期望的不匹配的情况下。

4、evaluate

evaluate(x=None, y=None, batch_size=None, verbose=1, sample_weight=None, steps=None)

在测试模式下返回模型的误差值和评估标准值。计算是分批进行的。

参数

x: 测试数据的 Numpy 数组(如果模型只有一个输入), 或者是 Numpy 数组的列表(如果模型有多个输入)。 如果模型中的输入层被命名,你也可以传递一个字典,将输入层名称映射到 Numpy 数组。 如果从本地框架张量馈送(例如 TensorFlow 数据张量)数据,x 可以是 None(默认)。y: 目标(标签)数据的 Numpy 数组,或 Numpy 数组的列表(如果模型具有多个输出)。 如果模型中的输出层被命名,你也可以传递一个字典,将输出层名称映射到 Numpy 数组。 如果从本地框架张量馈送(例如 TensorFlow 数据张量)数据,y 可以是 None(默认)。batch_size: 整数或 None。每次评估的样本数。如果未指定,默认为 32。verbose: 0 或 1。日志显示模式。 0 = 安静模式,1 = 进度条。sample_weight: 测试样本的可选 Numpy 权重数组,用于对损失函数进行加权。 您可以传递与输入样本长度相同的扁平(1D)Numpy 数组(权重和样本之间的 1:1 映射), 或者在时序数据的情况下,传递尺寸为 (samples, sequence_length) 的 2D 数组,以对每个样本的每个时间步施加不同的权重。 在这种情况下,你应该确保在 compile() 中指定 sample_weight_mode="temporal"。steps: 整数或 None。 声明评估结束之前的总步数(批次样本)。默认值 None。

返回

标量测试误差(如果模型只有一个输出且没有评估标准) 或标量列表(如果模型具有多个输出 和/或 评估指标)。 属性 model.metrics_names 将提供标量输出的显示标签。

5、predict

predict(x, batch_size=None, verbose=0, steps=None)

为输入样本生成输出预测。计算是分批进行的

参数

x: 输入数据,Numpy 数组 (或者 Numpy 数组的列表,如果模型有多个输出)。batch_size: 整数。如未指定,默认为 32。verbose: 日志显示模式,0 或 1。steps: 声明预测结束之前的总步数(批次样本)。默认值 None。

返回

预测的 Numpy 数组(或数组列表)。

异常

ValueError: 在提供的输入数据与模型期望的不匹配的情况下, 或者在有状态的模型接收到的样本不是 batch size 的倍数的情况下。

6、get_layer

get_layer(self, name=None, index=None)

根据名称(唯一)或索引值查找网络层。如果同时提供了 name 和 index,则 index 将优先。索引值来自于水平图遍历的顺序(自下而上)。

参数

name: 字符串,层的名字。index: 整数,层的索引。

返回

一个层实例。

异常

ValueError: 如果层的名称或索引不正确。

三、keras网络结构层 keras.layers

1、Input

keras.layers.Input() 或keras.engine.input_layer.Input()

Input() 用于实例化 Keras 张量。

Keras 张量是底层后端(Theano, TensorFlow 或 CNTK) 的张量对象,我们增加了一些特性,使得能够通过了解模型的输入 和输出来构建 Keras 模型。

例如,如果 a, b 和 c 都是 Keras 张量, 那么以下操作是可行的: model = Model(input=[a, b], output=c)

添加的 Keras 属性是: - _keras_shape: 通过 Keras端的尺寸推理 进行传播的整数尺寸元组。 - _keras_history: 应用于张量的最后一层。 整个网络层计算图可以递归地从该层中检索。

参数

shape: 一个尺寸元组(整数),不包含批量大小。 例如,shape=(32,) 表明期望的输入是按批次的 32 维向量。batch_shape: 一个尺寸元组(整数),包含批量大小。 例如,batch_shape=(10, 32) 表明期望的输入是 10 个 32 维向量。 batch_shape=(None, 32) 表明任意批次大小的 32 维向量。name: 一个可选的层的名称的字符串。 在一个模型中应该是唯一的(不可以重用一个名字两次)。 如未提供,将自动生成。dtype: 输入所期望的数据类型,字符串表示 (float32, float64, int32...)sparse: 一个布尔值,指明需要创建的占位符是否是稀疏的。tensor: 可选的可封装到 Input 层的现有张量。 如果设定了,那么这个层将不会创建占位符张量。

返回

一个张量。

例:

# 这是 Keras 中的一个逻辑回归x = Input(shape=(32,))y = Dense(16, activation='softmax')(x)model = Model(x, y)

img_input = Input(shape=(input_height, input_width, 3))

2、Conv2D

keras.layers.Conv2D(filters, kernel_size, strides=(1, 1), padding='valid', data_format=None, dilation_rate=(1, 1),activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)

2D 卷积层 (例如对图像的空间卷积)。

该层创建了一个卷积核, 该卷积核对层输入进行卷积, 以生成输出张量。 如果 use_bias 为 True, 则会创建一个偏置向量并将其添加到输出中。 最后,如果 activation 不是 None,它也会应用于输出。

当使用该层作为模型第一层时,需要提供 input_shape 参数 (整数元组,不包含样本表示的轴),例如, input_shape=(128, 128, 3) 表示 128x128 RGB 图像, 在 data_format=“channels_last” 时。

参数

filters: 整数,输出空间的维度 (即卷积中滤波器的输出数量)。kernel_size: 一个整数,或者 2 个整数表示的元组或列表, 指明 2D 卷积窗口的宽度和高度。 可以是一个整数,为所有空间维度指定相同的值。strides: 一个整数,或者 2 个整数表示的元组或列表, 指明卷积沿宽度和高度方向的步长。 可以是一个整数,为所有空间维度指定相同的值。 指定任何 stride 值 != 1 与指定 dilation_rate 值 != 1 两者不兼容。padding: "valid" 或 "same" (大小写敏感)。data_format: 字符串, channels_last (默认) 或 channels_first 之一,表示输入中维度的顺序。channels_last 对应输入尺寸为 (batch, height, width, channels), channels_first 对应输入尺寸为 (batch, channels, height, width)。 它默认为从 Keras 配置文件 ~/.keras/keras.json 中找到的 image_data_format 值。 如果你从未设置它,将使用 channels_last。dilation_rate: 一个整数或 2 个整数的元组或列表, 指定膨胀卷积的膨胀率。 可以是一个整数,为所有空间维度指定相同的值。 当前,指定任何 dilation_rate 值 != 1 与 指定 stride 值 != 1 两者不兼容。activation: 要使用的激活函数 (详见 activations)。 如果你不指定,则不使用激活函数 (即线性激活: a(x) = x)。use_bias: 布尔值,该层是否使用偏置向量。kernel_initializer: kernel 权值矩阵的初始化器 (详见 initializers)。bias_initializer: 偏置向量的初始化器 (详见 initializers)。kernel_regularizer: 运用到 kernel 权值矩阵的正则化函数 (详见 regularizer)。bias_regularizer: 运用到偏置向量的正则化函数 (详见 regularizer)。activity_regularizer: 运用到层输出(它的激活值)的正则化函数 (详见 regularizer)。kernel_constraint: 运用到 kernel 权值矩阵的约束函数 (详见 constraints)。bias_constraint: 运用到偏置向量的约束函数 (详见 constraints)。

输入尺寸

如果 data_format='channels_first', 输入 4D 张量,尺寸为 (samples, channels, rows, cols)。如果 data_format='channels_last', 输入 4D 张量,尺寸为 (samples, rows, cols, channels)。

输出尺寸

如果 data_format='channels_first', 输出 4D 张量,尺寸为 (samples, filters, new_rows, new_cols)。如果 data_format='channels_last', 输出 4D 张量,尺寸为 (samples, new_rows, new_cols, filters)。

由于填充的原因, rows 和 cols 值可能已更改。

3、Conv2DTranspose

keras.layers.Conv2DTranspose(filters, kernel_size, strides=(1, 1), padding='valid', output_padding=None, data_format=None, dilation_rate=(1, 1), activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)

转置卷积层 (有时被成为反卷积)。

对转置卷积的需求一般来自希望使用 与正常卷积相反方向的变换, 即,将具有卷积输出尺寸的东西 转换为具有卷积输入尺寸的东西, 同时保持与所述卷积相容的连通性模式。

当使用该层作为模型第一层时,需要提供 input_shape 参数 (整数元组,不包含样本表示的轴),例如, input_shape=(128, 128, 3) 表示 128x128 RGB 图像, 在 data_format=“channels_last” 时。

参数

filters: 整数,输出空间的维度 (即卷积中滤波器的输出数量)。kernel_size: 一个整数,或者 2 个整数表示的元组或列表, 指明 2D 卷积窗口的高度和宽度。 可以是一个整数,为所有空间维度指定相同的值。strides: 一个整数,或者 2 个整数表示的元组或列表, 指明卷积沿高度和宽度方向的步长。 可以是一个整数,为所有空间维度指定相同的值。 指定任何 stride 值 != 1 与指定 dilation_rate 值 != 1 两者不兼容。padding: "valid" 或 "same" (大小写敏感)。output_padding: 一个整数,或者 2 个整数表示的元组或列表, 指定沿输出张量的高度和宽度的填充量。 可以是单个整数,以指定所有空间维度的相同值。 沿给定维度的输出填充量必须低于沿同一维度的步长。 如果设置为 None (默认), 输出尺寸将自动推理出来。data_format: 字符串, channels_last (默认) 或 channels_first 之一,表示输入中维度的顺序。 channels_last 对应输入尺寸为 (batch, height, width, channels), channels_first 对应输入尺寸为 (batch, channels, height, width)。 它默认为从 Keras 配置文件 ~/.keras/keras.json 中 找到的 image_data_format 值。 如果你从未设置它,将使用 "channels_last"。dilation_rate: 一个整数或 2 个整数的元组或列表, 指定膨胀卷积的膨胀率。 可以是一个整数,为所有空间维度指定相同的值。 当前,指定任何 dilation_rate 值 != 1 与 指定 stride 值 != 1 两者不兼容。activation: 要使用的激活函数 (详见 activations)。 如果你不指定,则不使用激活函数 (即线性激活: a(x) = x)。use_bias: 布尔值,该层是否使用偏置向量。kernel_initializer: kernel 权值矩阵的初始化器 (详见 initializers)。bias_initializer: 偏置向量的初始化器 (详见 initializers)。kernel_regularizer: 运用到 kernel 权值矩阵的正则化函数 (详见 regularizer)。bias_regularizer: 运用到偏置向量的正则化函数 (详见 regularizer)。activity_regularizer: 运用到层输出(它的激活值)的正则化函数 (详见 regularizer)。kernel_constraint: 运用到 kernel 权值矩阵的约束函数 (详见 constraints)。bias_constraint: 运用到偏置向量的约束函数 (详见 constraints)。

输入尺寸

如果 data_format='channels_first', 输入 4D 张量,尺寸为 (batch, channels, rows, cols)。如果 data_format='channels_last', 输入 4D 张量,尺寸为 (batch, rows, cols, channels)。输出尺寸如果 data_format='channels_first', 输出 4D 张量,尺寸为 (batch, filters, new_rows, new_cols)。如果 data_format='channels_last', 输出 4D 张量,尺寸为 (batch, new_rows, new_cols, filters)。由于填充的原因, rows 和 cols 值可能已更改。

如果指定了 output_padding:

new_rows = ((rows - 1) * strides[0] + kernel_size[0]- 2 * padding[0] + output_padding[0])new_cols = ((cols - 1) * strides[1] + kernel_size[1]- 2 * padding[1] + output_padding[1])

例:

o = Conv2DTranspose(filters=nClasses, kernel_size=(2, 2), strides=(2, 2), padding="valid", activation=None,name="score2")(o)

参考

Keras的回调函数ReduceLROnPlateau 训练过程优化学习率[深度学习] keras的EarlyStopping使用与技巧

如果觉得《【keras】keras教程(参考官方文档)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。