我将使用自己定义的数据集微调InceptionV3模型。不幸的是,使用model.fit进行训练时,出现以下错误:
ValueError: Error when checking target: expected dense_6 to have shape (4,) but got array with shape (1,)
首先,我将自己的数据集加载为training_data,其中包含一对图像和相应的标签。然后,我使用下面的代码将它们转换为特定的数组类型(img_new和label_new),以便与Keras的数据和标签输入兼容。
for img, label in training_data:
img_new[i,:,:,:] = img
label_new[i,:] = label
i=i+1
第二,我在下面微调了Inception模型。
InceptionV3_model=keras.applications.inception_v3.InceptionV3(include_top=False,
weights='imagenet',
input_tensor=None,
input_shape=None,
pooling=None,
classes=1000)
#InceptionV3_model.summary()
# add a global spatial average pooling layer
x = InceptionV3_model.output
x = GlobalAveragePooling2D()(x)
# let's add a fully-connected layer
x = Dense(1024, activation='relu')(x)
# and a logistic layer -- let's say we have 4 classes
predictions = Dense(4, activation='softmax')(x)
# this is the model we will train
model = Model(inputs=InceptionV3_model.input, outputs=predictions)
# Transfer Learning
for layer in model.layers[:311]:
layer.trainable = False
for layer in model.layers[311:]:
layer.trainable = True
from keras.optimizers import SGD
model.compile(optimizer=SGD(lr=0.001, momentum=0.9), loss='categorical_crossentropy')
model.fit(x=X_train, y=y_train, batch_size=3, epochs=3, validation_split=0.2)
model.save_weights('first_try.h5')
在使用model.fit进行训练时,有人对出什么问题有想法吗?
衷心感谢您的帮助。
答案 0 :(得分:0)
由于我的标签为r个整数而导致错误,我必须通过为整数标签设置的sparse_categorical_crossentropy而不是用于一键编码的categorical_crossentropy对其进行编译。
非常感谢@Amir的帮助。 :-)