誤差逆伝搬法

 投稿者:しばっち  投稿日: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
 

戻る