ざっくばらんメモ_6:kaggle, C++のVisitor
kaggle Zillow challenge
前回まででresent based regressionが動くようになったので 今回はモデルのセーブとテストデータに対する予測を行えるようにする.
結果無事resnetベースの推論モデルによる予測ができるようになってきた ので早速ある程度学習してからテストデータで予測をしてみる.
ー結果改善はせず.スコア0.0688108,学習が足りないのかもしれない. もう少し学習を続けてみる事にする
C++におけるVisitorの仕組み
Visitorという設計概念を用いることで,入力の型に限定されない汎用的な関数を設計する事が可能となる.
これはelementとvisitorクラスから成り立っている.
まず始めにベースクラスとしてのelementを作成.ここではaccept関数を宣言しておき またありえる各elementのtype毎のベース関数を定義しておく.
次にベースクラスとしてのvisitorを作成.visit関数を作成した全てのelement typeに対して作っておく.
続いて各elementにおいてaccept関数を定義し,引数として入ってきたvisitorクラスのvisit関数をコールするようにする.
そしてvisitor derivedなクラスを定義し,その中で具体的なvisit関数の定義を行う.
この時,visit関数は引数としてelementクラスをとるため,各elementクラスに対して定義が必要になる.
以上の設計において,クライアントはvisitor derivedなクラスのinstanceを作成し, それらはelementクラスのaccept関数の引数として用いられる.
ここでは,elementクラスのaccept関数で定義した通り,引数のvisitorクラスのvisit関数が実行されることになる.
結局,最終的に実行されるvisit関数はelement,visitorクラス双方に依存して動作を変化させられる.
この設計は,複数typeのelement/visitorを再帰的に適用したい場合などにおいて便利な設計になる.