【问题标题】:AttributeError: 'Node' object has no attribute 'output_masks'AttributeError:“节点”对象没有属性“输出掩码”
【发布时间】:2019-01-20 03:17:27
【问题描述】:

我使用 Keras 预训练模型 VGG16。问题是,在将 tensorflow 配置为使用 GPU 后,我得到了一个以前使用 CPU 时没有的错误。

错误如下:

    Traceback (most recent call last):
  File "/home/guillaume/Documents/Allianz/ConstatOrNotConstatv3/train_network.py",      line 109, in <module>
    model = LeNet.build(width=100, height=100, depth=3, classes=5)
  File "/home/guillaume/Documents/Allianz/ConstatOrNotConstatv3/lenet.py", line 39,    in build
    output = model(pretrainedOutput)
  File "/usr/local/lib/python3.6/dist-packages/keras/engine/base_layer.py", line 443, in __call__
    previous_mask = _collect_previous_mask(inputs)
  File "/usr/local/lib/python3.6/dist-packages/keras/engine/base_layer.py", line 1311, in _collect_previous_mask
mask = node.output_masks[tensor_index]
  AttributeError: 'Node' object has no attribute 'output_masks'

执行此代码后我得到它:

    pretrained_model = VGG16(
        include_top=False,
        input_shape=(height, width, depth),
        weights='imagenet'
    )
    for layer in pretrained_model.layers:
        layer.trainable = False

    model = Sequential()
    # first (and only) set of FC => RELU layers
    model.add(Flatten())
    model.add(Dense(200, activation='relu'))
    model.add(Dropout(0.5))
    model.add(BatchNormalization())
    model.add(Dense(400, activation='relu'))
    model.add(Dropout(0.5))
    model.add(BatchNormalization())

    # softmax classifier
    model.add(Dense(classes,activation='softmax'))

    pretrainedInput = pretrained_model.input
    pretrainedOutput = pretrained_model.output
    output = model(pretrainedOutput)
    model = Model(pretrainedInput, output)

EDIT1:我有 keras (2.2.2) 和 tensorflow(1.10.0rc1)。我也试过 keras 2.2.0 和同样的错误。问题是我使用的 python 环境适用于其他非预训练的 NN。

EDIT2:我可以连接两个自制模型。只有预训练的有问题,而不仅仅是 VGG16。

【问题讨论】:

  • 我运行这段代码没有任何错误。 keras 版本(2.2.0)和 tensorflow 版本(1.8.0)。我也在用gpu
  • 我有 keras (2.2.2) 和 tensorflow(1.10.0rc1)。我也试过 keras 2.2.0 和同样的错误。问题是我使用的 python 环境适用于其他非预训练的 NN。

标签: python tensorflow keras pre-trained-model


【解决方案1】:

您可能从tensorflow.keras 导入tf.keras.layerstf.keras.applications 或其他keras 模块,并将这些对象与“纯”keras 包中的对象混合,该包不兼容,具体取决于版本等。

我建议您看看是否可以从“纯”keras 模块导入和运行所有内容;调试时不要使用tf.keras,因为它们不一定兼容。我遇到了同样的问题,这个解决方案对我有用。

【讨论】:

    【解决方案2】:

    当我同时导入 keras 和 tenerflow.keras 时,我遇到了同样的错误: from tensorflow.keras.optimizers import Adam from keras.utils import multi_gpu_model

    我将代码更改为以下内容后解决了这个问题: from tensorflow.keras.optimizers import Adam from tensorflow.keras.utils import multi_gpu_model

    【讨论】:

      【解决方案3】:

      我有类似的问题,但是用不同的架构。随着人们的建议,重要的是与TensoRFlow.keras混合Keras,因此尝试交换代码:

      from keras.preprocessing import image
      from keras.models import Model
      from keras.layers import Dense, GlobalAveragePooling2D
      from keras import backend as K
      

      到:

      from tensorflow.keras.preprocessing import image 
      from tensorflow.keras.models import Model 
      from tensorflow.keras.layers import Dense, GlobalAveragePooling2D 
      from tensorflow.keras import backend as K
      

      还要确保,您不使用Keras.Something在您的代码中(不仅导入),希望它有所帮助:) 此外,我使用了keras 2.2.4与tensorflow 1.10.0

      【讨论】:

        【解决方案4】:

        如果您要从 tensorflow.keras.applications.vgg16 导入 VGG16,则从 tensorflow 导入所有模型

        from tensorflow.keras.applications.vgg16 import VGG16
        from tensorflow.keras.models import Sequential
        from tensorflow.keras.layers import Dense, Dropout, Flatten
        

        elif 你是从keras 导入的,比如:

        from keras.applications.vgg16 import VGG16
        

        然后使用来自keras的模型导入

        from keras.models import Sequential
        from keras.layers import Dense
        

        【讨论】:

          猜你喜欢
          • 2019-04-30
          • 2019-02-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-07-22
          • 1970-01-01
          • 1970-01-01
          • 2021-04-28
          相关资源
          最近更新 更多