gpt4 book ai didi

python - 在训练期间接近 100% 的准确性,但在图像分类器的测试/验证期间 <50%

转载 作者:太空宇宙 更新时间:2023-11-04 01:54:03 26 4
gpt4 key购买 nike

过去几天我一直在尝试训练我的模型,但每次无论我尝试什么,我都会遇到同样的问题。我的准确率开始很低,在第一个时期内达到 90% 以上,但在每个时期结束时的验证结果在 20-50% 之间,测试模型预测对某些类别是准确的,但对大多数类别来说是完全错误的。我的数据集有 20000 张图像,每个类 2000 张,和 100 张测试图像(如果需要可以得到更多)。我将非常感谢你们中的任何人提供的任何意见,因为我对整个机器学习还很陌生,而且我并不完全理解其中的所有内容。

我看过几篇描述类似问题及其修复的在线帖子和文章,无论是将激活定义为它们自己的层而不是参数,添加批量归一化层并改变它们的动量,尝试几种不同的优化器和学习率,不同大小的数据集,使用自定义初始化器,甚至完全改变我的模型的结构。什么都没用。

这是网络的主要部分:

model = Sequential()
initializer = keras.initializers.he_normal(seed=None)

model.add(Conv2D(64, (3, 3), padding='same', use_bias=False, kernel_initializer=initializer, input_shape=x_train.shape[1:]))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Conv2D(64, (3, 3), padding='same', use_bias=False, kernel_initializer=initializer))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(128, (3, 3), padding='same', use_bias=False, kernel_initializer=initializer))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Conv2D(128, (3, 3), padding='same', use_bias=False, kernel_initializer=initializer))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(256, (3, 3), padding='same', use_bias=False, kernel_initializer=initializer))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Conv2D(256, (3, 3), padding='same', use_bias=False, kernel_initializer=initializer))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Flatten())
model.add(Dense(2048, use_bias=False, kernel_initializer=initializer))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(0.4))
model.add(Dense(num_classes, use_bias=False))
model.add(BatchNormalization())
model.add(Activation('softmax'))

model.compile(loss='categorical_crossentropy', optimizer=keras.optimizers.Adam(lr=0.00005), metrics=['accuracy'])

# train the model
if not testing_mode:
model.fit(x_train, y_train, epochs=epochs, batch_size=batch_size, shuffle=True, validation_data=(x_test, y_test))

scores = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', scores[0])
print('Test accuracy:', scores[1])

这是一个时代的最后几批及其最后的验证:

19776/20000 [============================>.] - ETA: 25s - loss: 0.4859 - acc: 0.9707
19840/20000 [============================>.] - ETA: 18s - loss: 0.4855 - acc: 0.9708
19904/20000 [============================>.] - ETA: 11s - loss: 0.4851 - acc: 0.9709
19968/20000 [============================>.] - ETA: 3s - loss: 0.4848 - acc: 0.9710
20000/20000 [==============================] - 2323s 116ms/step - loss: 0.4848 - acc: 0.9710 - val_loss: 1.9185 - val_acc: 0.5000

编辑:我被告知要添加更多关于我的数据集的信息。我正在 this 上训练具有 10 类不同手势的数据集。每张图片都被预处理为 128x128 和灰度,我的 100 张图片测试集是从训练集中的每个类别中截取的 10 张图片。我知道最好获取与训练集分开的数据进行测试,但我不确定从训练集中删除图像是否是个好主意。这也是我觉得这个问题很奇怪的原因之一,因为如果模型对训练数据过度拟合,那么为什么面对它已经看到的数据时准确率这么低呢?如果您需要更多信息,请告诉我。

最佳答案

您的模型似乎过度拟合,这意味着它正在非常紧密地适应训练集[学习]。

如果您的训练集不包含所有案例类型,可能会导致这种情况,请尝试重新打乱您的数据。

关于python - 在训练期间接近 100% 的准确性,但在图像分类器的测试/验证期间 <50%,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57311923/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com