やりたいこと
keras.models.Sequentialクラスを継承し、機能を追加したい。
// Sequentialクラスを継承したMySequentialクラスの定義 class MySequential(Sequential): def __init__(self, layers=None, name=None): super().__init__(layers=layers, name=name) // 追加したメソッド def set_mini(self): self.mini = Sequential([self.layers[0]]) // MySequentialインスタンスを生成 my_model = MySequential([ // ... ]) my_model.set_mini() // -> OK
しかしロードしたモデルはSequentialオブジェクトなので、上で追加したset_mini()メソッドは使えない。
loaded_model = keras.models.load_model('hoge_model.h5') loaded_model.set_mini() // -> Error!
ここで、ロードしたモデル(Sequentialオブジェクト)に対してもset_mini()ができる(またはそれと同等の動作をする)ようなプログラムが書きたい。
望ましくない解決策
Sequentialクラスに直接メソッドを追加する(参考ページ)。
def set_mini(self): self.mini = Sequential([self.layers[0]]) Sequential.set_mini = set_mini loaded_model = keras.models.load_model('hoge_model.h5') loaded_model.set_mini() // -> OK
継承を使えばSequentialクラスの他のメソッドをオーバーライドできるし、そちらの方が便利...
継承して新しいクラスを作ることで問題解決したい。
よろしくお願いいたします。
あなたの回答
tips
プレビュー