训练模型字符识别准确率未见改善

我正在为我的字符识别系统构建一个训练模型。在每个周期中,我得到的准确率都是相同的,而且没有改善。目前我有4000张训练图像和77张验证图像。我的模型如下:

inputs = Input(shape=(32,32,3))x = Conv2D(filters = 64, kernel_size = 5, activation = 'relu')(inputs)x = MaxPooling2D()(x)x = Conv2D(filters = 32,        kernel_size = 3,            activation = 'relu')(x)  x = MaxPooling2D()(x) x = Flatten()(x) x=Dense(256,activation='relu')(x)outputs = Dense(1, activation = 'softmax')(x) model = Model(inputs = inputs, outputs = outputs) model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) data_gen_train = ImageDataGenerator(rescale=1/255)data_gen_test=ImageDataGenerator(rescale=1/255)data_gen_valid = ImageDataGenerator(rescale=1/255)train_generator = data_gen_train.flow_from_directory(directory=r"./drive/My Drive/train_dataset", target_size=(32,32), batch_size=10, class_mode="binary")valid_generator = data_gen_valid.flow_from_directory(directory=r"./drive/My                   Drive/validation_dataset", target_size=(32,32), batch_size=2, class_mode="binary")test_generator = data_gen_test.flow_from_directory(                 directory=r"./drive/My Drive/test_dataset",                 target_size=(32, 32),                 batch_size=6,                 class_mode="binary")model.fit(train_generator,epochs =10, steps_per_epoch=400,validation_steps=37,validation_data=valid_generator) 

结果如下:

Found 4000 images belonging to 2 classes.Found 77 images belonging to 2 classes.Found 6 images belonging to 2 classes.Epoch 1/10400/400 [==============================] - 14s 35ms/step - loss: 0.0000e+00 - accuracy: 0.5000 - val_loss: 0.0000e+00 - val_accuracy: 0.5811Epoch 2/10400/400 [==============================] - 13s 33ms/step - loss: 0.0000e+00 - accuracy: 0.5000 - val_loss: 0.0000e+00 - val_accuracy: 0.5811Epoch 3/10400/400 [==============================] - 13s 34ms/step - loss: 0.0000e+00 - accuracy: 0.5000 - val_loss: 0.0000e+00 - val_accuracy: 0.5676Epoch 4/10400/400 [==============================] - 13s 33ms/step - loss: 0.0000e+00 - accuracy: 0.5000 - val_loss: 0.0000e+00 - val_accuracy: 0.5676Epoch 5/10400/400 [==============================] - 18s 46ms/step - loss: 0.0000e+00 - accuracy: 0.5000 - val_loss: 0.0000e+00 - val_accuracy: 0.5541Epoch 6/10400/400 [==============================] - 13s 34ms/step - loss: 0.0000e+00 - accuracy: 0.5000 - val_loss: 0.0000e+00 - val_accuracy: 0.5676Epoch 7/10400/400 [==============================] - 13s 33ms/step - loss: 0.0000e+00 - accuracy: 0.5000 - val_loss: 0.0000e+00 - val_accuracy: 0.5676Epoch 8/10400/400 [==============================] - 13s 33ms/step - loss: 0.0000e+00 - accuracy: 0.5000 - val_loss: 0.0000e+00 - val_accuracy: 0.5946Epoch 9/10400/400 [==============================] - 13s 33ms/step - loss: 0.0000e+00 - accuracy: 0.5000 - val_loss: 0.0000e+00 - val_accuracy: 0.5811Epoch 10/10400/400 [==============================] - 13s 33ms/step - loss: 0.0000e+00 - accuracy: 0.5000 - val_loss: 0.0000e+00 - val_accuracy: 0.5811<tensorflow.python.keras.callbacks.History at 0x7fa3a5f4a8d0>

回答:

如果您试图识别两个类别的字符,您应该:

  • flow_from_directory函数中使用class_mode="binary"
  • 使用binary_crossentropy作为损失函数
  • 最后一层必须有一个神经元,并使用sigmoid激活函数

如果有超过两个类别的情况:

  • 不要在flow_from_directory函数中使用class_mode="binary"
  • 使用categorical_crossentropy作为损失函数
  • 最后一层必须有n个神经元,并使用softmax激活函数,其中n代表类别数量

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中创建了一个多类分类项目。该项目可以对…

发表回复

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