【发布时间】:2021-01-06 17:57:19
【问题描述】:
我正在训练古吉拉特语光学字符识别模型。输入图像是字符图像。我上过20节课。训练图像总数为 12000(每类 600),测试图像为 3200(每类 160)。
我应该如何提高我的准确性并减少损失?
下面是我的代码:
classifier = Sequential()
# Convolution
classifier.add(Conv2D(32, (3, 3), input_shape = (32, 32, 3), activation = 'relu'))
classifier.add(BatchNormalization())
# Pooling
classifier.add(MaxPooling2D(pool_size = (2, 2)))
classifier.add(Conv2D(32, (3, 3), activation = 'relu'))
classifier.add(BatchNormalization())
classifier.add(MaxPooling2D(pool_size = (2, 2)))
classifier.add(Dropout(0.2))
# Adding a second convolutional layer
classifier.add(Conv2D(32, (3, 3), activation = 'relu'))
classifier.add(BatchNormalization())
classifier.add(MaxPooling2D(pool_size = (2, 2)))
# Flattening
classifier.add(Flatten())
classifier.add(Dense(units = 1024, activation = 'relu'))
classifier.add(Dense(units = 128, activation = 'relu'))
classifier.add(Dense(units = 20, activation = 'softmax'))
classifier.compile(optimizer = 'adam', loss = 'categorical_crossentropy', metrics = ['accuracy'])
classifier.summary()
# Fitting the CNN to the images
from tensorflow.keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=False)
test_datagen = ImageDataGenerator(horizontal_flip = False)
training_set = train_datagen.flow_from_directory('C:/Users/shweta/Desktop/characters/train',
target_size = (32, 32),
batch_size = 32,
class_mode = 'categorical')
test_set = test_datagen.flow_from_directory('C:/Users/shweta/Desktop/characters/test',
target_size = (32, 32),
batch_size = 32,
class_mode = 'categorical')
classifier.fit_generator(training_set,
epochs = 22,
validation_data = test_set, shuffle=True)
classifier.save('alphanumeric.mod')
输出:
Epoch 19/22
375/375 [==============================] - 34s 89ms/step - loss: 0.1800 - accuracy: 0.9414 - val_loss: 0.1945 - val_accuracy: 0.9397
Epoch 20/22
375/375 [==============================] - 34s 91ms/step - loss: 0.1729 - accuracy: 0.9445 - val_loss: 0.6013 - val_accuracy: 0.8450
Epoch 21/22
375/375 [==============================] - 34s 91ms/step - loss: 0.1798 - accuracy: 0.9420 - val_loss: 0.1817 - val_accuracy: 0.9409
Epoch 22/22
375/375 [==============================] - 35s 93ms/step - loss: 0.1802 - accuracy: 0.9398 - val_loss: 0.1757 - val_accuracy: 0.9425
【问题讨论】:
-
最后的密集层不应该有 10 个单位而不是 20 个,因为你只有 10 个类吗?
-
对不起,实际上我有 20 节课要训练。我在问题中的拼写错误
-
您期待什么结果?对我来说,准确性似乎是合理的。
-
我认为你应该尝试添加更多的 Conv2D 层并减少一个或多个 Dense 层,通过使用旋转、移位、翻转、缩放来增加数据......同时使用 BatchNorm 层来增加模型的稳定性训练时间。
-
我正在为古吉拉特语字符的 OCR 训练我的模型。
标签: tensorflow deep-learning ocr conv-neural-network