ざっくばらんメモ_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を再帰的に適用したい場合などにおいて便利な設計になる.