投稿者:しばっち
投稿日:2021年 1月27日(水)19時59分16秒
|
|
|
誤差逆伝搬法による多層パーセプトロン(ニューラルネットワーク)のテスト
https://qiita.com/Ugo-Nama/items/04814a13c9ea84978a4c
https://qiita.com/43x2/items/50b55623c890564f1893
https://qiita.com/tky1117/items/ffc367e52c4a04cffa1d
https://qiita.com/tky1117/items/d2847ac2c84858c7307b
https://qiita.com/tky1117/items/c2c69a5f69d9cf8ca751
https://qiita.com/tky1117/items/7cdebb370e0da7ba6f71
https://qiita.com/tky1117/items/d845040be4a13dd1133f
https://qiita.com/tky1117/items/83403794280e74357660
https://qiita.com/tky1117/items/bbf250bcbd4ddae2d32e
https://qiita.com/tky1117/items/867f311b91fa927cacd2
下記URLからの移植です。残念ながら質問されてもわかりません。
https://qiita.com/ufoo68/items/9e4ca04578ba0f5fa5ff
誤差逆伝搬法はAI(人口知能)や機械学習といった技術に使われています。
下記プログラムでは学習量を30万epochで打ち切っています。2進モードで実行してください。
XOR問題について学習させ解かせています。
OPTION BASE 0
RANDOMIZE
LET NUM_INPUT=2
LET NUM_HIDDEN=20
DIM TRAIN_X(3,NUM_INPUT),D(3)
MAT READ TRAIN_X,D
DATA 0, 0, -1,0, 1, -1,1, 0, -1,1, 1, -1
DATA 0, 1, 1, 0
DIM W(NUM_HIDDEN,NUM_INPUT),V(NUM_HIDDEN),Y(4,NUM_HIDDEN),Z(4)
LET ETA = 0.1
LET EPOCH = 300000
FOR L=0 TO NUM_HIDDEN
FOR I=0 TO NUM_INPUT
LET W(L,I) = RND
NEXT I
NEXT L
FOR I=0 TO NUM_HIDDEN
LET V(I) = RND
NEXT I
FOR K=0 TO EPOCH
FOR J=0 TO 3
FOR L=0 TO NUM_HIDDEN-1
FOR I=0 TO NUM_INPUT
LET TMP = TMP+TRAIN_X(J,I) * W(L,I)
NEXT I
LET Y(J,L) = SIGMOID(TMP)
LET TMP = 0
NEXT L
LET Y(J,NUM_HIDDEN) = -1
FOR I=0 TO NUM_HIDDEN
LET TMP = TMP+Y(J,I) * V(I)
NEXT I
LET Z(J) = SIGMOID(TMP)
LET TMP = 0
FOR I=0 TO NUM_HIDDEN
LET V(I) = V(I) - ETA * Y(J,I) * DIFFSIGMOID(Z(J)) * (Z(J) - D(J))
NEXT I
FOR L=0 TO NUM_INPUT
FOR I=0 TO NUM_HIDDEN
LET W(I,L) = W(I,L) - ETA * TRAIN_X(J,L) * DIFFSIGMOID(Y(J,I)) * DIFFSIGMOID(Z(J)) * (Z(J) - D(J)) * V(I)
NEXT I
NEXT L
NEXT J
IF MOD(K , 10000) =0 THEN
PRINT "z=";
FOR I=0 TO 3
PRINT Z(I);
NEXT I
PRINT "epoch:";K
END IF
NEXT K
END
EXTERNAL FUNCTION SIGMOID(X)
LET SIGMOID=1/(1+EXP(-X))
END FUNCTION
EXTERNAL FUNCTION DIFFSIGMOID(X)
LET A = 0.1
LET DIFFSIGMOID=A*X*(1-X)
END FUNCTION
|
|
|