验证准确率停滞,准确率低

我想用Tensorflow创建一个能够识别花卉的机器学习模型。我去自然界拍摄了4个不同种类的花的照片(每个种类大约600张,其中一个种类有700张)。

我使用Tensorflow的训练生成器加载这些图片:

 train_datagen = ImageDataGenerator(rescale=1./255,        shear_range=0.2,        zoom_range=0.15,         brightness_range=[0.7, 1.4],         fill_mode='nearest',         vertical_flip=True,          horizontal_flip=True,        rotation_range=15,                         width_shift_range=0.1,         height_shift_range=0.1,             validation_split=0.2)     train_generator = train_datagen.flow_from_directory(        pfad,        target_size=(imageShape[0],imageShape[1]),        batch_size=batchSize,        class_mode='categorical',        subset='training',        seed=1,        shuffle=False,        #save_to_dir=r'G:\test'        )         validation_generator = train_datagen.flow_from_directory(        pfad,         target_size=(imageShape[0],imageShape[1]),        batch_size=batchSize,        shuffle=False,        seed=1,        class_mode='categorical',        subset='validation')

然后我创建了一个简单的模型,像这样:

model = tf.keras.Sequential([                       keras.layers.Conv2D(128, (3,3), activation='relu', input_shape=(imageShape[0], imageShape[1],3)),      keras.layers.MaxPooling2D(2,2),      keras.layers.Dropout(0.5),            keras.layers.Conv2D(256, (3,3), activation='relu'),            keras.layers.MaxPooling2D(2,2),            keras.layers.Conv2D(512, (3,3), activation='relu'),            keras.layers.MaxPooling2D(2,2),           keras.layers.Flatten(),                              keras.layers.Dense(280, activation='relu'),            keras.layers.Dense(4, activation='softmax')    ])            opt = tf.keras.optimizers.SGD(learning_rate=0.001,decay=1e-5)    model.compile(loss='categorical_crossentropy',                  optimizer= opt,                  metrics=['accuracy'])

然后我想开始训练过程(CPU):

history=model.fit(        train_generator,        steps_per_epoch = train_generator.samples // batchSize,        validation_data = validation_generator,         validation_steps = validation_generator.samples // batchSize,        epochs = 200,callbacks=[checkpoint,early,tensorboard],workers=-1)

结果应该是我的验证准确率有所提高,但它从0.3375开始并在整个训练过程中保持在这个水平。验证损失(1.3737)降低了0.001。准确率从0.15开始但有所增加。

为什么我的验证准确率停滞不前?我使用的损失函数正确吗?还是我的模型构建有问题?我的Tensorflow训练生成器是否对标签进行了独热编码?

谢谢


回答:

我通过使用没有参数的RMSprop()解决了这个问题。

所以我从:

opt = tf.keras.optimizers.SGD(learning_rate=0.001,decay=1e-5)model.compile(loss='categorical_crossentropy',optimizer= opt, metrics=['accuracy'])

改为:

    opt = tf.keras.optimizers.RMSprop()    model.compile(loss='categorical_crossentropy',                  optimizer= opt,                  metrics=['accuracy'])

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注