Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AttributeError: 'tuple' object has no attribute 'ndims' #137

Open
LamyaMohaned opened this issue Dec 7, 2021 · 0 comments
Open

AttributeError: 'tuple' object has no attribute 'ndims' #137

LamyaMohaned opened this issue Dec 7, 2021 · 0 comments
Labels

Comments

@LamyaMohaned
Copy link

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?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant