python - keras微调报错 "' Node' object has no attribute 'output_masks"怎么解决?

标签 python machine-learning keras deep-learning conv-neural-network

我正在尝试设置一个简单的 CNN 微调 ResNet50 模型,如下所示:

import numpy as np
import cv2
from keras.models import Sequential, Model
from keras.layers import Dense, Activation, Conv2D, Flatten, GlobalAveragePooling2D, Dropout
from keras import optimizers
import os
from keras import applications
from keras.optimizers import SGD, Adam
from tensorflow.keras.applications.resnet50 import ResNet50
from keras.preprocessing.image import ImageDataGenerator

TRAIN_DIR = 'train/'
BATCH_SIZE = 32
NUM_EPOCHS = 5
width = 224
height = 224

base_model = ResNet50(weights='imagenet', include_top=True, input_shape=(224,224,3))
base_model.summary()
head_model = base_model.output
head_model = Dropout(0.5)(head_model)
head_model = Reshape(2049000, )(head_model)
head_model = Dense(1, activation="sigmoid")(head_model)

model = Model(inputs=base_model.input, outputs=head_model)

for layer in base_model.layers:
    layer.trainable = False
    
adam = Adam(lr=0.0001)
model.compile(optimizer= adam, loss='binary_crossentropy', metrics=['accuracy'])
#model.fit(train, labels, batch_size = 32, epochs=10)

train_datagen = ImageDataGenerator()
train_generator = train_datagen.flow_from_directory(TRAIN_DIR,
    target_size=(224, 224),
    batch_size=50,
    class_mode='binary')
model.fit_generator(train_generator, steps_per_epoch=100)

model.save("asd.h5")

当我运行它时,抛出这个错误:


  File "C:\Users\Junior\Anaconda\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 110, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "D:/octProject/train.py", line 46, in <module>
    head_model = Flatten()(head_model)

  File "C:\Users\Junior\Anaconda\lib\site-packages\keras\engine\base_layer.py", line 443, in __call__
    previous_mask = _collect_previous_mask(inputs)

  File "C:\Users\Junior\Anaconda\lib\site-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'
  • 在 train 文件夹中,我有 2 个子文件夹:Normal 和 Other,每个子文件夹有 11000 张图像。我能做些什么来处理这个问题?

最佳答案

您的导入有问题。您混淆了 kerastensorflow.keras。您还忘记导入 Reshape。

将您的导入更改为此,它应该可以工作。

import numpy as np
import cv2
from tensorflow.keras.models import Sequential, Model
from tensorflow.keras.layers import Dense, Activation, Conv2D, Flatten, GlobalAveragePooling2D, Dropout, Reshape
from tensorflow.keras import optimizers
import os
from tensorflow.keras import applications
from tensorflow.keras.optimizers import SGD, Adam
from tensorflow.keras.applications.resnet50 import ResNet50
from keras.preprocessing.image import ImageDataGenerator

你也有一个错误在

head_model = Reshape(2049000, )(head_model)

应该是

head_model = Reshape((2049000, ))(head_model)

关于python - keras微调报错 "' Node' object has no attribute 'output_masks"怎么解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61819948/

相关文章:

python - 如何让 pd.Grouper() 包含空组

python - 使用 popen 和专用的 TTY Python 运行交互式 Bash

machine-learning - 尖峰神经网络

r - 尝试在 R 中实现 K 最近邻,不知道从这里到哪里去

python - Keras ImageDataGenerator flow_from_dataframe 返回 KeyError

python - 无法使用 docker-compose 连接到 MongoDB

python - 按索引的特定值过滤 Dask DataFrame 行

python - 在 python 中应用 PMML 预测器模型

python - 带有数据生成器的 keras VAE

python - 当批量大小=1时批量归一化