1. namahoge

    Posted

    namahoge
Changes in title
+TensorFlow機械学習クックブック第6章(というか三目並べのところ)で個人的につまったところとか
Changes in tags
Changes in body
Source | HTML | Preview

三目並べの学習

Recipe 41

そもそも何をどう学習するの?? :angel:

学習器を定義しているのは <方法> 9(モデルの変数と演算を...) ~ 11(損失関数を...) らへん。
<方法> の 4(座標変換を使って...) ~ 8(トレーニングセットから1つの...) は下準備で、トレーニングセットを作ってる
(準備がやたら長いしややこしくない??)
github にある base_tic_tac_toe_moves.csv は対称的な局面は省略されてるてことか

まとめると学習器自体はふつうで、

入力 x: 局面情報(要素数9の一次元リスト)
layer1 = sigmoid(A1*x+b1)
layer2 = A2*layer1+b2
教師ラベル y: 最善手(整数0~9のどれか)(あれ最善手ってどう定義してるんだろう(未検証))
loss: layer2 と y のhogeエントロピー

実際にはいくつかのデータをセットで学習器につっこむ(それはそう感)

マル

<方法>

4.

board[::-1]

リストを逆順に並べ替える。 参考1 :baby:

list(zip(*[board[6:9], board[3:6], board[0:3]]))

ナニコレ長い。あと「*」って可変長引数に使うやつじゃないの?? :construction_worker:
で参考2~4
なにやら *a みたいにアスタリスク「*」をつけると a が展開されるらしい

いろいろ試してみた(うp主はこれで理解できたつもり)

asterisk.png

てことで list(zip(*[board[6:9], board[3:6], board[0:3]])) を順を追って見てみる

asterisk2.png

見やすいように (・・・☆)

def print_board(board): # 引数は一次元のリスト
    print(' ' + str(board[0]) + ' | ' + str(board[1]) + ' | ' + str(board[2]))
    #print('__________')
    print(' ' + str(board[3]) + ' | ' + str(board[4]) + ' | ' + str(board[5]))
    #print('__________')
    print(' ' + str(board[6]) + ' | ' + str(board[7]) + ' | ' + str(board[8]))
    print('\n')

def make_board(board_2d): # 二次元のリストを一次元に変換する
    return [value for item in board_2d for value in item]
    '''
    board_1d = []
    for item in board_2d:
        for value in item:
            board_1d.append(value)
    return board_1d
    '''

asterisk3.png

return [value for item in board_2d for value in item]

上の☆参照 :man_with_turban:
for文で書き換えれる(長くなるけど)

参考

  1. [python] スライスでリバース!!
  2. Pythonでunzipってどうやるの?
  3. アスタリスクによるシーケンスの展開
  4. Pythonのイテレータとジェネレータ