1

モデル (古いモデル) の最後のレイヤーを取得し、古いモデルの最後のレイヤーとまったく同じパラメーターを持つ 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 と同じにする代わりに、古いモデルの最後から 2 番目のレイヤーの 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 に答える