web-dev-qa-db-ja.com

AttributeError: 'Node'オブジェクトには属性 'output_masks'がありません

Kerasの事前学習済みモデルVGG16を使用します。問題は、GPUを使用するようにtensorflowを構成した後、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:ケラス(2.2.2)とテンソルフロー(1.10.0rc1)があります。また、keras 2.2.0と同じエラーを試しました。問題は、私が使用するpython環境は、事前学習されていない他のNNで動作することです。

EDIT2:2つの自家製モデルを接続できます。 VGG16だけでなく、事前に訓練されたものに問題があるだけです。

6
Saroten

Tf.keras.layersまたはtf.keras.applicationsまたはtensorflow.kerasから他のkerasモジュールをインポートし、これらのオブジェクトを、バージョンなどに基づいて互換性のない「純粋な」kerasパッケージのオブジェクトと混合する可能性があります。 「純粋な」kerasモジュールからすべてをインポートして実行できるかどうかを確認することをお勧めします。デバッグ中にtf.kerasを使用しないでください。必ずしも互換性があるとは限りません。私は同じ問題を抱えていましたが、この解決策は私のために働いています。

18

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

4
ShusenTang

同様の問題がありましたが、アーキテクチャが異なりました。人々が示唆したように、kerosとtensorflow.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も使用しないようにしてください。それが役立つことを願っています。)また、Tensorflow 1.10.0でKeras 2.2.4を使用しました。

0
Janusz Maj