AttributeError: 'Node' object has no attribute 'output_masks'
AttributeError: 'Node' object has no attribute 'output_masks'
我使用 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。
您可能从 tensorflow.keras
导入 tf.keras.layers
或 tf.keras.applications
或其他 keras
模块,并将这些对象与 "pure" keras
软件包,不兼容,基于版本等
我建议您查看是否可以导入 运行 "pure" keras
模块中的所有内容;调试时不要使用 tf.keras
,因为它们不一定兼容。我遇到了同样的问题,这个解决方案对我有用。
同时导入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
我遇到了类似的问题,但架构不同。正如人们建议的那样,重要的是不要将 keras 与 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(不仅是导入),希望对您有所帮助:)
另外,我使用 Keras 2.2.4 和 tensorflow 1.10.0
如果您要从 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
如果您从 keras
导入,例如:
from keras.applications.vgg16 import VGG16
然后使用来自 keras
的模型导入
from keras.models import Sequential
from keras.layers import Dense
我使用 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。
您可能从 tensorflow.keras
导入 tf.keras.layers
或 tf.keras.applications
或其他 keras
模块,并将这些对象与 "pure" keras
软件包,不兼容,基于版本等
我建议您查看是否可以导入 运行 "pure" keras
模块中的所有内容;调试时不要使用 tf.keras
,因为它们不一定兼容。我遇到了同样的问题,这个解决方案对我有用。
同时导入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
我遇到了类似的问题,但架构不同。正如人们建议的那样,重要的是不要将 keras 与 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(不仅是导入),希望对您有所帮助:) 另外,我使用 Keras 2.2.4 和 tensorflow 1.10.0
如果您要从 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
如果您从 keras
导入,例如:
from keras.applications.vgg16 import VGG16
然后使用来自 keras
from keras.models import Sequential
from keras.layers import Dense