Python でニューラル ネットワークを実行するプログラムを作成しています。バックプロパゲーション アルゴリズムを設定しようとしています。基本的な考え方は、5,000 のトレーニング例を調べてエラーを収集し、シータをどの方向に移動する必要があるかを見つけてから、その方向に移動するというものです。トレーニングの例があります。次に、1 つの非表示レイヤーを使用し、次に出力レイヤーを使用します。ただし、移動する必要があるため、シータを正しく移動していないため、ここで勾配/微分/エラーが間違っています。今日はこれに 8 時間費やしましたが、何が間違っているのかわかりません。ご協力いただきありがとうございます!!
x = 401x5000 matrix
y = 10x5000 matrix # 10 possible output classes, so one column will look like [0, 0, 0, 1, 0... 0] to indicate the output class was 4
theta_1 = 25x401
theta_2 = 10x26
alpha=.01
sigmoid= lambda theta, x: 1 / (1 + np.exp(-(theta*x)))
#move thetas in right direction for each iteration
for iter in range(0,1):
all_delta_1, all_delta_2 = 0, 0
#loop through each training example, 1...m
for t in range(0,5000):
hidden_layer = np.matrix(np.concatenate((np.ones((1,1)),sigmoid(theta_1,x[:,t]))))
output_layer = sigmoid(theta_2,hidden_layer)
delta_3 = output_layer - y[:,t]
delta_2= np.multiply((theta_2.T*delta_3),(np.multiply(hidden_layer,(1-hidden_layer))))
#print type(delta_3), delta_3.shape, type(hidden_layer.T), hidden_layer.T.shape
all_delta_2 += delta_3*hidden_layer.T
all_delta_1 += delta_2[1:]*x[:,t].T
delta_gradient_2 = (all_delta_2 / m)
delta_gradient_1 = (all_delta_1 / m)
theta_1 = theta_1- (alpha * delta_gradient_1)
theta_2 = theta_2- (alpha * delta_gradient_2)