我正在尝试在python中实现一个简单的感知器,它能够将逻辑函数分类为OR或AND。
我在python中有以下代码:
偏差是每个输入向量中的第三个条目。有一个行向量'targets',其中包含'正确'值,标签:
问题是权重无法正确更新。它们仍然是随机的,这告诉我没有任何东西真正受到训练。
inputs = np.array([
[0,0,1],
[0,1,1],
[1,0,1],
[1,1,1],
])
targets = np.array([0,0,0,1])
def step_function(x):
return 1 * (x>=0)
def train(x,y):
rate = 0.1
trials = 10
errors = []
w = np.random.rand(len(inputs[0]))
for t in range(trials):
for i, x in enumerate(inputs):
actual = np.dot(inputs[i], w)
desired = targets[i]
error = desired - step_function(actual)
if error != 0:
errors.append(error)
w += rate * error * inputs[i]
return w
w = train(inputs, targets)
print(w)
答案 0 :(得分:0)
您的功能step_function
不正确。您可以跳过该功能,只需更改:
#this
error = desired - step_function(actual)
#to
error = desired - actual
结果不会是完美的1和0,但会做我认为你瞄准的工作。在将来,你可以使用sigmoid函数或其他东西来尝试使结果更接近0和1。