post提供了一种找到(几乎)最佳学习率和初始权重的方法,以便感知器以最小迭代收敛。
我稍微修改了一下数据,
nearest_setosa = np.array([[1.9, 0.4],[1.6, 0.6]])
我在2次迭代中得到的最好结果是
eat = 0.2,初始权重= 0.7,0.7,训练权重=-0,0.5
它成功地分离了数据点。
然而,当我试图一步一步地重现训练时,我得到了一组不同的训练权重-0.06,0.54
以下是步骤
这将初始化参数
model_w = np.asarray([0.7, 0.7])
model_b = 0.0
eta = .2
此代码查找错误分隔的示例,方法与原始方法相同
for i in range(3):
print(y_train[i] == predict(x_train[i]))
然后我就得到了
False
False
True
因此,我再次以与原始方法相同的方式更新了第一个示例的权重
update_weights(0, True)
新的权重是
-0.2
[0.32 0.62]
然后我又做了一次预测
for i in range(3):
print(y_train[i] == predict(x_train[i]))
并得到了
False
False
True
然后,我又更新了权重
update_weights(0, True)
新的权重是
-0.4
[-0.06 0.54]
这与原始代码中的不同。
我遗漏了什么?
发布于 2021-06-18 00:37:42
我认为你在你发布的代码中遗漏了一些东西。您只能根据data first data id=0
更新权重。如果你仔细观察代码,会发现有一个循环:
for i in range(3):
if y_train[i] != predict(x_train[i],model_w, model_b):
update_weights(i,model_w, model_b, eta)
else:
indicator+=1
在您的例子中,您必须根据您获得的False
进行两次更新,即update_weights(0, True)
和update_weights(1, True)
。然后你应该根据错误更新你的权重。
https://stackoverflow.com/questions/67988082
复制相似问题