我的代码:
将在培训期间使用的回调
early_stopping = EarlyStopping(monitor='val_loss', mode = 'min', patience=10)
checkpoint = ModelCheckpoint(filepath = './weights.hdf5', verbose=1, save_best_only=True)
base_model = Xception(weights="imagenet", include_top=False, input_tensor=Input(shape=(224, 224, 3)))
base_model.summary()
for layer in base_model.layers:
layer.trainable = False
head_model = AveragePooling2D(pool_size=(4, 4))(base_model.output)
head_model = Flatten(name='flatten')(head_model)
head_model = Dense(1024, activation='relu')(head_model)
head_model = Dropout(0.3)(head_model)
head_model = Dense(512, activation='relu')(head_model)
head_model = Dropout(0.3)(head_model)
head_model = Dense(120, activation='softmax')(head_model)
model = Model(inputs=base_model.input, outputs=head_model)
optimizer = SGD(learning_rate=0.1, momentum=0.9, decay=0.01)
model.compile(loss="categorical_crossentropy", optimizer=optimizer, metrics=["accuracy"])
#第一个循环history1 = model.fit(train_generator, epochs=5, callbacks=[checkpoint], validation_data=val_generator)
我得到以下错误:
InvalidArgumentError Traceback(上次调用的最近一次(<ipython-input-67-9f6b46dd1195>在<模块>((1#第一循环2.---->3历史1=模型拟合(train_generator,历元=5,回调=[early_stopping],validation_data=val_generator(
InvalidArgumentError:图形执行错误:
在定义于的节点"categorical_crossentory/softmax_cross_entropy_with_logits"处检测到(最后一次调用(:
该模型将分3个周期进行训练。在第一个循环中,只有添加到网络的分类器的层";head_ mode";将能够以相对较高的学习率进行训练。在第二个周期中,异常模型的一半层将被解冻,而在第三个周期中所有层都将被解冻。在第二个和第三个周期中,优化器的学习率将降低。
#第一周期
history1 = model.fit(train_generator, epochs=5, validation_data=val_generator, callbacks=[checkpoint])
在第一个循环中出现错误。。。
我已经找到了这个问题的解决方案。最后的密集层数(输出类(有问题。我已经将值从120更改为7,因为我有7个输出类&时代正在正常运行。。。
head_model = Dense(120, activation='softmax')(head_model) -> old
head_model = Dense(7, activation='softmax')(head_model) -> edited