【发布时间】:2014-01-28 15:20:55
【问题描述】:
我正在尝试实现感知器算法,但得到的结果不一致;我注意到权重的初始化产生了很大的影响。有什么我公然做错了吗?谢谢!
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也有缩进错误。 -
有时会输出正确的标签,有时却不会,有点随机
标签: machine-learning statistics neural-network perceptron