如何将keras顺序API转换为功能性API

问题描述 投票:1回答:1

我是深度学习的新手,正在尝试将此顺序API转换为可在CIFAR 10数据集上运行的功能性API。以下是顺序API:

model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu')

model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10))

这是我尝试将其转换为功能性API:

model_input = Input(shape=input_shape)

x = Conv2D(32, (3, 3), activation='relu',padding='valid')(model_input)
x = MaxPooling2D((2,2))(x)
x = Conv2D(32, (3, 3), activation='relu')(x)
x = MaxPooling2D((2,2))(x)
x = Conv2D(32, (3, 3))(x)

x = GlobalAveragePooling2D()(x)
x = Activation(activation='softmax')(x)

model = Model(model_input, x, name='nin_cnn')

x = layers.Flatten()
x = layers.Dense(64, activation='relu')
x = layers.Dense(10)

这里是编译和训练代码:

model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])

history = model.fit(train_images, train_labels, epochs=10, 
                    validation_data=(test_images, test_labels))

原始顺序API的精度为0.7175999879837036,而功能性API的精度为0.0502999983727932。不确定在重写代码时哪里出了问题,任何帮助将不胜感激。谢谢。

python machine-learning keras deep-learning image-recognition
1个回答
0
投票

您的两个型号不相同。第二和第三卷积层分别具有64个单元和32个单元,用于示例代码中的顺序模型和功能模型。

如果将来有疑问,可以尝试做

model.summary()

并进行比较以查看模型是否相同。

© www.soinside.com 2019 - 2024. All rights reserved.