Fix the bug for MEL when adding a recurrent loop.
This commit is contained in:
Родитель
43ea68b59e
Коммит
0879cfef56
|
@ -1843,6 +1843,13 @@ namespace Microsoft { namespace MSR { namespace CNTK {
|
|||
|
||||
void ClearCalcOrderCaches()
|
||||
{
|
||||
for (std::map<const ComputationNodePtr, std::list<ComputationNodePtr>>::iterator it = m_cacheEvalOrders.begin(); it != m_cacheEvalOrders.end(); ++it)
|
||||
{
|
||||
for (auto iter2 = m_cacheEvalOrders[it->first].begin(); iter2 != m_cacheEvalOrders[it->first].end(); iter2++)
|
||||
{
|
||||
(*iter2)->clearCache();
|
||||
}
|
||||
}
|
||||
m_cacheEvalOrders.clear();
|
||||
m_cacheGradientCalcOrders.clear();
|
||||
}
|
||||
|
@ -2043,6 +2050,7 @@ namespace Microsoft { namespace MSR { namespace CNTK {
|
|||
void FormRecurentLoops(const ComputationNodePtr rootNode)
|
||||
{
|
||||
std::vector<ComputationNodePtr> sourceLoopNodes;
|
||||
|
||||
getStrongSCC(rootNode);
|
||||
std::list<ComputationNodePtr>& nodes = GetEvalOrder(rootNode, sourceLoopNodes);
|
||||
std::list<ComputationNodePtr> nodesForGrad;
|
||||
|
|
|
@ -237,6 +237,16 @@ namespace Microsoft { namespace MSR { namespace CNTK {
|
|||
m_indexInLoop = index;
|
||||
}
|
||||
|
||||
void clearCache()
|
||||
{
|
||||
m_loopId = -1;
|
||||
m_visitedOrder = -1;
|
||||
m_index = -1;
|
||||
m_lowlink = -1;
|
||||
m_indexInLoop = 0;
|
||||
m_visited = false;
|
||||
m_inStack = false;
|
||||
}
|
||||
size_t GetIndex()
|
||||
{
|
||||
return m_index;
|
||||
|
|
Загрузка…
Ссылка в новой задаче