The Sequential model API

首先,请阅读Keras顺序模型指南 .


Sequential model methods

compile

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

配置用于训练的模型.

Arguments

  • 最优化器 :字符串(最优化器的名称)或最优化器实例. 请参阅优化器 .
  • loss :字符串(目标函数的名称)或目标函数或Loss实例. 见损失 . 如果模型具有多个输出,则可以通过传递字典或损失列表来在每个输出上使用不同的损失. 然后,将由模型最小化的损失值将是所有单个损失的总和.
  • 指标 :模型在培训和测试期间要评估的指标列表. 通常,您将使用metrics=['accuracy'] . 要为多输出模型的不同输出指定不同的度量,您还可以传递一个字典,例如metrics={'output_a': 'accuracy', 'output_b': ['accuracy', 'mse']} . 您还可以传递指标列表的列表(len = len(输出)),例如metrics=[['accuracy'], ['accuracy', 'mse']]metrics=['accuracy', ['accuracy', 'mse']] .
  • loss_weights :可选列表或字典,用于指定标量系数(Python浮点数)以加权不同模型输出的损耗贡献. 然后,将由模型最小化的损失值将是所有单个损失的加权总和 ,并由loss_weights系数加权. 如果是列表,则期望与模型的输出具有1:1映射. 如果是字典,则期望将输出名称(字符串)映射到标量系数.
  • sample_weight_mode :如果需要按时间逐步进行样本加权(二维权重),请将其设置为"temporal" . None默认值是按样本加权(1D). 如果模型有多个输出,则可以通过传递字典或模式列表,在每个输出上使用不同的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 .

Raises

  • ValueError: In case of invalid arguments for optimizer, loss, metrics or sample_weight_mode.

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, validation_freq=1, max_queue_size=10, workers=1, use_multiprocessing=False)

为模型训练固定的纪元(数据集上的迭代).

Arguments

  • x :输入数据. 它可能是:
    • Numpy数组(或类似数组的数组)或数组列表(如果模型具有多个输入).
    • 如果模型已命名输入,则dict将输入名称映射到相应的数组/张量.
    • 返回(inputs, targets)(inputs, targets, sample weights)生成器或keras.utils.Sequence .
    • 如果从框架本机张量(例如TensorFlow数据张量)馈送,则为None(默认).
  • y :目标数据. 像输入数据x ,它可以是Numpy数组,框架本机张量,Numpy数组列表(如果模型具有多个输出)或从框架本机张量馈送(例如,无)(默认) TensorFlow数据张量). 如果命名了模型中的输出层,则还可以传递将输出名称映射到Numpy数组的字典. 如果x是一个生成器或keras.utils.Sequence实例,则不应该指定y (因为将从x获得目标).
  • batch_size :整数或None . 每个梯度更新的样本数. 如果未指定, batch_size将默认为32.如果您的数据采用符号张量,生成器或Sequence实例的形式(因为它们生成批次),则不要指定batch_size .
  • 纪元 :整数. 训练模型的时期数. 时期是对所提供的整个xy数据的迭代. 注意,与initial_epoch一起, epochs应理解为"最终纪元". 该模型没有经过epochs给定的多次迭代训练,只是直到到达索引epochs .
  • 详细 :整数. 0、1或2.详细模式. 0 =静音,1 =进度条,2 =每个时期一行.
  • callbackskeras.callbacks.Callback实例的列表. 在培训和验证期间应用的回调列表(如果). 请参阅回调 .
  • validation_split :在0到1之间浮动.用作验证数据的训练数据的分数. 模型将分开训练数据的这一部分,不对其进行训练,并且将在每个时期结束时评估此数据的损失和任何模型度量. 在改组之前,从提供的xy数据中的最后一个样本中选择验证数据. 当x是生成器或Sequence实例时,不支持此参数.
  • validate_data :在每个时期结束时用于评估损失和任何模型指标的数据. 该模型将不会根据此数据进行训练. validation_data将覆盖validation_split . validation_data可以是: (x_val, y_val)数组或张量的元组(x_val, y_val)数组的元组(x_val, y_val, val_sample_weights) -数据集或数据集迭代器

    对于前两种情况,必须提供batch_size . 对于最后一种情况,必须提供validation_steps .

  • shuffle :布尔值(是否在每个时期之前都将训练数据洗牌)或str(用于"批处理"). "批处理"是处理HDF5数据限制的特殊选项; 它会按批处理大小的块进行混洗. 当steps_per_epoch不为Nonesteps_per_epoch .

  • class_weight :可选的字典,将类索引(整数)映射到权重(浮点)值,用于对损失函数加权(仅在训练过程中). 这有助于告诉模型"更多关注"来自代表性不足的类的样本.
  • sample_weight :训练样本的可选Numpy权重数组,用于对损失函数加权(仅在训练过程中). 您可以传递长度与输入样本相同的平坦(1D)Numpy数组(权重和样本之间的1:1映射),或者对于时间数据,可以传递具有形状的2D数组(samples, sequence_length) ,以对每个样本的每个时间步施加不同的权重. 在这种情况下,您应确保在compile()指定sample_weight_mode="temporal" . 当x generator或Sequence实例提供sample_weights作为x的第三个元素时,不支持此参数.
  • initial_epoch :整数. 开始训练的时期(用于恢复以前的训练运行).
  • steps_per_epoch :整数或None . 声明一个纪元完成并开始下一个纪元之前的总步数(一批样品). 在使用TensorFlow数据张量等输入张量进行训练时,默认值None等于数据集中的样本数除以批处理大小;如果无法确定,则默认为1.
  • validation_steps :仅在指定steps_per_epoch时才相关. 停止之前要验证的步骤总数(样本批次).
  • validate_steps :仅当提供validation_data并且是生成器时才相关. 在每个时期结束时执行验证时,在停止之前要绘制的步骤总数(样本批次).
  • validation_freq: Only relevant if validation data is provided. Integer or list/tuple/set. If an integer, specifies how many training epochs to run before a new validation run is performed, e.g. validation_freq=2 runs validation every 2 epochs. If a list, tuple, or set, specifies the epochs on which to run validation, e.g. validation_freq=[1, 2, 10] runs validation at the end of the 1st, 2nd, and 10th epochs.
  • max_queue_size :整数. 仅用于generator或keras.utils.Sequence输入. 生成器队列的最大大小. 如果未指定, max_queue_size将默认为10.
  • 工人 :整数. 仅用于generator或keras.utils.Sequence输入. 使用基于进程的线程时,要启动的最大进程数. 如果未指定, workers将默认为1.如果为0,将在主线程上执行生成器.
  • use_multiprocessing :布尔值. 仅用于generator或keras.utils.Sequence输入. 如果为True ,则使用基于进程的线程. 如果未指定,则use_multiprocessing将默认为False . 请注意,由于此实现依赖于多处理,因此不应将不可拾取的参数传递给生成器,因为它们无法轻易传递给子进程.
  • ** kwargs :用于向后兼容.

