有人能帮忙看一下我自定义的卷积神经网络的代码哪里出了问题吗,我想做的是图像分类,循环的过程中验证集的损失值越来越大而且accuracy一直在0.1徘徊(我是小白真的不知道怎么办了)#调用库 import numpy as np import matplotlib.pyplot as plt #画图 from PIL import Image #读图 import os import splitfolders #自动划分数据集 from tensorflow.keras.preprocessing.image import ImageDataGenerator from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout from tensorflow.keras.optimizers import Adam from sklearn.metrics import confusion_matrix,classification_report import seaborn as sns #数据集划分 input_folder=r"D:\machine learning\rename_picture" output_folder=r"D:\machine learning\split_picture" splitfolders.ratio(input_folder,output=output_folder,seed=123,ratio=(0.8,0.2)) #123固定每次划分一致 train_path=output_folder+r"\train" val_path=output_folder+r"\val" #处理读取数据 img_size=(128,128) batch_size=32 #归一化像素 train_datagen=ImageDataGenerator(rescale=1./255, rotation_range=15, width_shift_range=0.1, height_shift_range=0.1, zoom_range=0.1, horizontal_flip=True) val_datagen=ImageDataGenerator(rescale=1./255) #统一尺寸 train_generator=train_datagen.flow_from_directory(train_path, target_size=img_size,batch_size=batch_size, class_mode="categorical",shuffle=True) val_generator=val_datagen.flow_from_directory(val_path, target_size=img_size,batch_size=batch_size, class_mode="categorical",shuffle=False) #搭建CNN模型 from tensorflow.keras.callbacks import EarlyStopping,ReduceLROnPlateau from tensorflow.keras.layers import BatchNormalization model=Sequential() model.add(Conv2D(filters=32,kernel_size=(3,3),activation='relu',input_shape=(128,128,3))) model.add(BatchNormalization()) model.add(MaxPooling2D(pool_size=(2,2))) model.add(Conv2D(filters=64,kernel_size=(3,3),activation='relu')) model.add(BatchNormalization()) model.add(MaxPooling2D(pool_size=(2,2))) model.add(Conv2D(filters=128,kernel_size=(3,3),activation='relu')) model.add(BatchNormalization()) model.add(MaxPooling2D(pool_size=(2,2))) model.add(Conv2D(filters=192,kernel_size=(3,3),activation='relu')) model.add(BatchNormalization()) model.add(MaxPooling2D(pool_size=(2,2))) model.add(Flatten()) model.add(Dense(256,activation='relu')) model.add(Dropout(0.6)) model.add(Dense(10,activation='softmax')) model.compile(optimizer=Adam(learning_rate=0.0003), loss='categorical_crossentropy',metrics=['accuracy']) callbacks=[ReduceLROnPlateau(monitor='val_loss',factor=0.5,patience=2,min_lr=1e-7,verbose=1), EarlyStopping(monitor='val_loss',patience=6,restore_best_weights=True,verbose=1)] model.summary() history=model.fit(train_generator, validation_data=val_generator, epochs=20, callbacks=callbacks) acc=history.history['accuracy'] val_acc=history.history['val_accuracy'] loss=history.history['loss'] val_loss=history.history['val_loss'] epochs_range=range(len(acc)) plt.figure(figsize=(9,6)) plt.plot(epochs_range,loss,label='Training Loss') plt.plot(epochs_range,val_loss,label='Validation Loss') plt.legend(loc='upper right') plt.title('Training and Validation Loss') plt.xlabel('Epochs') plt.ylabel('Loss') plt.show() plt.figure(figsize=(9,6)) plt.plot(epochs_range,acc,label='Training Accuracy') plt.plot(epochs_range,val_acc,label='Validation Accuracy') plt.legend(loc='lower right') plt.title('Training and Validation Accuracy') plt.xlabel('Epochs') plt.ylabel('Accuracy') plt.show() from sklearn.metrics import cohen_kappa_score y_pred=model.predict(val_generator) y_pred=np.argmax(y_pred,axis=1) y_true=val_generator.classes print(classification_report(y_true,y_pred,digits=4)) print('Kappa:',cohen_kappa_score(y_true,y_pred)) cm=confusion_matrix(y_true,y_pred) cmap = sns.diverging_palette(220,10,as_cmap=True) plt.figure(figsize=(8,6)) # 先创建一张8×6英寸白纸 sns.heatmap(cm,annot=True,fmt="d",cmap=cmap,center=0) # 在这张白纸上画混淆矩阵热力图 plt.xlabel('pred_label') plt.ylabel('real_label') plt.show() y_prob = model.predict(val_generator) y_pred = np.argmax(y_prob, axis=1) y_true = val_generator.classes wrong_indices = np.where(y_pred != y_true)[0] print("Wrong predictions:", len(wrong_indices)) for i in wrong_indices[:20]: print( "True:", y_true[i], "Predicted:", y_pred[i], "Confidence:", np.max(y_prob[i]) )我修改过学习率、数据集的处理方式、还有各种数值大小,但是不管怎么修改都不对