首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在机器学习中使用责任链模式

在机器学习中使用责任链模式
EN

Stack Overflow用户
提问于 2018-03-09 10:17:45
回答 3查看 179关注 0票数 1

我读过许多机器学习的C++和Java代码,其中每个隐藏层在for循环中被调用。为什么从来没有使用过响应性模式链?它的不前卫是什么?

-Classic方法:

代码语言:javascript
复制
std::vector<Layer> layers(10);
for(Layer& hidden : layers)
  hidden.activation();

-With响应链:

代码语言:javascript
复制
std::vector<Layer*> layers();
// ... init layers vector ...
layers[0]->nextLayer(layers[1]);
layers[1]->nextLayer(layers[2]);
layers[2]->nextLayer(layers[3]);
// and so on...
layers[0]->activation();

层中:

代码语言:javascript
复制
Layer::activation()
{
  // do something
  nextLayer->activation();
}

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-03-09 10:26:27

for循环的优点是每次调用for循环时,layers集合可能是不同的。“缺点”是保证for循环对集合的每个项调用成员函数。

责任链模式可以通过集合进行“迭代”,但是很难更改集合,并且必须更新项之间的所有链接。而且,由于这是递归,所以可能会出现堆栈溢出!

但是,在终止循环时,责任链确实会发光:任何成员都可以决定自己处理调用本身并立即返回,或者直接转发到下一项。

票数 2
EN

Stack Overflow用户

发布于 2018-03-09 10:24:55

为什么要通过创建列表并称之为“责任链”来使简单的代码复杂化呢?

代码语言:javascript
复制
std::vector<Layer> layers(10);
for(Layer& hidden : layers)
{
  // prepare for activation aka do something
  hidden.activation();
}

你不喜欢这种方法吗?

票数 0
EN

Stack Overflow用户

发布于 2018-03-09 10:27:24

第一个例子;每个层完全独立于下一个层。这意味着他们对其他层一无所知--他们可能存在,也可能不存在;只需要专注于单一的责任。

第二层;这些层现在不仅知道还有其他层,而且还知道它是一个链接列表。如果第二层和第三层相互独立,但仅仅依赖于1,又会怎样呢?失去了代表这一点的能力。最终,控制这些层的项不再能够以它想要的方式存储它们,导致它成为一个糟糕的设计,因为它正在朝着一个上帝对象工作。

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

https://stackoverflow.com/questions/49191461

复制
相关文章

相似问题

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