Returns

History对象. 它的History.history属性记录了连续时期的训练损失值和度量值,以及验证损失值和验证度量值(如果适用).

Raises

  • RuntimeError :如果从未编译过模型.
  • ValueError :如果提供的输入数据与模型期望值不匹配.

evaluate

evaluate(x=None, y=None, batch_size=None, verbose=1, sample_weight=None, steps=None, callbacks=None, max_queue_size=10, workers=1, use_multiprocessing=False)

Returns the loss value & metrics values for the model in test mode.

分批进行计算.

Arguments

  • x :输入数据. 它可能是:
    • Numpy数组(或类似数组的数组)或数组列表(如果模型具有多个输入).
    • 如果模型已命名输入,则dict将输入名称映射到相应的数组/张量.
    • 返回(inputs, targets)(inputs, targets, sample weights)生成器或keras.utils.Sequence .
    • 如果从框架本机张量(例如TensorFlow数据张量)馈送,则为None(默认).
  • y :目标数据. 像输入数据x ,它可以是Numpy数组,框架本机张量,Numpy数组列表(如果模型具有多个输出)或从框架本机张量馈送(例如,无)(默认) TensorFlow数据张量). 如果命名了模型中的输出层,则还可以传递将输出名称映射到Numpy数组的字典. 如果x是一个生成器或keras.utils.Sequence实例,则不应该指定y (因为将从x获得目标).
  • batch_size :整数或None . 每个梯度更新的样本数. 如果未指定, batch_size将默认为32.请不要指定batch_size因为您的数据是以符号张量,生成器或keras.utils.Sequence实例的形式出现(因为它们生成批处理).
  • 详细 :0或1.详细模式. 0 =静音,1 =进度条.
  • sample_weight :测试样本的可选Numpy权重数组,用于加权损失函数. 您可以传递长度与输入样本相同的平坦(1D)Numpy数组(权重和样本之间的1:1映射),或者对于时间数据,可以传递具有形状的2D数组(samples, sequence_length) ,以对每个样本的每个时间步施加不同的权重. 在这种情况下,您应确保在compile()指定sample_weight_mode="temporal" .
  • steps: Integer or None. Total number of steps (batches of samples) before declaring the evaluation round finished. Ignored with the default value of None.
  • callbackskeras.callbacks.Callback实例的列表. 评估期间要应用的回调列表. 请参阅回调 .
  • max_queue_size :整数. 仅用于generator或keras.utils.Sequence输入. 生成器队列的最大大小. 如果未指定, max_queue_size将默认为10.
  • 工人 :整数. 仅用于generator或keras.utils.Sequence输入. 使用基于进程的线程时,要启动的最大进程数. 如果未指定, workers将默认为1.如果为0,将在主线程上执行生成器.
  • use_multiprocessing :布尔值. 仅用于generator或keras.utils.Sequence输入. 如果为True ,则使用基于进程的线程. 如果未指定,则use_multiprocessing将默认为False . 请注意,由于此实现依赖于多处理,因此不应将不可拾取的参数传递给生成器,因为它们无法轻易传递给子进程.

