我正在训练一个 ResNet 50 模型来将图像分类为 Covid 感染或正常。训练时,唯一显示的指标是训练准确性和损失。 val_accuracy 和 val_loss 在任何时代都不可见。我已经通过了验证数据,但它仍然没有出现。
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.2)
print('The train Data Shape ', X_train.shape[0])
X_test, X_valid, y_test, y_valid = train_test_split(X_test,y_test, test_size = 0.5)
print('The validation Data Shape ', X_valid.shape[0])
print('The test Data Shape ', X_test.shape[0])
lr = 1e-3
epochs = 50
bs = 8
optimizer = Adam(learning_rate = lr, decay= lr/epochs)
model.compile(optimizer, loss='binary_crossentropy', metrics=['accuracy'])
epochs = 100
#initialize the training data augmentation object
train_datagen = ImageDataGenerator(
rotation_range=15,
fill_mode ="nearest")
metric = "accuracy"
checkpointer = ModelCheckpoint(filepath = "./Model/CDX_Best_RestNet50.h5", save_best_only = True, monitor = metric , verbose=1)
start = time.time()
# let's get started !
history=model.fit(train_datagen.flow(X_train, y_train, batch_size = bs),
steps_per_epoch = len(X_train)//bs,
validation_data = (X_valid, y_valid),
validation_steps = len(X_valid)//bs,
epochs =epochs,
callbacks= [checkpointer])
end = time.time()
duration = end - start
print ('\n This Model took %0.2f seconds (%0.1f minutes) to train for %d epochs'%(duration, duration/60, epochs) )
此外,这是 X_train 的形状:火车数据形状 (224, 224, 3)
似乎传递给 model.fit() 方法的验证数据可能存在问题。在提供的代码片段中,X_valid 和 y_valid 作为验证数据传递,但 X_valid 的形状为 (224, 224, 3),这似乎对应于单个图像而不是一组验证数据。
要解决此问题,您可以尝试在将 X_valid 传递给 model.fit() 之前使用 np.reshape() 将其重塑为 (1, 224, 224, 3) 的形状。
此外,val_accuracy 和 val_loss 等验证指标仅在第一个 epoch 可见是正常的,因为这些指标仅在每个 epoch 结束时计算。但是,您可以通过将 validation_data 参数传递给 model.fit() 来监控所有时期的这些指标。在你的情况下,你已经传递了这个参数,所以一旦验证数据的问题得到解决,验证指标应该对所有时期都是可见的
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.2)
print('The train Data Shape ', X_train.shape[0])
X_test, X_valid, y_test, y_valid = train_test_split(X_test,y_test, test_size = 0.5)
print('The validation Data Shape ', X_valid.shape[0])
print('The test Data Shape ', X_test.shape[0])
lr = 1e-3
epochs = 50
bs = 8
optimizer = Adam(learning_rate = lr, decay= lr/epochs)
model.compile(optimizer, loss='binary_crossentropy', metrics=['accuracy'])
#initialize the training data augmentation object
train_datagen = ImageDataGenerator(
rotation_range=15,
fill_mode ="nearest")
metric = "accuracy"
checkpointer = ModelCheckpoint(filepath = "./Model/CDX_Best_RestNet50.h5", save_best_only = True, monitor = metric , verbose=1)
start = time.time()
# let's get started !
history=model.fit(train_datagen.flow(X_train, y_train, batch_size = bs),
steps_per_epoch = len(X_train)//bs,
validation_data = train_datagen.flow(X_valid, y_valid, batch_size=bs),
validation_steps = len(X_valid)//bs,
epochs =epochs,
callbacks= [checkpointer])
end = time.time()
duration = end - start
print ('\n This Model took %0.2f seconds (%0.1f minutes) to train for %d epochs'%(duration, duration/60, epochs) )
对代码所做的更改是: