欢迎访问宙启技术站
智能推送

对比Keras.engine.training.Model()和Keras.engine.training.Sequential()的使用方式

发布时间:2023-12-24 03:32:22

Keras中提供了两种常用的模型构建方式:Model()和Sequential()。它们有一些相同的使用方式,但也有一些不同之处。

首先,从使用方式上讲,Sequential()是一个逐层构建的线性模型,而Model()则可以用来构建更复杂的模型,包括多输入和多输出。

下面我们对比一下这两种模型构建方式的使用方法,并给出相应的例子。

1. Sequential()的使用方法:

Sequential()是最常见的模型构建方式,它只能构建线性模型,即一层接一层的模型。

首先,我们需要导入相关的库和模块:

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

然后,我们可以通过Sequential()创建一个模型,并添加各个层次:

model = keras.Sequential()
model.add(layers.Dense(64, activation='relu', input_shape=(784,)))
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))

在上面的例子中,我们依次添加了一个输入层、两个隐藏层和一个输出层。其中,第一个隐藏层的输入形状是(784,),输出形状是(64,)。第二个隐藏层的输入形状是(64,),输出形状也是(64,)。输出层的输入形状是(64,),输出形状是(10,)。

2. Model()的使用方法:

Model()可以用来构建更复杂的模型,包括多输入和多输出模型。

首先,我们同样需要导入相关的库和模块:

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

然后,我们可以通过Model()创建一个模型,并指定输入和输出:

inputs = keras.Input(shape=(784,))
x = layers.Dense(64, activation='relu')(inputs)
x = layers.Dense(64, activation='relu')(x)
outputs = layers.Dense(10, activation='softmax')(x)
model = keras.Model(inputs=inputs, outputs=outputs)

在上面的例子中,我们首先创建了一个输入层,并指定输入形状为(784,)。然后,我们依次创建两个隐藏层和一个输出层,并指定每一层的输入和输出。最后,我们使用Model()指定了输入和输出,创建了一个模型。

对于多输入和多输出的模型,我们只需要指定输入和输出的列表即可。例如:

inputs1 = keras.Input(shape=(784,))
inputs2 = keras.Input(shape=(32,))
x1 = layers.Dense(64, activation='relu')(inputs1)
x2 = layers.Dense(32, activation='relu')(inputs2)
x = layers.concatenate([x1, x2])
outputs = layers.Dense(10, activation='softmax')(x)
model = keras.Model(inputs=[inputs1, inputs2], outputs=outputs)

在上面的例子中,我们创建了两个输入层,分别指定输入形状为(784,)和(32,)。然后,分别对两个输入层进行操作。最后,通过concatenate()函数将两个操作结果合并,并将结果传递给输出层。

总结来说,Sequential()适用于简单的线性模型,而Model()适用于复杂的模型构建,包括多输入和多输出。由于Model()的灵活性更高,因此在实际应用中也更常用。