Raises

  • ValueError :如果参数无效.

Returns

标量测试损失(如果模型具有单个输出并且没有度量标准)或标量列表(如果模型具有多个输出和/或度量标准). 属性model.metrics_names将为您提供标量输出的显示标签.


predict

predict(x, batch_size=None, verbose=0, steps=None, callbacks=None, max_queue_size=10, workers=1, use_multiprocessing=False)

生成输入样本的输出预测.

分批进行计算.

Arguments

  • x :输入数据. 它可能是:
    • Numpy数组(或类似数组的数组)或数组列表(如果模型具有多个输入).
    • 如果模型已命名输入,则dict将输入名称映射到相应的数组/张量.
    • 返回(inputs, targets)(inputs, targets, sample weights)生成器或keras.utils.Sequence .
    • 如果从框架本机张量(例如TensorFlow数据张量)馈送,则为None(默认).
  • batch_size :整数或None . 每个梯度更新的样本数. 如果未指定, batch_size将默认为32.请不要指定batch_size因为您的数据是以符号张量,生成器或keras.utils.Sequence实例的形式出现(因为它们生成批处理).
  • 详细 :详细模式,0或1.
  • 数:在宣布预测回合完成之前的总数(样本批次). 忽略默认值None .
  • callbackskeras.callbacks.Callback实例的列表. 预测期间要应用的回调列表. 请参阅回调 .
  • max_queue_size :整数. 仅用于generator或keras.utils.Sequence输入. 生成器队列的最大大小. 如果未指定, max_queue_size将默认为10.
  • 工人 :整数. 仅用于generator或keras.utils.Sequence输入. 使用基于进程的线程时,要启动的最大进程数. 如果未指定, workers将默认为1.如果为0,将在主线程上执行生成器.
  • use_multiprocessing :布尔值. 仅用于generator或keras.utils.Sequence输入. 如果为True ,则使用基于进程的线程. 如果未指定,则use_multiprocessing将默认为False . 请注意,由于此实现依赖于多处理,因此不应将不可拾取的参数传递给生成器,因为它们无法轻易传递给子进程.

Returns

Numpy array(s) of predictions.

Raises

  • ValueError :如果提供的输入数据与模型的期望值不匹配,或者有状态模型接收的样本数量不是批处理大小的倍数,则为ValueError .

train_on_batch

train_on_batch(x, y, sample_weight=None, class_weight=None, reset_metrics=True)

对单批数据运行一次梯度更新.

Arguments

  • x :训练数据的Numpy数组;如果模型具有多个输入,则为Numpy数组的列表. 如果模型中的所有输入均已命名,则还可以传递将输入名称映射到Numpy数组的字典.
  • y :目标数据的Numpy数组;如果模型具有多个输出,则为Numpy数组的列表. 如果模型中的所有输出均已命名,则还可以传递将输出名称映射到Numpy数组的字典.
  • sample_weight :与x长度相同的可选数组,包含要应用于每个样本的模型损失的权重. 对于时间数据,您可以传递具有形状(样本,sequence_length)的2D数组,以对每个样本的每个时间步施加不同的权重. 在这种情况下,您应确保在compile()中指定sample_weight_mode =" temporal".
  • class_weight :可选的字典,将类索引(整数)映射到权重(浮点数),以应用于训练期间此类中样本的模型损失. 这有助于告诉模型"更多关注"来自代表性不足的类的样本.
  • reset_metrics :如果为True ,则返回的指标仅适用于该批次. 如果为False ,则指标将在批次之间有状态地累积.

Returns

标量训练损失(如果模型具有单个输出且没有度量标准)或标量列表(如果模型具有多个输出和/或度量标准). 属性model.metrics_names将为您提供标量输出的显示标签.


test_on_batch

test_on_batch(x, y, sample_weight=None, reset_metrics=True)

在一批样品上测试模型.

Arguments

  • x :测试数据的Numpy数组;如果模型具有多个输入,则为Numpy数组的列表. 如果模型中的所有输入均已命名,则还可以传递将输入名称映射到Numpy数组的字典.
  • y :目标数据的Numpy数组;如果模型具有多个输出,则为Numpy数组的列表. 如果模型中的所有输出均已命名,则还可以传递将输出名称映射到Numpy数组的字典.
  • sample_weight :与x长度相同的可选数组,包含要应用于每个样本的模型损失的权重. 对于时间数据,您可以传递具有形状(样本,sequence_length)的2D数组,以对每个样本的每个时间步施加不同的权重. 在这种情况下,您应确保在compile()中指定sample_weight_mode =" temporal".
  • reset_metrics :如果为True ,则返回的指标仅适用于该批次. 如果为False ,则指标将在批次之间有状态地累积.

Returns

标量测试损失(如果模型具有单个输出并且没有度量标准)或标量列表(如果模型具有多个输出和/或度量标准). 属性model.metrics_names将为您提供标量输出的显示标签.


predict_on_batch

predict_on_batch(x)

返回单批样品的预测.

Arguments

  • x :输入样本,作为一个Numpy数组.

Returns

大量的预测数组.


fit_generator

fit_generator(generator, steps_per_epoch=None, epochs=1, verbose=1, callbacks=None, validation_data=None, validation_steps=None, validation_freq=1, 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时可以保证每个时期每个输入的单一使用.

Arguments

  • generator :生成器或Sequencekeras.utils.Sequence )对象的实例,以便在使用多重处理时避免重复数据. 发电机的输出必须是

    • 元组(inputs, targets)
    • 一个元组(inputs, targets, sample_weights) .

    该元组(生成器的单个输出)进行单个批处理. 因此,该元组中的所有数组必须具有相同的长度(等于此批处理的大小). 不同批次可能具有不同大小. 例如,如果数据集的大小不能被该批次的大小整除,则该时期的最后一个批次通常小于其他批次. 预期生成器将无限期地循环其数据. 当模型已看到steps_per_epoch批处理时,纪元结束.

  • steps_per_epoch :整数. 在声明一个纪元完成并开始下一个纪元之前,要从generator的步骤总数(样本批次). 它通常应等于ceil(num_samples / batch_size)Sequence可选的:如果未指定,它将使用len(generator)作为许多步骤.

  • 纪元 :整数. 训练模型的时期数. 纪元是对所提供的整个数据的迭代,如steps_per_epoch所定义. 注意,与initial_epoch一起, epochs应理解为"最终纪元". 该模型没有经过epochs给定的多次迭代训练,只是直到到达索引epochs .
  • 详细 :整数. 0、1或2.详细模式. 0 =静音,1 =进度条,2 =每个时期一行.
  • callbackskeras.callbacks.Callback实例的列表. 训练期间要应用的回调列表. 请参阅回调 .
  • validation_data :可以是

    • 验证数据的生成器或Sequence对象
    • tuple (x_val, y_val)
    • tuple (x_val, y_val, val_sample_weights)

    在每个时期结束时评估损失和任何模型指标. 该模型将不会根据此数据进行训练.

  • validate_steps :仅当validation_data是生成器时才相关. 在每个纪元结束时停止之前, validation_data生成器要产生的步骤总数(样本批次). 它通常应等于验证数据集的样本数除以批次大小. Sequence可选:如果未指定,将使用len(validation_data)作为许多步骤.

  • validation_freq :仅在提供验证数据时才相关. 整数或collections.Container实例(例如,列表,元组等). 如果是整数,则指定在执行新的验证运行之前要运行多少个训练时期,例如, validation_freq=2每2个时期运行一次验证. 如果是Container,则指定要在其上运行验证的时期,例如, validation_freq=[1, 2, 10]在第1、2和10个时期的末尾运行验证.
  • class_weight :可选的字典,将类索引(整数)映射到权重(浮点)值,用于对损失函数加权(仅在训练过程中). 这有助于告诉模型"更多关注"来自代表性不足的类的样本.
  • max_queue_size :整数. 生成器队列的最大大小. 如果未指定, max_queue_size将默认为10.
  • 工人 :整数. 使用基于进程的线程时,要启动的最大进程数. 如果未指定, workers将默认为1.如果为0,将在主线程上执行生成器.
  • use_multiprocessing :布尔值. 如果为True ,则使用基于进程的线程. 如果未指定,则use_multiprocessing将默认为False . 请注意,由于此实现依赖于多处理,因此不应将不可拾取的参数传递给生成器,因为它们无法轻易传递给子进程.
  • shuffle :布尔值. 是否在每个纪元开始时改组批次的顺序. 仅用于Sequence实例( keras.utils.Sequence ). 当steps_per_epoch不为Nonesteps_per_epoch .
  • initial_epoch :整数. 开始训练的时期(用于恢复以前的训练运行).

