我試圖實現感知器算法,但得到不一致的結果;我注意到權重的初始化產生了很大的影響。有什麼我公然做錯了嗎?謝謝!Perceptron算法的結果不一致
import numpy as np
def train(x,y):
lenWeights = len(x[1,:]);
weights = np.random.uniform(-1,1,size=lenWeights)
bias = np.random.uniform(-1,1);
learningRate = 0.01;
t = 1;
converged = False;
# Perceptron Algorithm
while not converged and t < 100000:
targets = [];
for i in range(len(x)):
# Calculate output of the network
output = (np.dot(x[i,:],weights)) + bias;
# Perceptron threshold decision
if (output > 0):
target = 1;
else:
target = 0;
# Calculate error and update weights
error = target - y[i];
weights = weights + (x[i,:] * (learningRate * error));
bias = bias + (learningRate * error);
targets.append(target);
t = t + 1;
if (list(y) == list(targets)) == True:
converged = True;
return weights,bias
def test(weights, bias, x):
predictions = [];
for i in range(len(x)):
# Calculate w'x + b
output = (np.dot(x[i,:],weights)) + bias;
# Get decision from hardlim function
if (output > 0):
target = 1;
else:
target = 0;
predictions.append(target);
return predictions
if __name__ == '__main__':
# Simple Test
x = np.array([ [0,1], [1,1] ]);
y = np.array([ 0, 1 ]);
weights,bias = train(x,y);
predictions = test(weights,bias,x);
print predictions
print y
結果不一致的方式是什麼?你發現對重量的依賴是什麼?我猜在'while'也有一個縮進錯誤。 – Nabla
有時它會輸出正確的標籤,有時卻不會,隨機排序 – rahulm