在Keras中复制图层的参数

在Keras中复制图层的参数,keras,keras-layer,Keras,Keras Layer,我试图在一个模型(旧模型)中取最后一层,并仅由一个层(新模型)创建一个新模型,该层的参数与旧模型的最后一层的参数完全相同。我想以一种与旧模型的最后一层恰好是什么无关的方式来做这件事。我正试图用这段代码做这件事,但我得到了一个错误 newModel = Sequential() newModel.add(type(oldModel.layers[-1])(oldModel.layers[-1].output_shape,

我试图在一个模型(旧模型)中取最后一层,并仅由一个层(新模型)创建一个新模型,该层的参数与旧模型的最后一层的参数完全相同。我想以一种与旧模型的最后一层恰好是什么无关的方式来做这件事。我正试图用这段代码做这件事,但我得到了一个错误

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>

知道我做错了什么吗

我自己找到了答案。如果我没有使输入_形状与旧模型最后一层的输入_形状相同,而是使其成为旧模型倒数第二层的输出_形状,并且仅指定该输出数组的[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:]))

我自己找到了答案。如果我没有使输入_形状与旧模型最后一层的输入_形状相同,而是使其成为旧模型倒数第二层的输出_形状,并且仅指定该输出数组的[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:]))