マイコン君|前橋ロボコン|マイコン解説|機械学習

(第4回)1ケタの足し算を機械学習で計算

1ケタの足し算は、暗算でもできますが、機械学習で実行すると、機械学習の理解が深まると思いますのでやってみたいと思います。

まずは、どのようにするか?ですが、数値で足し算をするためにどのように教師データをつくるか?を検討しました。
確実に学習させるため、入力を『0~9』+『0~9』とし、出力を『0~18』とします。つまり、入力に20個の箱と、出力に19個の箱があれば良いことになります。 実際は、出力は20個にします。
そこで、入力と出力の次元数を20にし、第1層・第2層の次元数を100にして、モデルを作ることにします。

モデルの構造

<構造>

以下の構造のニューラルネットワークの構造で、入力と出力に箱を20個づつ用意するので、次元数は20個にします。第1層と第2層は、100次元にしました。

0.学習データの準備

エクセルで学習用のデータを作ります。1ケタの足し算をさせます。入力(2つの数字)と出力(答え)のそれぞれを箱に入れるイメージです。
以下の図で計算をさせていますが、それぞれの数値を箱にいれるための元データですが、機械学習には使いません。入力用の20個の箱の前半が1つめの数値 後半の10個が2つめの数値になります。
出力用の20個の数値は、0~18=19個で、その場所の箱の数値を1にします。20個目の箱は1になりません。
入力・出力の両方とも、数値は0が1番目、1が2番目というように順番に入れます。

エクセルのデータは7万行準備します。最初の6万行は、学習用。残りの1万行は、評価用となります。
入力用と出力用はデータを分けて、それぞれをファイルにします

学習用ファイル(Pythonの圧縮ZIPにも含まれています)

xtrain.csv・・・・入力側の教師データ 6万
xtest.csv・・・・・入力側の評価用データ 1万
ttrain.csv・・・・出力側の教師データ 6万
ttest.csv・・・・・出力側の評価用データ 1万

1.Pythonで学習する

準備したデータをPythonで学習をします。
学習は上記のCSVを読み込んで、学習させます。モデルのパラメーターは次のとおりです

#モデル作成とパラメータ設定
network = TwoLayerNet(input_size=20, hidden_size=100, output_size=20)
iters_num = 10000 # 繰り返しの回数を適宜設定する
train_size = x_train_data.shape[0]
batch_size = 100
learning_rate = 0.5

学習データはファイルに出力させて、再利用が可能にします。
学習を実行すると4つのファイルが出力されるのですが、1層目のwとb、2層目のwとbとなっています。
学習はすぐ終わります。

「Data_Import.py」

2.Pythonで学習データを使って計算をする

学習データは4つのファイルになっているので、それを読み込んで計算させます。
計算するときは、入力の箱に2つの数値と一致する箇所を1にします
例えば、次のように2+1の場合ですが、

#                    <      Number1     ><     Number2       > 
#                    [0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9])
myimg_array=np.array([0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0])

とします。
以下を実行することで計算が開始され。一番最後に『3』と表示されますが、2+1=3という意味になります。

「CheckAns2.py」

計算した結果は、以下の図のとおりです。一番大きい数値「8.31325366e-01」が4番目にないます。これは、「3」を意味します。

Pytonファイル

この一連のファイルは以下のリンクにあります。ダウンロードして、『学習』→『計算』をさせると正しいことがよくわかります。
1ケタの足し算という簡単な計算ですが、機械学習をさせてみると大変なことがわかります。
学習させるデータの数を減らすと、少しずつ特徴がなくなっていき、最後には、正解ができなくなります。
10,000~1,000の学習回数にすると1,000は答えが「4」になります。仕事で『機械学習やる!』という意気込みだけで、データを揃えないで 学習回数を減らして機械学習すると間違える良い例だと思います。
子供に勉強を教えるとき、たくさん繰り返す(学習する量が多い)=テストの点数がよくなるが、機械学習でも言えるのでしょうね・・・。



以下のファイルをダウンロードしてマクロを有効にすると確認できます。
Python.zip
*)保存して解凍して実行してください

-------------