在机器学习中使用责任链模式
Using Chain of Responsibility pattern in machine learning
我阅读了很多 C++ 和 Java 机器学习代码,其中每个隐藏层都在 for 循环中调用。为什么模式 责任链 从未使用过?它的缺点是什么?
-经典方法:
std::vector<Layer> layers(10);
for(Layer& hidden : layers)
hidden.activation();
-具有责任链:
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();
在图层中:
Layer::activation()
{
// do something
nextLayer->activation();
}
谢谢。
为什么要通过创建列表并调用它来使简单的代码复杂化 "chain of responsibility"?
std::vector<Layer> layers(10);
for(Layer& hidden : layers)
{
// prepare for activation aka do something
hidden.activation();
}
您不喜欢这种方法的什么地方?
for 循环的优点是每次调用 for 循环时 layers
集合可能不同。 'disadvantage' 是 for 循环保证在集合的 每个 项上调用成员函数。
责任链模式可以通过集合做成'iterate',但是很难改变集合,必须更新所有项之间的链接。此外,由于这是递归,您可能会出现堆栈溢出!
然而,责任链在终止循环时确实很出色:任何成员都可以决定自己处理呼叫并 return 立即,或者只是转发到下一个项目。
第一个例子;每一层都完全独立于下一层。这意味着他们对其他层一无所知——它们可能存在也可能不存在;并且只需要专注于单一职责。
第二个;这些层现在不仅知道还有其他层,而且还知道它是一个链表。如果第 2 层和第 3 层彼此独立但仅依赖于第 1 层怎么办?代表它的能力丧失了。最终,控制层的项目不再有任何能力按照它想要的方式存储它们,导致它是一个糟糕的设计,因为它正在朝着一个上帝对象努力。
我阅读了很多 C++ 和 Java 机器学习代码,其中每个隐藏层都在 for 循环中调用。为什么模式 责任链 从未使用过?它的缺点是什么?
-经典方法:
std::vector<Layer> layers(10);
for(Layer& hidden : layers)
hidden.activation();
-具有责任链:
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();
在图层中:
Layer::activation()
{
// do something
nextLayer->activation();
}
谢谢。
为什么要通过创建列表并调用它来使简单的代码复杂化 "chain of responsibility"?
std::vector<Layer> layers(10);
for(Layer& hidden : layers)
{
// prepare for activation aka do something
hidden.activation();
}
您不喜欢这种方法的什么地方?
for 循环的优点是每次调用 for 循环时 layers
集合可能不同。 'disadvantage' 是 for 循环保证在集合的 每个 项上调用成员函数。
责任链模式可以通过集合做成'iterate',但是很难改变集合,必须更新所有项之间的链接。此外,由于这是递归,您可能会出现堆栈溢出!
然而,责任链在终止循环时确实很出色:任何成员都可以决定自己处理呼叫并 return 立即,或者只是转发到下一个项目。
第一个例子;每一层都完全独立于下一层。这意味着他们对其他层一无所知——它们可能存在也可能不存在;并且只需要专注于单一职责。
第二个;这些层现在不仅知道还有其他层,而且还知道它是一个链表。如果第 2 层和第 3 层彼此独立但仅依赖于第 1 层怎么办?代表它的能力丧失了。最终,控制层的项目不再有任何能力按照它想要的方式存储它们,导致它是一个糟糕的设计,因为它正在朝着一个上帝对象努力。