简体   繁体   English

使用keras和flask加载模型时出错

[英]Error while loading model using keras and flask

I'm writing a simple application using flask. 我正在使用flask编写一个简单的应用程序。 First I tried this: 首先,我尝试了这个:

def get_model():
    global model
    model = load_model('mobilenet.h5')
    print("** Model loaded!")

But I got an error: 但我得到一个错误:

Traceback (most recent call last):
  File "C:\Users\Agnieszka\Anaconda4\Scripts\flask-script.py", line 10, in <module>
    sys.exit(main())
  File "C:\Users\Agnieszka\Anaconda4\lib\site-packages\flask\cli.py", line 894, in main
    cli.main(args=args, prog_name=name)
  File "C:\Users\Agnieszka\Anaconda4\lib\site-packages\flask\cli.py", line 557, in main
    return super(FlaskGroup, self).main(*args, **kwargs)
  File "C:\Users\Agnieszka\Anaconda4\lib\site-packages\click\core.py", line 697, in main
    rv = self.invoke(ctx)
  File "C:\Users\Agnieszka\Anaconda4\lib\site-packages\click\core.py", line 1066, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "C:\Users\Agnieszka\Anaconda4\lib\site-packages\click\core.py", line 895, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "C:\Users\Agnieszka\Anaconda4\lib\site-packages\click\core.py", line 535, in invoke
    return callback(*args, **kwargs)
  File "C:\Users\Agnieszka\Anaconda4\lib\site-packages\click\decorators.py", line 64, in new_func
    return ctx.invoke(f, obj, *args[1:], **kwargs)
  File "C:\Users\Agnieszka\Anaconda4\lib\site-packages\click\core.py", line 535, in invoke
    return callback(*args, **kwargs)
  File "C:\Users\Agnieszka\Anaconda4\lib\site-packages\flask\cli.py", line 767, in run_command
    app = DispatchingApp(info.load_app, use_eager_loading=eager_loading)
  File "C:\Users\Agnieszka\Anaconda4\lib\site-packages\flask\cli.py", line 293, in __init__
    self._load_unlocked()
  File "C:\Users\Agnieszka\Anaconda4\lib\site-packages\flask\cli.py", line 317, in _load_unlocked
    self._app = rv = self.loader()
  File "C:\Users\Agnieszka\Anaconda4\lib\site-packages\flask\cli.py", line 372, in load_app
    app = locate_app(self, import_name, name)
  File "C:\Users\Agnieszka\Anaconda4\lib\site-packages\flask\cli.py", line 235, in locate_app
    __import__(module_name)
  File "C:\Users\Agnieszka\Desktop\noc-naukowcow\flask_apps\predict.py", line 32, in <module>
    get_model()
  File "C:\Users\Agnieszka\Desktop\noc-naukowcow\flask_apps\predict.py", line 19, in get_model
    model = tf.keras.models.load_model('mobilenet.h5')
  File "C:\Users\Agnieszka\Anaconda4\lib\site-packages\tensorflow\python\keras\engine\saving.py", line 249, in load_model
    optimizer_config, custom_objects=custom_objects)
  File "C:\Users\Agnieszka\Anaconda4\lib\site-packages\tensorflow\python\keras\optimizers.py", line 838, in deserialize
    printable_module_name='optimizer')
  File "C:\Users\Agnieszka\Anaconda4\lib\site-packages\tensorflow\python\keras\utils\generic_utils.py", line 194, in deserialize_keras_object
    return cls.from_config(cls_config)
  File "C:\Users\Agnieszka\Anaconda4\lib\site-packages\tensorflow\python\keras\optimizers.py", line 159, in from_config
    return cls(**config)
  File "C:\Users\Agnieszka\Anaconda4\lib\site-packages\tensorflow\python\keras\optimizers.py", line 471, in __init__
    super(Adam, self).__init__(**kwargs)
  File "C:\Users\Agnieszka\Anaconda4\lib\site-packages\tensorflow\python\keras\optimizers.py", line 68, in __init__
    'passed to optimizer: ' + str(k))
TypeError: Unexpected keyword argument passed to optimizer: name

Then I changed the code using tf.keras.models.load_model but this haven't helped. 然后,我使用tf.keras.models.load_model更改了代码,但这没有帮助。

The model was built in Colaboratory using keras 2.2.4 version. 该模型是使用keras 2.2.4版本在Colaboratory中构建的。 I've built the model as follows: 我建立模型如下:

from keras import backend as K

inputs = Input(shape=(96, 80, 3), name='input')


x = Conv2D(64, (3, 3), activation='relu')(inputs)
x = MaxPooling2D(pool_size=(2, 2))(x)
x = Dropout(0.25)(x)

x = Conv2D(128, (3, 3), activation='relu')(x)
x = MaxPooling2D(pool_size=(2, 2))(x)
x = Dropout(0.25)(x)

x = Conv2D(256, (3, 3), activation='relu')(x)
x = MaxPooling2D(pool_size=(2, 2))(x)
x = Dropout(0.25)(x)

x = Flatten()(x)
x = Dense(256, activation='relu')(x)
x = Dropout(0.5)(x)
x = Dense(35, activation='softmax')(x)

model = Model(inputs=inputs, outputs=x, name='CNN')



model.compile(optimizer=optimizer, loss=loss_fn, metrics=['acc'])

I wonder if the problem is due to optimaizer that I used (it was adam). 我想知道问题是否出在我使用的优化程序(是亚当)上。

Is there any solution for this? 有什么解决办法吗?

The error suggests that Unexpected keyword argument passed to optimizer: name . 该错误表明Unexpected keyword argument passed to optimizer: name Now as we know, the argument name is used in TensorFlow models to name a specific op or tensor. 现在我们知道,在TensorFlow模型中使用参数name来命名特定的op或张量。 TensorFlow has included Keras, but Keras still exists as a standalone package. TensorFlow包含Keras,但Keras仍作为独立软件包存在。

Maybe you have created a model using tf.keras but you are loading it using keras.models.load_model . 也许您已经使用tf.keras创建了一个模型,但是正在使用keras.models.load_model加载它。 The Keras packages can't recognize the TF argument. Keras软件包无法识别TF参数。

Maybe you can try to bring the whole process in TensorFlow by using methods from tf.keras . 也许您可以尝试使用tf.keras方法将整个过程引入TensorFlow。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM