Caffe2Ops ret;
auto* c2_op = ret.ops.Add();
const auto* value = onnx_node->attributes.get<const TensorProto*>("value");
- BuildTensorFillingOp(c2_op, *value, onnx_node->node.output(0), onnx_node->node.input(0));
+ if (value) {
+ BuildTensorFillingOp(c2_op, *value, onnx_node->node.output(0), onnx_node->node.input(0));
+ } else {
+ c2_op->set_type("ConstantFill");
+ c2_op->add_input(onnx_node->node.input(0));
+ c2_op->add_output(onnx_node->node.output(0));
+ auto c2_input_as_shape = c2_op->add_arg();
+ c2_input_as_shape->set_name("input_as_shape");
+ c2_input_as_shape->set_i(1);
+ }
return ret;
}
concated_dims->addInput(unsqueezed_batch_size->outputs()[0]);
concated_dims->addInput(hidden_size->outputs()[0]);
- Node* constant_fill = graph->create(onnx::ConstantFill, 1);
- constant_fill->insertBefore(n);
- constant_fill->i_(attr::input_as_shape, 1);
- constant_fill->addInput(concated_dims->outputs()[0]);
+ Node* constant_of_shape = graph->create(onnx::ConstantOfShape, 1);
+ constant_of_shape->insertBefore(n);
+ constant_of_shape->addInput(concated_dims->outputs()[0]);
+ n->replaceInput(input_index, constant_of_shape->outputs()[0]);
- n->replaceInput(input_index, constant_fill->outputs()[0]);
if (initial_state->uses().size() == 0) {
initial_state->node()->destroy();
}
@parse_args('v', 'i', 'v', 'v')
def zeros_like(g, input, dtype, layout, device):
- return g.op("ConstantLike", input, dtype_i=scalar_type_to_onnx[dtype], value_f=0.0)
+ shape = g.op("Shape", input)
+ return g.op("ConstantOfShape", shape,
+ value_t=torch.tensor(0, dtype=scalar_type_to_pytorch_type[dtype]))
@parse_args('v', 'i', 'v', 'v')
@parse_args('v', 'i', 'v', 'v')
def ones_like(g, input, dtype, layout, device):
- return g.op("ConstantLike", input, dtype_i=scalar_type_to_onnx[dtype], value_f=1.0)
+ shape = g.op("Shape", input)
+ return g.op("ConstantOfShape", shape,
+ value_t=torch.tensor(1, dtype=scalar_type_to_pytorch_type[dtype]))
def full(g, sizes, value, dtype, layout, device):
@parse_args('v', 'f', 'i', 'v', 'v')
def full_like(g, input, fill_value, dtype, layout, device):
- return g.op("ConstantLike", input, dtype_i=scalar_type_to_onnx[dtype], value_f=fill_value)
+ shape = g.op("Shape", input)
+ return g.op("ConstantOfShape", shape,
+ value_t=torch.tensor(fill_value, dtype=scalar_type_to_pytorch_type[dtype]))
@parse_args('v', 'v', 'v', 'v', 'i')