Как загрузить модель, построенную в Keras, используя theano в качестве бэкэнда, если модель была построена с использованием Tensorflow - PullRequest
0 голосов
/ 02 марта 2019

У меня есть модель, созданная с использованием ретинанета для обнаружения объектов, которая была построена с использованием Keras на бэкэнде Tensorflow.Но теперь я хочу использовать Theano для тестирования, так как theano более поточно-ориентирован и позволяет выполнять несколько прогнозов для одной и той же модели.Однако, когда я пытаюсь запустить свой код, используя theano в качестве бэкэнда, я получаю следующую ошибку:

TypeError: Failed to convert object of type <class 'theano.tensor.var.TensorVariable'> to Tensor. Contents: Elemwise{add,no_inplace}.0. Consider casting elements to a supported type

Полная трассировка стека для ошибки:

Traceback (most recent call last):
  File "/data/home/ubuntu/myproject/myprojectenv/lib/python3.5/site-packages/tensorflow/python/framework/tensor_util.py", line 517, in make_tensor_proto
    str_values = [compat.as_bytes(x) for x in proto_values]
  File "/data/home/ubuntu/myproject/myprojectenv/lib/python3.5/site-packages/tensorflow/python/framework/tensor_util.py", line 517, in <listcomp>
    str_values = [compat.as_bytes(x) for x in proto_values]
  File "/data/home/ubuntu/myproject/myprojectenv/lib/python3.5/site-packages/tensorflow/python/util/compat.py", line 67, in as_bytes
    (bytes_or_text,))
TypeError: Expected binary or unicode string, got Elemwise{add,no_inplace}.0

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "convert_to_theano.py", line 8, in <module>
    model = load_model('retinanet_models/models/tlc_all_new30.h5', backbone_name='resnet50')
  File "/data/home/ubuntu/myproject/keras_retinanet/models/__init__.py", line 76, in load_model
    model = keras.models.load_model(filepath, custom_objects=backbone(backbone_name).custom_objects)
  File "/data/home/ubuntu/myproject/myprojectenv/lib/python3.5/site-packages/keras/engine/saving.py", line 261, in load_model
    model = model_from_config(model_config, custom_objects=custom_objects)
  File "/data/home/ubuntu/myproject/myprojectenv/lib/python3.5/site-packages/keras/engine/saving.py", line 335, in model_from_config
    return deserialize(config, custom_objects=custom_objects)
  File "/data/home/ubuntu/myproject/myprojectenv/lib/python3.5/site-packages/keras/layers/__init__.py", line 55, in deserialize
    printable_module_name='layer')
  File "/data/home/ubuntu/myproject/myprojectenv/lib/python3.5/site-packages/keras/utils/generic_utils.py", line 145, in deserialize_keras_object
    list(custom_objects.items())))
  File "/data/home/ubuntu/myproject/myprojectenv/lib/python3.5/site-packages/keras/engine/network.py", line 1046, in from_config
    process_node(layer, node_data)
  File "/data/home/ubuntu/myproject/myprojectenv/lib/python3.5/site-packages/keras/engine/network.py", line 1005, in process_node
    layer(input_tensors, **kwargs)
  File "/data/home/ubuntu/myproject/myprojectenv/lib/python3.5/site-packages/keras/engine/base_layer.py", line 460, in __call__
    output = self.call(inputs, **kwargs)
  File "/data/home/ubuntu/myproject/keras_retinanet/layers/_misc.py", line 82, in call
    return backend.resize_images(source, (target_shape[1], target_shape[2]))
  File "/data/home/ubuntu/myproject/keras_retinanet/backend/tensorflow_backend.py", line 38, in resize_images
    return tensorflow.image.resize_images(*args, **kwargs)
  File "/data/home/ubuntu/myproject/myprojectenv/lib/python3.5/site-packages/tensorflow/python/ops/image_ops_impl.py", line 893, in resize_images
    images = ops.convert_to_tensor(images, name='images')
  File "/data/home/ubuntu/myproject/myprojectenv/lib/python3.5/site-packages/tensorflow/python/framework/ops.py", line 1014, in convert_to_tensor
    as_ref=False)
  File "/data/home/ubuntu/myproject/myprojectenv/lib/python3.5/site-packages/tensorflow/python/framework/ops.py", line 1104, in internal_convert_to_tensor
    ret = conversion_func(value, dtype=dtype, name=name, as_ref=as_ref)
  File "/data/home/ubuntu/myproject/myprojectenv/lib/python3.5/site-packages/tensorflow/python/framework/constant_op.py", line 235, in _constant_tensor_conversion_function
    return constant(v, dtype=dtype, name=name)
  File "/data/home/ubuntu/myproject/myprojectenv/lib/python3.5/site-packages/tensorflow/python/framework/constant_op.py", line 214, in constant
    value, dtype=dtype, shape=shape, verify_shape=verify_shape))
  File "/data/home/ubuntu/myproject/myprojectenv/lib/python3.5/site-packages/tensorflow/python/framework/tensor_util.py", line 521, in make_tensor_proto
    "supported type." % (type(values), values))
TypeError: Failed to convert object of type <class 'theano.tensor.var.TensorVariable'> to Tensor. Contents: Elemwise{add,no_inplace}.0. Consider casting elements to a supported type.

Я уже знаю, как изменить файл .keras / keras.json, чтобы выбрать, какой бэкэнд будет работать нормально.Это дает использование Theano при запуске кода, поэтому я знаю, что он использует правильный бэкэнд

...