onnx-tensorflow icon indicating copy to clipboard operation
onnx-tensorflow copied to clipboard

ValueError: Negative dimension size caused by subtracting 3 from 2 for 'convolution_15' (op: 'Conv2D') with input shapes: [1,2,2,512], [3,3,512,512].

Open tom888888 opened this issue 6 years ago • 5 comments

I use this example from https://github.com/onnx/tutorials/blob/master/tutorials/CntkOnnxExport.ipynb to export vgg19.onnx with CNTK and run in Tensorflow ,this error occurs I did run programming with GPU on jupyter noebook and I download the vgg19 model in https://www.cntk.ai/Models/Caffe_Converted/VGG19_ImageNet_Caffe.model

this is my code (export model)

import cntk as C
model_path = "/root/VGG19_ImageNet_Caffe.model"
z = C.Function.load(model_path, device=C.device.cpu())
z.save("vgg19.onnx", format=C.ModelFormat.ONNX)

Error message

/usr/local/lib/python3.6/dist-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.
  from ._conv import register_converters as _register_converters

InvalidArgumentErrorTraceback (most recent call last)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/ops.py in _create_c_op(graph, node_def, inputs, control_inputs)
   1566   try:
-> 1567     c_op = c_api.TF_FinishOperation(op_desc)
   1568   except errors.InvalidArgumentError as e:

InvalidArgumentError: Negative dimension size caused by subtracting 3 from 2 for 'convolution_15' (op: 'Conv2D') with input shapes: [1,2,2,512], [3,3,512,512].

During handling of the above exception, another exception occurred:

ValueErrorTraceback (most recent call last)
<ipython-input-1-c9e538340097> in <module>()
      2 from onnx_tf.backend import prepare
      3 model = onnx.load('vgg19.onnx')
----> 4 tf_rep = prepare(model)

/AFS/onnx-tensorflow/onnx_tf/backend.py in prepare(cls, model, device, **kwargs)
    343 
    344     predict_net = (cls.onnx_graph_to_tensorflow_net(
--> 345         model.graph, opset=model.opset_import[0].version))
    346 
    347     return TensorflowRep(predict_net)

/AFS/onnx-tensorflow/onnx_tf/backend.py in onnx_graph_to_tensorflow_net(cls, graph_def, opset)
    319 
    320         output_ops = cls._onnx_node_to_tensorflow_op(
--> 321             node, tensor_dict, opset=opset)
    322         curr_node_output_map = list(zip(node.outputs, output_ops))
    323         tensor_dict = dict(list(tensor_dict.items()) + curr_node_output_map)

/AFS/onnx-tensorflow/onnx_tf/backend.py in _onnx_node_to_tensorflow_op(cls, node, input_dict, opset)
    398     if hasattr(backend, handler_name):
    399       method_to_call = getattr(backend, handler_name)
--> 400       return method_to_call(node, input_dict)
    401     elif op_name_lowered in ONNX_OP_TO_TF_OP.keys():
    402       return backend.handle_trivial(node, input_dict)

/AFS/onnx-tensorflow/onnx_tf/backends/backend_v1.py in handle_conv(cls, node, input_dict)
    472   @classmethod
    473   def handle_conv(cls, node, input_dict):
--> 474     return cls._conv(node, input_dict)
    475 
    476   @classmethod

/AFS/onnx-tensorflow/onnx_tf/backends/backend_v1.py in _conv(cls, node, input_dict, transpose)
    442               dilation_rate=dilations,
    443               data_format=compute_format)
--> 444           for (x, weight) in zip(xs, weight_groups)
    445       ]
    446 

/AFS/onnx-tensorflow/onnx_tf/backends/backend_v1.py in <listcomp>(.0)
    442               dilation_rate=dilations,
    443               data_format=compute_format)
--> 444           for (x, weight) in zip(xs, weight_groups)
    445       ]
    446 

/usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/nn_ops.py in convolution(input, filter, padding, strides, dilation_rate, name, data_format)
    778         name=name,
    779         data_format=data_format)
--> 780     return op(input, filter)
    781 
    782 

/usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/nn_ops.py in __call__(self, inp, filter)
    866 
    867   def __call__(self, inp, filter):  # pylint: disable=redefined-builtin
--> 868     return self.conv_op(inp, filter)
    869 
    870 

/usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/nn_ops.py in __call__(self, inp, filter)
    518 
    519   def __call__(self, inp, filter):  # pylint: disable=redefined-builtin
--> 520     return self.call(inp, filter)
    521 
    522 

/usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/nn_ops.py in __call__(self, inp, filter)
    202         padding=self.padding,
    203         data_format=self.data_format,
--> 204         name=self.name)
    205 
    206 

/usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/gen_nn_ops.py in conv2d(input, filter, strides, padding, use_cudnn_on_gpu, data_format, dilations, name)
    954         "Conv2D", input=input, filter=filter, strides=strides,
    955         padding=padding, use_cudnn_on_gpu=use_cudnn_on_gpu,
--> 956         data_format=data_format, dilations=dilations, name=name)
    957     _result = _op.outputs[:]
    958     _inputs_flat = _op.inputs

/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/op_def_library.py in _apply_op_helper(self, op_type_name, name, **keywords)
    785         op = g.create_op(op_type_name, inputs, output_types, name=scope,
    786                          input_types=input_types, attrs=attr_protos,
--> 787                          op_def=op_def)
    788       return output_structure, op_def.is_stateful, op
    789 

/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/ops.py in create_op(self, op_type, inputs, dtypes, input_types, name, attrs, op_def, compute_shapes, compute_device)
   3390           input_types=input_types,
   3391           original_op=self._default_original_op,
-> 3392           op_def=op_def)
   3393 
   3394       # Note: shapes are lazily computed with the C API enabled.

/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/ops.py in __init__(self, node_def, g, inputs, output_types, control_inputs, input_types, original_op, op_def)
   1732           op_def, inputs, node_def.attr)
   1733       self._c_op = _create_c_op(self._graph, node_def, grouped_inputs,
-> 1734                                 control_input_ops)
   1735     else:
   1736       self._c_op = None

/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/ops.py in _create_c_op(graph, node_def, inputs, control_inputs)
   1568   except errors.InvalidArgumentError as e:
   1569     # Convert to ValueError for backwards compatibility.
-> 1570     raise ValueError(str(e))
   1571 
   1572   return c_op

ValueError: Negative dimension size caused by subtracting 3 from 2 for 'convolution_15' (op: 'Conv2D') with input shapes: [1,2,2,512], [3,3,512,512].

this is my code (import with Tensorflow)

import onnx
from onnx_tf.backend import prepare
model = onnx.load('vgg19.onnx')
tf_rep = prepare(model)

my Python Environment

python 3.6.3

(1)onnx

apt-get install protobuf-compiler libprotoc-dev
git clone --recursive https://github.com/onnx/onnx.git
export ONNX_ML=1
apt-get install cmake gcc g++
apt-get install protobuf-compiler libprotoc-dev
pip install -e onnx/
python -c "import onnx"

(2)onnx_tensorflow

git clone https://github.com/onnx/onnx-tensorflow.git
cd onnx-tensorflow 
pip install -e .

Could you please advice how to solve out this error Thank you

tom888888 avatar May 11 '18 09:05 tom888888