更改张量流中预训练模型的输出层

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

我有一个预训练的模型,只想将输出层更改为具有更多单元的新层。在本例中,旧输出层有 18 个单元,新输出层应有 20 个单元。

我目前的实现如下所示:

old_model = load_model(model_filepath)
helper_model = Model(inputs=old_model.inputs, outputs=old_model.layers[-2].output)
new_output = Dense(units = old_model.layers[-1].units + increment, activation='softmax', activity_regularizer=l1_l2(l1l2[0],
                       l1l2[1]))(helper_model.output)
new_model = Model(inputs=helper_model.input, outputs=new_output)

如果我打印 new_model.summary() 并查看最后一层,一切看起来都很好:

 dense (Dense)               (None, 20)                   2580      ['dropout[0][0]']

======================================================================================

但是,当我尝试训练 new_model 时,出现以下错误:

ValueError: Shapes (None, 18) and (None, 20) are incompatible

我为什么会收到此消息以及如何解决此问题?我可能需要重塑图层吗?

python tensorflow machine-learning keras conv-neural-network
1个回答
0
投票

要将输出层中的单元数量从 18 个增加到 20 个,您需要根据用于神经网络实现的框架或库进行调整。

单位数量不匹配:

helper_model 的最后一层有 18 个单位,但您正在尝试使用 old_model.layers[-1].units + 增量创建一个新的输出层,其计算结果为 20 个单位。

在您的代码中,您通过某个变量增量来增加单位数量:

new_output = Dense(units=old_model.layers[-1].units + 增量, 激活='softmax',activity_regularizer=l1_l2(l1l2[0], l1l2[1]))(helper_model.output)

确保增量值正确并与您预期的输出形状一致。如果您希望输出形状为 (None, 20),请确保在 Dense 层中将单位设置为 20:

new_output = 密集(单位=20,激活='softmax', Activity_regularizer=l1_l2(l1l2[0], l1l2[1]))(helper_model.output)

如果您仍然遇到问题,请检查以下几点:

数据形状:确保您的输入数据具有适合模型的正确形状。模型的输入形状应与输入数据的形状相匹配。

编译步骤:编译模型时,请确保损失函数和指标与您的问题兼容,并且您使用的是正确的优化器。

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