生成新的ExprNode(或其子类如CallNode)时,有些注意事项:
1 如果生成该ExprNode的args的shape有变化,那么需要推断其类型,一般的,可如下调用:
Expr new_dense = makeDense(call_args, dense_param, dense_op);
new_dense->checked_type_ = CallNode_InferType(new_dense);
其中,CallNode_InferType是一个自定义的类型推断的函数,定义如下:
/*! \brief type inference*/
Type CallNode_InferType(const Expr& expr) {
auto mod = relay::ModuleNode::FromExpr(expr);
mod = relay::transform::InferType()(mod);
auto type_fx = mod->Lookup("main");
return type_fx->ret_type;
}
详细例子参考src/relay/pass/vacc/data_alignment.cc