FC2ブログ

*All archives* |  *Admin*

<<09  2018/10  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31  11>>
はじめてのpython&Tensorflowその5・ドラや役牌などの情報追加
前回の最後で書いた通り、
手牌の枚数のみでなく、巡目・ドラ・赤5・役牌・シャンテン数・見えてる枚数の情報を足してニューラルネットを組みました。

情報を今後どんどん足していくことを考えると、csvを事前に読み込んでおくとメモリが足らなくなりそうなのは明らかなので、
ジェネレータというのを使ってcsvを都度読み込みする方式に変更しました。

ジェネレータ導入の副産物として、あらかじめ定義してあるジェネレータ関数の中で入力値を加工する(色ごとに配列を分けるとか、one_hotベクトルの生成など)のが簡単になりました。
Lambdaレイヤーとかで苦労してぐちゃぐちゃとデータをいじる必要がなくなったのはプログラミング難易度的に下がってうれしい。
Tensorflow関数を使わずに済んだので、model.saveも通るようになったのもいい感じ。

TensorBoradによるモデルグラフはこんな感じ↓。
181017-01.png
前回の畳み込み層以下のLambda層などの集団が一掃されました。

入力はあらかじめ牌譜解析で必要な情報をcsv化してあるのをジェネレータ関数内で下処理してマンズ、ピンズ、ソーズ、字牌ごとに分けたnumpy配列。

ドラや役牌等の情報を足した分、畳み込み計算の入力チャンネル数が1から7に増えました。
変数の値を1か所変えるだけでshapeが異なる畳み込み計算もすぐにできるのはkeras様様ですね。
というか、今までそういうめんどいのを自力で実装しようとしてたのは車輪の再発明みたいで頭の悪さ全開でした。


正解率、損失関数はこんな感じ↓。
181017-02.png
val_acc(テストデータの正解率)の方で63%へと前回からさらに向上しました。

実際の手牌と予測値との突合せがこんな感じ↓。
181017-03.png
そこまで予測値がおかしくなってるのは多くはなさそうでいい感じ。


次の課題として考えられるのは、
・畳み込み計算を複数回噛ませることができないか?もしそうするとすると、色ごとに分けたものを使うのか、1回畳み込み後に結合したものを使うのか。
・手役狙い(主に一色手・トイトイ・三色・チャンタあたり)をどう考えるか。
・自分副露時の情報をどのように追加するか。

どれも一筋縄ではいかないというか、モデルの構想力が試される感じです。
とりあえず畳み込み計算についてもうちょっと勉強して理解を深めておきたいところです。
スポンサーサイト



プロフィール

nisi5028

Author:nisi5028
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
FC2カウンター
フリーエリア
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード