我找到了一个非常有用的网站来学习Resnet,并且使用他的代码来训练我的图像,但是我发现我的val_loss波动并且每5个循环我的val_loss会很高,您可以看到我的val_loss会如此高,每5个时期{{3 }}
我的批处理大小是5,而我的时代是32,我使用的优化器是sgd = opt = SGD(lr=1e-1,momentum=0.9,decay=1e-1 / NUM_EPOCHS)
有人可以向我解释为什么会这样吗?非常感谢 这是我的代码`#用法 #python save_model.py-数据集疟疾-模型save_model.model
import matplotlib
matplotlib.use("Agg")
# import the necessary packages
from keras.preprocessing.image import ImageDataGenerator
from keras.optimizers import SGD
from pyimagesearch.resnet import Resnet
from sklearn.metrics import classification_report
from imutils import paths
import matplotlib.pyplot as plt
import numpy as np
import argparse
import os
# construct the argument parser and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-d","--dataset",type=str,required=True,help="path dataset of input images")
ap.add_argument("-m","--model",help="path to trained model")
ap.add_argument("-p","--plot",default="plot.png",help="path to output loss/accuracy plot")
args = vars(ap.parse_args())
# initialize the number of training epochs and batch size
NUM_EPOCHS = 25
BS = 5
TRAIN_PATH = os.path.sep.join([args["dataset"],"training"])
VAL_PATH = os.path.sep.join([args["dataset"],"validation"])
TEST_PATH = os.path.sep.join([args["dataset"],"testing"])
totalTrain = len(list(paths.list_images(TRAIN_PATH)))
totalVal = len(list(paths.list_images(VAL_PATH)))
totalTest = len(list(paths.list_images(TEST_PATH)))
trainAug = ImageDataGenerator(
rescale=1 / 255.0,rotation_range=20,zoom_range=0.05,width_shift_range=0.05,height_shift_range=0.05,shear_range=0.05,horizontal_flip=True,fill_mode="nearest")
# initialize the validation (and testing) data augmentation object
valAug = ImageDataGenerator(rescale=1 / 255.0)
trainGen = trainAug.flow_from_directory(
TRAIN_PATH,class_mode="categorical",target_size=(64,64),color_mode="rgb",shuffle=True,batch_size=32)
valGen = valAug.flow_from_directory(
VAL_PATH,shuffle=False,batch_size=BS)
testGen = valAug.flow_from_directory(
TEST_PATH,batch_size=BS)
model = Resnet.build(64,64,3,2,(2,3),(32,128,256),reg=0.0005)
opt = SGD(lr=1e-1,decay=1e-1 / NUM_EPOCHS)
model.compile(loss="binary_crossentropy",optimizer=opt,metrics=["accuracy"])
H = model.fit_generator(
trainGen,steps_per_epoch=totalTrain // BS,validation_data=valGen,validation_steps=totalVal // BS,epochs=NUM_EPOCHS)
print("[INFO] evaluating network...")
testGen.reset()
predIdxs = model.predict_generator(testGen,steps=(totalTest // BS) + 1)
predIdxs = np.argmax(predIdxs,axis=1)
print(classification_report(testGen.classes,predIdxs,target_names=testGen.class_indices.keys()))