Returns

History对象. 它的History.history属性记录了连续时期的训练损失值和度量值,以及验证损失值和验证度量值(如果适用).

Raises

  • ValueError :如果生成器以无效格式产生数据.

Example

def generate_arrays_from_file(path):
    while True:
        with open(path) as f:
            for line in f:
                # create numpy arrays of input data
                # and labels, from each line in the file
                x1, x2, y = process_line(line)
                yield ({'input_1': x1, 'input_2': x2}, {'output': y})

model.fit_generator(generate_arrays_from_file('/my_file.txt'),
                    steps_per_epoch=10000, epochs=10)

evaluate_generator

evaluate_generator(generator, steps=None, callbacks=None, max_queue_size=10, workers=1, use_multiprocessing=False, verbose=0)

在数据生成器上评估模型.

生成器应返回与test_on_batch所接受的相同类型的数据.

Arguments

  • generator :生成器产生元组(输入,目标)或(输入,目标,sample_weights)或Sequence对象的实例(keras.utils.Sequence),以便在使用多处理时避免重复数据.
  • 数:停止前从generator数(批次样品). Sequence可选:如果未指定,将使用len(generator)作为许多步骤.
  • callbackskeras.callbacks.Callback实例的列表. 训练期间要应用的回调列表. 请参阅回调 .
  • max_queue_size :生成器队列的最大大小
  • 工人 :整数. 使用基于进程的线程时,要启动的最大进程数. 如果未指定, workers将默认为1.如果为0,将在主线程上执行生成器.
  • use_multiprocessing :如果为True,则使用基于进程的线程. 请注意,由于此实现依赖于多处理,因此您不应将不可选择的参数传递给生成器,因为它们不能轻易地传递给子进程.
  • verbose :详细模式,0或1.

Returns

标量测试损失(如果模型具有单个输出并且没有度量标准)或标量列表(如果模型具有多个输出和/或度量标准). 属性model.metrics_names将为您提供标量输出的显示标签.

Raises

  • ValueError :如果生成器以无效格式产生数据.

predict_generator

predict_generator(generator, steps=None, callbacks=None, max_queue_size=10, workers=1, use_multiprocessing=False, verbose=0)

从数据生成器为输入样本生成预测.

生成器应返回与predict_on_batch接受的相同类型的数据.

Arguments

  • generator :生成器产生一批输入样本或一个Sequence(keras.utils.Sequence)对象实例,以便在使用多处理时避免重复数据.
  • 数:停止前从generator数(批次样品). Sequence可选:如果未指定,将使用len(generator)作为许多步骤.
  • callbackskeras.callbacks.Callback实例的列表. 训练期间要应用的回调列表. 请参阅回调 .
  • max_queue_size :生成器队列的最大大小.
  • 工人 :整数. 使用基于进程的线程时,要启动的最大进程数. 如果未指定, workers将默认为1.如果为0,将在主线程上执行生成器.
  • use_multiprocessing :如果为True ,则使用基于进程的线程. 请注意,由于此实现依赖于多处理,因此您不应将不可选择的参数传递给生成器,因为它们不能轻易地传递给子进程.
  • verbose :详细模式,0或1.

Returns

大量的预测数组.

Raises

  • ValueError :如果生成器以无效格式产生数据.

get_layer

get_layer(name=None, index=None)

根据其名称(唯一)或索引检索图层.

如果同时提供nameindex ,则index优先.

索引基于水平图遍历的顺序(自下而上).

Arguments

  • name :字符串,图层名称.
  • index :整数,层的索引.

Returns

图层实例.

Raises

  • ValueError :如果图层名称或索引无效.