首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >一步一步地更新感知器的权重会产生不同的结果,为什么?

一步一步地更新感知器的权重会产生不同的结果,为什么?
EN

Stack Overflow用户
提问于 2021-06-15 22:19:28
回答 1查看 77关注 0票数 0

post提供了一种找到(几乎)最佳学习率和初始权重的方法,以便感知器以最小迭代收敛。

我稍微修改了一下数据,

代码语言:javascript
运行
复制
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

以下是步骤

这将初始化参数

代码语言:javascript
运行
复制
model_w = np.asarray([0.7, 0.7])
model_b = 0.0
eta = .2

此代码查找错误分隔的示例,方法与原始方法相同

代码语言:javascript
运行
复制
for i in range(3):
    print(y_train[i] == predict(x_train[i]))

然后我就得到了

代码语言:javascript
运行
复制
False
False
True

因此,我再次以与原始方法相同的方式更新了第一个示例的权重

代码语言:javascript
运行
复制
update_weights(0, True)

新的权重是

代码语言:javascript
运行
复制
-0.2
[0.32 0.62]

然后我又做了一次预测

代码语言:javascript
运行
复制
for i in range(3):
    print(y_train[i] == predict(x_train[i]))

并得到了

代码语言:javascript
运行
复制
False
False
True

然后,我又更新了权重

代码语言:javascript
运行
复制
update_weights(0, True)

新的权重是

代码语言:javascript
运行
复制
-0.4
[-0.06  0.54]

这与原始代码中的不同。

我遗漏了什么?

EN

回答 1

Stack Overflow用户

发布于 2021-06-18 00:37:42

我认为你在你发布的代码中遗漏了一些东西。您只能根据data first data id=0更新权重。如果你仔细观察代码,会发现有一个循环:

代码语言:javascript
运行
复制
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)。然后你应该根据错误更新你的权重。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67988082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档