

画像認識プログラミングレシピという本で画像認識を学習中です。  
kerasでモデルを保存しようとするとエラーが出て保存できません。  
以下のサイトが参考になるかなと思ったのですが、読んでもよく理解できませんでした。

[Kerasでmodel.saveしようとしてmust override
`get_config`エラーが出たときの対処](https://qiita.com/taiga518/items/b2154b661e7baf56031e)

文字数の関係上モデルの一部を抜粋させていただきました。  
必要な情報があればコメントお願いします。

モデル

[code]

    model = Sequential()
    
    #学習方法を決める
    
    #(学習スタイル, 損失関数, 正解かどうかの評価方法)
    model.compile(optimizer=keras.optimizers.Adadelta(),
                loss=keras.losses.categorical_crossentropy,
                metrics=["accuracy"])
    
    print("反復学習回数:", EPOCHS)
    fit_record = model.fit(train_data, train_teacher_labels, batch_size=BATCH_SIZE, epochs=EPOCHS, verbose=1, validation_data=(test_data, test_teacher_labels))
    
    #ニューラルネットワークの構築
    
    #畳み込み層(入力のニューロン数, 畳み込みエリアの幅と高さ, 活性化関数, 入力データの形式)
    model.add(Conv2D(32, kernel_size=(3, 3), activation="relu", input_shape=input_shape))
    model.add(Conv2D(64, (3,3), activation="relu"))
    #プーリング層
    model.add(MaxPooling2D(pool_size=(2, 2)))
    #ドロップアウト層(過学習を防ぐ)
    model.add(Dropout(0.25))
    #入力を平滑化する
    model.add(Flatten())
    #全結合層(ノード数が128個, 活性化関数)
    model.add(Dense(128, activation="relu"))
    model.add(Dropout(0.5))
    #出力層(ノーど数がnum_classes個になる)
    model.add(Dense(NUM_CLASSES, activation="softmax"))
    
[/code]

エラーが出たところ

[code]

    model.save("keras-mnist-model.h5")
    
[/code]

エラー内容

[code]

    NotImplementedError                       Traceback (most recent call last)
    <ipython-input-90-a2ac93d46f7c> in <module>()
    ----> 1 model.save("keras-mnist-model.h5")
    
    8 frames
    /usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/base_layer.py in get_config(self)
        719       raise NotImplementedError('Layer %s has arguments in `__init__` and '
        720                                 'therefore must override `get_config`.' %
    --> 721                                 self.__class__.__name__)
        722     return config
        723 
    
    NotImplementedError: Layer ModuleWrapper has arguments in `__init__` and therefore must override `get_config`.
    
[/code]

keras 2.5.0  
tensorflow 2.5.0  
numpy 1.19.5  
macOSX  
google colab


CC BY-SA 4.0
2021-07-30T01:24:01.667
80475
2022-03-31T11:29:47.017
2022-03-31T11:29:47.017
3060
47513
question
python 機械学習 tensorflow keras google-colaboratory
Google Colaboratoryを使ったkerasでmodel.saveができない


MNISTを例にすると以下のようなコードになります。

  * モデルのcompileはアーキテクチャを作った後に行ってください。
  * モデルの訓練(fitメソッドを呼ぶこと)はアーキテクチャを作ってcompileをしたあとで行ってください。
  * データのshapeが正常であるかを確認してください。

[code]

    import numpy as np
    from tensorflow import keras
    from tensorflow.keras.layers import *
    from tensorflow.keras.models import Sequential
    
    (x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
    
    EPOCHS = 2
    BATCH_SIZE = 1000
    NUM_CLASSES = 10
    
    x_train = x_train.astype("float32") / 255
    x_test = x_test.astype("float32") / 255
    x_train = np.expand_dims(x_train, -1)
    x_test = np.expand_dims(x_test, -1)
    y_train = keras.utils.to_categorical(y_train, NUM_CLASSES)
    y_test = keras.utils.to_categorical(y_test, NUM_CLASSES)
    
    model = Sequential()
    
    model.add(keras.Input(shape=(28, 28, 1)))
    model.add(Conv2D(32, kernel_size=(3, 3), activation="relu"))
    model.add(Conv2D(64, (3,3), activation="relu"))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Dropout(0.25))
    model.add(Flatten())
    model.add(Dense(128, activation="relu"))
    model.add(Dropout(0.5))
    model.add(Dense(NUM_CLASSES, activation="softmax"))
    
    model.compile(optimizer=keras.optimizers.Adadelta(),
                loss=keras.losses.categorical_crossentropy,
                metrics=["accuracy"])
    
    fit_record = model.fit(x_train, y_train, batch_size=BATCH_SIZE, epochs=EPOCHS, verbose=1, validation_data=(x_test, y_test))
    
    model.save("keras-mnist-model.h5")
    
[/code]


CC BY-SA 4.0
2022-03-30T23:38:55.213
88111
2022-03-31T01:49:23.700
2022-03-31T01:49:23.700
52014
52014
80475
answer