Model类(函数式API)
Keras函数式API是定义复杂模型(如多输出模型、有向无环图,或具有共享层模型的方法)
全连接网络
- 网络层的实例是可调用的,它以张量为参数,并返回一个张量
- 输入和输出均为张量,他们都可以用来定义一个模型(Model)
- 这样的模型和 Keras 的模型相同,都可以被训练
from keras.layers import Input, Dense
from keras.models import Model
# 返回一个张量
inputs = Input(shape=(784,))
# 层的实例是可调用的,它以张量为参数,并且返回一个张量
x = Dense(64, activation='relu')(inputs)
x = Dense(64, activation='relu')(x)
predictions = Dense(10, activation='softmax')(x)
# 创建一个包含输入层和三个全连接层的模型
model = Model(inputs=inputs, outputs=predictions)
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
model.fit(data, labels) # 开始训练
利用函数式 API ,可以重用训练好的模型:可将任何模型看作是一个层,然后通过传递一个张量来调用它。且在调用模型时,不仅重用了模型的结构,还重用了它的权重。
函数式 API 的另一个用途是使用共享网络层的模型。
多输入多输出
若只有一个输入:
a = Input(shape=(280, 256))
lstm = LSTM(32)
encoded_a = lstm(a)
assert lstm.output == encoded_a
有多个输入时可通过如下方法解决:
assert lstm.get_output_at(0) == encoded_a
assert lstm.get_output_at(1) == encoded_b
input_shape 和 output_shape 也是如此:只要该层有一个节点,或者所有节点都具有相同的输入/输出尺寸,那么他们的输入/输出尺寸就能被很好定义,并且由函数唯一返回。但是如果一个层应用于两个尺寸的输入/输出,就要通过所属节点的索引来获取他们。
更多例子(码着以后看)
- Inception模型
- 卷积层上的残差连接
- 共享视觉模型
- 视觉问答模型
- 视频问答模型
Model 类模型方法
compile(用于配置训练模型)
compile(optimizer, loss=None, metrics=None, loss_weights=None,
sample_weight_mode=None, weighted_metrics=None, target_tensors=None)
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)
evaluate(在测试模式,返回误差值和评估标准值,计算逐批次进行)
evaluate(x=None, y=None, batch_size=None, verbose=1, sample_weight=None,
steps=None)
predict(为输入样本生成输出预测,计算逐批次进行)
predict(x, batch_size=None, verbose=0, steps=None)
train_on_batch ( 一批样品的单次梯度更新 )
train_on_batch(x, y, sample_weight=None, class_weight=None)
test_on_batch(在一批样本上评估模型)
test_on_batch(x, y, sample_weight=None)
predict_on_batch(返回一批样本的模型预测值)
predict_on_batch(x)
fit_generator(使用Py生成器或Sequence 实例逐批生成的数据,按批次训练模型)
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)
evaluate_generator ( 在数据生成器上评估模型 )
evaluate_generator(generator, steps=None, max_queue_size=10, workers=1,
use_multiprocessing=False, verbose=0)
predict_generator(为来自数据生成器的输入样本生成预测)
predict_generator(generator, steps=None, max_queue_size=10, workers=1,
use_multiprocessing=False, verbose=0)
get_layer(根据名称或索引值查找网络层)
get_layer(self, name=None, index=None)