我正在尝试设置一个简单的 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 张图像。我能做些什么来处理这个问题?
最佳答案
您的导入有问题。您混淆了 keras
和 tensorflow.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/