AttributeError: 'tuple' object has no attribute 'ndims'
LamyaMohaned opened this issue · 0 comments
Describe the bug
I want to convert nfnet (eca_nfnet_l2, dm_nfnet_f3) models from pytorch to keras. These models are implemented by timm. So, I used pytorch2keras package. Also, I tried converting the model first to onnx using torch.onnx then converting it to keras using keras2onnx alone. But, in the two cases I'm facing this error with onnx2keras:
AttributeError: 'tuple' object has no attribute 'ndims'
I've use these two packages in converting many pytorch models without any problems (resnet, densenet, resnext, efficientnet).
To Reproduce
Steps to reproduce the behavior:
model = dm_nfnet_f1(pretrained=True)
for parameter in model.parameters():
parameter.requires_grad = False
model.eval()
input_np = np.random.uniform(0, 1, (1, 3, 224, 224))
input_var = Variable(torch.FloatTensor(input_np))
k_model = pytorch_to_keras(modelB, input_var, [(3, 224, 224,)], verbose=True,change_ordering=False)
Screenshots
error message:
AttributeError Traceback (most recent call last)
<ipython-input-25-12ab5dd3bc2e> in <module>
----> 1 k_model = pytorch_to_keras(modelB, input_var, [(3, 224, 224,)], verbose=True,change_ordering=False)
~/anaconda3/envs/tf1/lib/python3.6/site-packages/pytorch2keras/converter.py in pytorch_to_keras(model, args, input_shapes, change_ordering, verbose, name_policy, use_optimizer, do_constant_folding)
81 k_model = onnx_to_keras(onnx_model=onnx_model, input_names=input_names,
82 input_shapes=input_shapes, name_policy=name_policy,
---> 83 verbose=verbose, change_ordering=change_ordering)
84
85 return k_model
~/anaconda3/envs/tf1/lib/python3.6/site-packages/onnx2keras/converter.py in onnx_to_keras(onnx_model, input_names, input_shapes, name_policy, verbose, change_ordering)
179 lambda_funcs,
180 node_name,
--> 181 keras_names
182 )
183 if isinstance(keras_names, list):
~/anaconda3/envs/tf1/lib/python3.6/site-packages/onnx2keras/reshape_layers.py in convert_transpose(node, params, layers, lambda_func, node_name, keras_name)
28 else:
29 permute = keras.layers.Permute(params['perm'][1:], name=keras_name)
---> 30 layers[node_name] = permute(layers[input_name])
31
32
~/anaconda3/envs/tf1/lib/python3.6/site-packages/tensorflow/python/keras/engine/base_layer.py in __call__(self, inputs, *args, **kwargs)
536 if not self.built:
537 # Build layer if applicable (if the `build` method has been overridden).
--> 538 self._maybe_build(inputs)
539 # We must set self.built since user defined build functions are not
540 # constrained to set self.built.
~/anaconda3/envs/tf1/lib/python3.6/site-packages/tensorflow/python/keras/engine/base_layer.py in _maybe_build(self, inputs)
1589 # Check input assumptions set before layer building, e.g. input rank.
1590 input_spec.assert_input_compatibility(
-> 1591 self.input_spec, inputs, self.name)
1592 input_list = nest.flatten(inputs)
1593 if input_list and self._dtype is None:
~/anaconda3/envs/tf1/lib/python3.6/site-packages/tensorflow/python/keras/engine/input_spec.py in assert_input_compatibility(input_spec, inputs, layer_name)
107 spec.min_ndim is not None or
108 spec.max_ndim is not None):
--> 109 if x.shape.ndims is None:
110 raise ValueError('Input ' + str(input_index) + ' of layer ' +
111 layer_name + ' is incompatible with the layer: '
AttributeError: 'tuple' object has no attribute 'ndims'
Desktop (please complete the following information):
- OS: Ubuntu 20.04
- keras-applications 1.0.8
- onnx 1.8.0
- onnx2keras 0.0.24
- pip 21.2.2
- python 3.6.13
- pytorch 1.10.0 cpu-only
- pytorch-mutex 1.0
- pytorch2keras 0.2.4
- setuptools 58.0.4
- tensorboard 1.13.1
- tensorflow 1.13.1
- tensorflow-estimator 1.13.0
- tensorflow-gpu 1.13.1
- timm 0.5.0
- torchaudio 0.10.0 cpu-only
- torchvision 0.11.1 cpu-only
- tornado 6.1
Additional context
I'm not sure if onnx2keras supports nfnet models, so do you recommend any other packages?