やっとこさで、ディープラーニングの途に就きます。 ディープラーニングの起源となるパーセプトロンは、ニュートラルネットワークの基礎のアルゴリズムということです。 StepⅠとして、論理関数の AND関数、NAND関数、OR関数、XOR関数 の導入をします。
1. ANDゲート : パーセプトロン(perceptron)の実装
ANDゲートは、 次の式(1)を実装した関数で、 図(1)で示されます。
式(1)
図(1)
プログラム_1: [ ANDゲートを定義して論理値を返します。 ]
1)ANDゲートをdef関数で定義。 引数はX1,X2。
2)w1とw2,Thetaを定数で決める。 カンマ(, )で各変数を区切って代入できる。
3)計算結果をとりあえず、Ans とします。
4)Ans がThetaの値以下なら、 0を返す。
5)Ans がThetaの値より大きければ、 1を返す。
6)主プログラムは X1,x2をそれぞれ引数として、関数を呼び出す。
7)X1,X2≂(0,0),(1.0)(0.1),(1.1)の4パターンで、ANDゲートの結果をそれぞれy1,y2,y3,y4 とする。
8)y1,y2,y3,y4を印字
結果(1) : プログラム_1の結果
ここで、ANDゲートの論理値表を描くのプログラムを作ります。 前回のおさらいになります。
プログラム_2: [ ANDゲートの論理値表を描くのプログラムを追加 します。 ]
1)pyplot を追加でインポートします。
2)Tex用に数式フォントセット( mathtext.fontset )を㎝にしておきます。
3)タイトル用にフォントセット(font.family)はTimes New Romanにします。
4)x1、x2、yのタイトル文字を適当な間隔を開けて印字。数字の下付き$x_1$ $x_2$を使います。
5)Texの制御文字’$’を予め、S= '$'としておきます。 コーテションを省略できる。
6)x1、x2とAND関数結果yを呼び出します。 forで4つのケースを繰返すようにしました。
7)X1,X2,yを制御文字$と組み合わせた文字列り、位置を変えて描きます。
( Texで変数の値を直接印字するの方法が分からなかった。 ネット検索で、文字列を作って印字する方法が紹介されていた。 多分、直接変数の値を印字する方法もあるのではないかとは思います。)
8)区切りの線引きをます。横線はaxhline 縦線はaxvlineを使い、実線(Solid)と破線(dashed)を設定します。
結果(2) : プログラム_2の結果
次に、重み付けとしてのThetaの代わりにbを乗せたゲート関数を定義します。
式(2)
プログラム_3 : 式(2)を描画するプログラム。
プログラム_4 : 式(2)を実装したプログラムをコーディング。 w1,w2,bの各値を0.5, 0.5, -0.7といます。
1)修正と追加は、AND結果を計算結果を0との比較ではなく、1との比較とするために1加え、int文で整数部分のみを関数の結果として返します。
論理値表の描画もします。 結果は同じなので、省略。
2. NANDゲート , ORゲート
さらに、 NANDゲート と ORゲート を作ります。
プログラム_5 : NANDゲート 。 プログラム4の関数を変更するだけです。
プログラム5の結果:NANDゲート
プログラム_6 : ORゲート 。 同じく関数を変更するだけです。
プログラム6の結果:ORゲート
3. XORゲート
プログラム_7 : XORゲート 。
XORゲートは、ANDゲート、NANDゲート、ORゲートの組み合わせによって実装が出来ます。
NAND結果をs1、OR結果をs2として、 s1、s2をANDにすればいいだけ。
すでに、3つのゲートを関数設定してあるので、順番に通すだけです。
以上で、Perceptoron の実装が出来ました。
YouTube画像を公開
0コメント