Model class API

在功能性API中,给定一些输入张量和输出张量,您可以通过以下方式实例化Model

from keras.models import Model
from keras.layers import Input, Dense

a = Input(shape=(32,))
b = Dense(32)(a)
model = Model(inputs=a, outputs=b)

给定a该模型将包括b的计算所需的所有层.

对于多输入或多输出模型,还可以使用列表:

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

有关Model可以做什么的详细介绍,请阅读此Keras功能API指南 .

Methods

compile

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

配置用于训练的模型.

Arguments

  • optimizer: String (name of optimizer) or optimizer instance. See optimizers.
  • 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 :如果optimizerlossmetricssample_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) -数据集或数据集迭代器

    For the first two cases, batch_size must be provided. For the last case, validation_steps must be provided.

  • 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 :仅在提供验证数据时才相关. 整数或列表/元组/集合. 如果是整数,则指定在执行新的验证运行之前要运行多少个训练时期,例如, validation_freq=2每2个时期运行一次验证. 如果列表,元组或集合指定在其上运行验证的时期,例如validation_freq=[1, 2, 10]在第一个,第二个和第十个时期的末尾运行验证.
  • 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)

返回测试模式下模型的损失值和指标值.

分批进行计算.

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" .
  • 步骤 :整数或None . 宣布评估阶段结束之前的步骤总数(样本批次). 忽略默认值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

大量的预测数组.

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)

Trains the model on data generated batch-by-batch by a Python generator (or an instance of 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)对象实例,以便在使用多处理时避免重复数据.
  • steps: Total number of steps (batches of samples) to yield from generator before stopping. Optional for Sequence: if unspecified, will use the len(generator) as a number of steps.
  • callbackskeras.callbacks.Callback实例的列表. 训练期间要应用的回调列表. 请参阅回调 .
  • max_queue_size :生成器队列的最大大小.
  • 工人 :整数. 使用基于进程的线程时,要启动的最大进程数. 如果未指定, workers将默认为1.如果为0,将在主线程上执行生成器.
  • use_multiprocessing: If True, use process based threading. Note that because this implementation relies on multiprocessing, you should not pass non picklable arguments to the generator as they can't be passed easily to children processes.
  • verbose :详细模式,0或1.

Returns

大量的预测数组.

Raises

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

get_layer

get_layer(name=None, index=None)

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

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

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

Arguments

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

Returns

A layer instance.

Raises

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