首页 文章

Keras模型 - 功能API - 向现有模型添加图层

提问于
浏览
2

我正在尝试使用Keras Model API来修改训练有素的模型,以便在旅途中对其进行微调:

一个非常基本的模型:

inputs = Input((x_train.shape[1:]))
x = BatchNormalization(axis=1)(inputs)
x = Flatten()(x)
outputs = Dense(10, activation='softmax')(x)
model1 = Model(inputs, outputs)
model1.compile(optimizer=Adam(lr=1e-5), loss='categorical_crossentropy', metrics=['categorical_accuracy'])

它的架构是

InputLayer - > BatchNormalization - > Flatten - > Dense

在我对它进行一些训练批处理之后,我想在Flatten one和输出之间添加一些额外的Dense层:

x = Dense(32,activation='relu')(model1.layers[-2].output)
outputs = model1.layers[-1](x)

但是,当我运行它时,我得到了这个:

ValueError:输入0与图层dense_1不兼容:输入形状的预期轴-1具有值784但是有形状(无,32)

有人可以解释一下发生了什么以及如何/如果我可以为已经训练过的模型添加图层?

谢谢

1 回答

  • 3

    Dense 图层严格用于特定输入维度 . 定义后,该维度无法更改(它需要不同数量的权重) .

    因此,如果您真的想在已经使用的密集层之前添加图层,则需要确保最后一个新图层的输出与展平输出的形状相同 . (它说你需要784,所以你的新最后一个密集层需要784个单位) .


    Another approach

    由于你要添加中间层,保留最后一层是没有意义的:它是专门为某个输入训练的,如果你改变输入,那么你需要再次训练它 .

    嗯...既然你需要再次训练它,为什么还要保留呢?只需创建一个适合新旧图层形状的新图形 .

相关问题