reading-text-in-the-wild icon indicating copy to clipboard operation
reading-text-in-the-wild copied to clipboard

AttributeError: 'module' object has no attribute 'custom_spatial_2d_padding'

Open fgarcd03 opened this issue 7 years ago • 11 comments

Hi, I'm getting this error when running 'make_keras_charnet_model.py'. I have the same version of Keras and Theano, and i updated the Keras as it's said in the readme:

runfile('/home/fer/Documentos/reading-text-in-the-wild-master/DICT2/extract_dictnet_weights.py',` wdir='/home/fer/Documentos/reading-text-in-the-wild-master/DICT2')

runfile('/home/fer/Documentos/reading-text-in-the-wild-master/CHAR2/extract_charnet_weights.py', wdir='/home/fer/Documentos/reading-text-in-the-wild-master/CHAR2')

runfile('/home/fer/Documentos/reading-text-in-the-wild-master/CHAR2/make_keras_charnet_model.py', wdir='/home/fer/Documentos/reading-text-in-the-wild-master/CHAR2')
Using TensorFlow backend.
Traceback (most recent call last):

  File "<ipython-input-3-eb1114016b7c>", line 1, in <module>
    runfile('/home/fer/Documentos/reading-text-in-the-wild-master/CHAR2/make_keras_charnet_model.py', wdir='/home/fer/Documentos/reading-text-in-the-wild-master/CHAR2')

  File "/home/fer/anaconda2/lib/python2.7/site-packages/spyder/utils/site/sitecustomize.py", line 880, in runfile
    execfile(filename, namespace)

  File "/home/fer/anaconda2/lib/python2.7/site-packages/spyder/utils/site/sitecustomize.py", line 94, in execfile
    builtins.execfile(filename, *where)

  File "/home/fer/Documentos/reading-text-in-the-wild-master/CHAR2/make_keras_charnet_model.py", line 92, in <module>
    model.compile(loss='categorical_crossentropy', optimizer=sgd)

  File "/home/fer/anaconda2/lib/python2.7/site-packages/keras/models.py", line 507, in compile
    self.y_train = self.get_output(train=True)

  File "/home/fer/anaconda2/lib/python2.7/site-packages/keras/layers/containers.py", line 130, in get_output
    return self.layers[-1].get_output(train)

  File "/home/fer/anaconda2/lib/python2.7/site-packages/keras/layers/core.py", line 1030, in get_output
    X = self.get_input(train)

  File "/home/fer/anaconda2/lib/python2.7/site-packages/keras/layers/core.py", line 241, in get_input
    previous_output = self.previous.get_output(train=train)

  File "/home/fer/anaconda2/lib/python2.7/site-packages/keras/layers/core.py", line 703, in get_output
    X = self.get_input(train)

  File "/home/fer/anaconda2/lib/python2.7/site-packages/keras/layers/core.py", line 241, in get_input
    previous_output = self.previous.get_output(train=train)

  File "/home/fer/anaconda2/lib/python2.7/site-packages/keras/layers/core.py", line 1030, in get_output
    X = self.get_input(train)

  File "/home/fer/anaconda2/lib/python2.7/site-packages/keras/layers/core.py", line 241, in get_input
    previous_output = self.previous.get_output(train=train)

  File "/home/fer/anaconda2/lib/python2.7/site-packages/keras/layers/core.py", line 703, in get_output
    X = self.get_input(train)

  File "/home/fer/anaconda2/lib/python2.7/site-packages/keras/layers/core.py", line 241, in get_input
    previous_output = self.previous.get_output(train=train)

  File "/home/fer/anaconda2/lib/python2.7/site-packages/keras/layers/core.py", line 1030, in get_output
    X = self.get_input(train)

  File "/home/fer/anaconda2/lib/python2.7/site-packages/keras/layers/core.py", line 241, in get_input
    previous_output = self.previous.get_output(train=train)

  File "/home/fer/anaconda2/lib/python2.7/site-packages/keras/layers/core.py", line 900, in get_output
    X = self.get_input(train)

  File "/home/fer/anaconda2/lib/python2.7/site-packages/keras/layers/core.py", line 241, in get_input
    previous_output = self.previous.get_output(train=train)

  File "/home/fer/anaconda2/lib/python2.7/site-packages/keras/layers/convolutional.py", line 310, in get_output
    X = self.get_input(train)

  File "/home/fer/anaconda2/lib/python2.7/site-packages/keras/layers/core.py", line 241, in get_input
    previous_output = self.previous.get_output(train=train)

  File "/home/fer/anaconda2/lib/python2.7/site-packages/keras/layers/convolutional.py", line 683, in get_output
    X = self.get_input(train)

  File "/home/fer/anaconda2/lib/python2.7/site-packages/keras/layers/core.py", line 241, in get_input
    previous_output = self.previous.get_output(train=train)

File "/home/fer/anaconda2/lib/python2.7/site-packages/keras/layers/convolutional.py", line 1225, in get_output
    return K.custom_spatial_2d_padding(X, padding=self.padding,

AttributeError: 'module' object has no attribute 'custom_spatial_2d_padding'

fgarcd03 avatar May 19 '17 21:05 fgarcd03

So this is not finding the custom_spatial_2d_padding function that should have been added to Keras.

Can you confirm that running

import keras
from keras import custom_spatial_2d_padding

produces no errors?

mathDR avatar May 19 '17 23:05 mathDR

It's giving me an error:

>>> import keras
>>> from keras import custom_spatial_2d_padding
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: cannot import name custom_spatial_2d_padding

Moreover, i forgoted to say that I'm using spyder to run the files althougt it gives me the same error as when I'm running it in the terminal

fgarcd03 avatar May 20 '17 09:05 fgarcd03

So when you import keras, it is not finding the new CustomZeroPadding2D() class you added to keras/layers/convolutional.py nor the custom_spatial_2d_padding() function you added to keras/backend/theano_backend.py

Did you recompile keras after adding the new functionality?

mathDR avatar May 20 '17 15:05 mathDR

No, but I did it and I'm getting the same error

fgarcd03 avatar May 20 '17 23:05 fgarcd03

@mathDR @fgarcd03 I'm also getting the same error. Were you able to resolve it? I have Keras=0.3.3 and Theano=0.8.1

leifsyliongka avatar May 30 '17 14:05 leifsyliongka

@leifsyliongka Can you state what you did when augmenting Keras 0.3.3?

mathDR avatar May 30 '17 16:05 mathDR

@mathDR I'm using the virtualenv setup in Ubuntu 16.04 for Tensorflow v1.0.1, and then I used pip to install Keras and Theano using the ff. command: pip install keras==0.3.3 theano==0.8.1

After which, I copied the modified Keras convolution.py and theano_backend.py to keras/layers/ and keras/backend/, respectively.

leifsyliongka avatar May 31 '17 02:05 leifsyliongka

@leifsyliongka Okay, pip installing the right keras then copying the files is not enough. After copying the modified files, you need to cd to your keras directory and reinstall. To do so, try

pip install -e .

while inside the keras directory.

What is happening is that the keras egg files you installed only have the unmodified versions.

mathDR avatar May 31 '17 16:05 mathDR

The pip version doesn't have the setup.py in its directory so I can't do the the: pip install -e . command. So I uninstalled it, and downloaded Keras from https://testpypi.python.org/pypi/Keras/0.3.3. Then I overwritten the tweak files and did the install command from there.

I also deleted the *.pyc files of convolution.py and theano_backend.py to force it to recompile. What I found out though is that the theano_backend.py didn't compile. I also tried importing the non-customize functions and Keras wasn't able to find it too. I think this is causing the problem.

from keras import squeeze
from keras import spatial_2d_padding

leifsyliongka avatar Jun 01 '17 04:06 leifsyliongka

Ok, I've managed to solve the issue. As it turns out, Keras, by default, uses Tensorflow as its backend. You'll have to force it to use Theano. I followed the instructions in https://keras.io/backend/ on how to do so and modified my $HOME/.keras/keras.json to:

{
    "image_dim_ordering": "th",
    "epsilon": 1e-07,
    "floatx": "float32",
    "image_data_format": "channels_last",
    "backend": "theano"
}

Then I added from keras import backend as K in the make_keras_charnet_model.py file. After that I was able to run python make_keras_charnet_model.py and produce the char2_architecture.json file.

leifsyliongka avatar Jun 01 '17 06:06 leifsyliongka

@leifsyliongka Great catch! I forgot that Keras switched to TF as default. I will update the README

mathDR avatar Jun 01 '17 16:06 mathDR