1

我正在尝试采用模型(旧模型)中的最后一层,并制作一个只有一层(新模型)的新模型,其参数与旧模型的最后一层完全相同。我想以一种不知道旧模型的最后一层的方式来做到这一点。我正在尝试使用此代码执行此操作,但出现错误。

newModel = Sequential()
newModel.add(type(oldModel.layers[-1])(oldModel.layers[-1].output_shape,
                                            activation=oldModel.layers[-1].activation,
                                            input_shape=oldModel.layers[-1].input_shape))

这会产生以下错误:

TypeError: __init__() missing 1 required positional argument: 'output_dim'

如果我检查 oldModel 中的最后一层,它会显示:

full_model.model.layers[-1]
>>>> <keras.layers.core.Dense at 0x7fe22010e128>

我尝试将 output_dim 添加到我以这种方式复制的参数列表中,但这似乎没有帮助。当我这样做时,它给了我这个错误:

Exception: Input 0 is incompatible with layer dense_8: expected ndim=2, found ndim=3

知道我在这里做错了什么吗?

4

1 回答 1

0

自己找到了答案。如果不是使 input_shape 与旧模型的最后一层的 input_shape 相同,而是将其设置为旧模型倒数第二层的 output_shape 并仅指定该输出数组的 [1:],则它可以工作。有效的代码如下:

newModel.add(type(oldModel.layers[-1])(oldModel.layers[-1].output_shape,
                                        activation=oldModel.layers[-1].activation,
                                        input_shape=oldModel.layers[-2].output_shape[1:]))
于 2016-12-11T01:44:49.953 回答