VAEを用いた半教師あり学習のモデルで以下の様な物があります。
以上のサイトでそれが実装されています。
In[17]の、
Python
1history = fit_model(X_others, X, y, epochs=epochs)
この部分で画像で示したモデル
Python
1label_vae = Model(inputs=[x_in, y_in], outputs=[_x_output, _y_output]) 2unlabeled_vae = Model(inputs=x_in, outputs=u_x_output)
以上二つの学習が行われ、同じくIn[17]の
Pyhton
1classifier = Model(inputs=[x_in], outputs=[_y_output])
この部分で新たにclassifierを定義しています。しかし、これは上の画像でも示す通り、全体のモデルの一部分です。以下の様に、
Python
1y_pred = np.argmax(classifier.predict(X_test, batch_size=batch_size), axis=-1)
ともう新たにfitを行わなくてもpredictで推論を行なっているのは、全体のモデルの学習時に学習された重みΦがclassifierとして定義したモデルに引き継がれているという事でしょうか?もし、学習されたclassifierのモデルと重みを保存したかったら上のclassifierの定義に続いて、
Python
1classifier = Model(inputs=[x_in], outputs=[_y_output]) 2classifier_json_str = classifier.to_json() 3open('classifier_model.json', 'w').write(classifier_json_str) 4classifier.save_weights('classifier_weights.h5')
この様にすればclassifierは保存されるのでしょうか?
長くなりましたが、質問は、学習されたモデルの一部分を後から定義した場合でも学習された重みは反映されているのかという事です。また、最初に定義したモデル、label_vae 、unlabeled_vae も別々に学習されていますが、それぞれで学習された重みは共有されているのでしょうか?されているはずなのですが、これはそれぞれのモデルのinputに同じx_inが使われているからとかそういう事ですか?
あなたの回答
tips
プレビュー