MCPcopy Create free account
hub / github.com/alibaba/MNN / _Loop

Function _Loop

express/NeuralNetWorkOp.cpp:1917–1944  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1915}
1916
1917VARPS _Loop(VARPS x, const std::string& submoduleName) {
1918 auto subgraph = ExecutorScope::Current()->findSubGraph(submoduleName);
1919 if (nullptr == subgraph) {
1920 MNN_ERROR("Loop Error: Can't find submoduleName: %s\n", submoduleName.c_str());
1921 return VARPS{};
1922 }
1923 auto info = subgraph->info.get();
1924 if (info->inputs.size() != x.size()) {
1925 MNN_ERROR("Loop Error: input number not match: x: %d : submodule: %d\n", (int)x.size(), (int)info->inputs.size());
1926 return VARPS{};
1927 }
1928 std::unique_ptr<MNN::OpT> op(new MNN::OpT);
1929 op->type = MNN::OpType_While;
1930 op->main.type = OpParameter_WhileParam;
1931 auto param = new MNN::WhileParamT;
1932 op->main.value = param;
1933 param->body_graph = submoduleName;
1934 // Body Input: 2 + N, Body Output: 1 + N + K, Op output: N + K
1935 int N = (int)info->inputs.size() - 2;
1936 int K = (int)info->outputs.size() - N - 1;
1937 MNN_ASSERT(info->inputs.size() >= 2);
1938 EXPRP expr = Expr::create(op.get(), x, N+K);
1939 VARPS outputs(N+K);
1940 for (int i=0; i<N+K; ++i) {
1941 outputs[i] = Variable::create(expr, i);
1942 }
1943 return outputs;
1944}
1945
1946
1947VARP _ROIPooling(VARP input, VARP roi, int pooledHeight, int pooledWidth, float spatialScale, bool outputGrad, VARP backwardDiff) {

Callers 1

runMethod · 0.85

Calls 5

findSubGraphMethod · 0.80
createFunction · 0.50
c_strMethod · 0.45
getMethod · 0.45
sizeMethod · 0.45

Tested by 1

runMethod · 0.68