TensorFlow / Keras: Как получить отсутствующие модели (ResNet101, ResNeXt и т. Д.) Из модуля приложений Keras? - PullRequest
0 голосов
/ 22 июня 2019

Несколько документированных приложений Keras отсутствуют в моей (современной) установке Keras и установке TensorFlow 1.10 Keras API. Я импортирую модуль приложений Keras как предложено и использую его следующим образом:

from keras import applications
resnet = applications.ResNeXt101(include_top=False, weights='imagenet', input_shape=(SCALED_HEIGHT, SCALED_WIDTH, 3), pooling=None)

Я тоже пробовал

resnet = applications.resnext.ResNeXt101(include_top=False, weights='imagenet', input_shape=(SCALED_HEIGHT, SCALED_WIDTH, 3), pooling=None)

Но в обоих случаях я получаю один и тот же тип ошибки:

AttributeError: module 'keras.applications' has no attribute 'ResNeXt101'

Печать help(applications) Выход:

Help on package keras.applications in keras:

NAME
    keras.applications

PACKAGE CONTENTS
    densenet
    imagenet_utils
    inception_resnet_v2
    inception_v3
    mobilenet
    mobilenet_v2
    mobilenetv2
    nasnet
    resnet50
    vgg16
    vgg19
    xception

FUNCTIONS
    DenseNet121 = wrapper(*args, **kwargs)
    DenseNet169 = wrapper(*args, **kwargs)
    DenseNet201 = wrapper(*args, **kwargs)
    InceptionResNetV2 = wrapper(*args, **kwargs)
    InceptionV3 = wrapper(*args, **kwargs)
    MobileNet = wrapper(*args, **kwargs)
    MobileNetV2 = wrapper(*args, **kwargs)
    NASNetLarge = wrapper(*args, **kwargs)
    NASNetMobile = wrapper(*args, **kwargs)
    ResNet50 = wrapper(*args, **kwargs)
    VGG16 = wrapper(*args, **kwargs)
    VGG19 = wrapper(*args, **kwargs)
    Xception = wrapper(*args, **kwargs)
    keras_modules_injection(base_fun)

, который показывает, что модели изначально не присутствуют в моей установке. Почему бы и нет? Они также не упакованы в API Keras от TensorFlow.

Я попытался скопировать файлы из хранилища GitHub приложений Keras и вставить их в site-packages/keras/applications/, но это привело к следующей трассировке стека:

File "myscript.py", line 517, in get_fpn
    resnet = applications.resnext.ResNeXt101(include_top=False, weights='imagenet', input_shape=(SCALED_HEIGHT, SCALED_WIDTH, 3), pooling=None)
  File "site-packages/keras/applications/resnet_common.py", line 575, in ResNeXt101
    **kwargs)
  File "site-packages/keras/applications/resnet_common.py", line 348, in ResNet
    data_format=backend.image_data_format(),
AttributeError: 'NoneType' object has no attribute 'image_data_format'

Есть идеи как это исправить? Почему они не включены и не работают в стандартных установках Keras или TensorFlow? Почему документация не объясняет это?

1 Ответ

1 голос
/ 22 июня 2019
  • Причина проблемы:

Объект backend равен None в строке 348. Мне кажется, вы пробовали что-то вроде этого:

>>> from keras_applications import resnext
>>> resnext.ResNeXt101(weights=None)

Информация backend вводится из keras.applications в keras_applications через декоратор keras_modules_injection.

https://github.com/keras-team/keras/blob/c658993cf596fbd39cf800873bc457e69cfb0cdb/keras/applications/resnext.py#L17

  • Порядок решения проблемы:

Убедитесь, что версии приложений keras & keras соответствуют следующим:

>>pip list |grep Keras
Keras                  2.2.4
Keras-Applications     1.0.8

Если это не так, обновите, используя

>>pip install --upgrade keras keras-applications

Обновите изменения из этого запроса извлечения, https://github.com/keras-team/keras/pull/11203/files в site-packages/keras/applications

from keras import applications
resnext = applications.resnext.ResNeXt101(include_top=False, weights=None, input_shape=(299,299,3))
print(type(resnext))
...