【问题标题】:Keras Validation Accuracy is Zero but other metrics are normalKeras 验证准确度为零,但其他指标正常
【发布时间】:2020-01-08 17:02:00
【问题描述】:

我正在研究 keras 中的计算机视觉问题,但遇到了一个有趣的问题。我的 val_acc 是 0.0000e+00。这特别有趣,因为我的其他指标(例如 loss、acc 和 val_loss)都正常运行。

当我从 Sequence data_generator 切换到自定义的我很确定它按预期工作时,这种情况开始发生。

我的问题与validation accuracy is 0 with Keras fit_generator 非常相似,但没有得到答案在那个线程中。

我已经检查以确保我的激活和损失指标适合我的特定问题。我正在使用:loss='categorical_crossentropy' metrics=['accuracy'] 并试图预测某个频谱图来自的月份。

验证数据的加载方式与训练数据完全相同,所以我真的无法弄清楚发生了什么甚至随机猜测也应该给出 1/12 val_acc 对吗?不能为零。

这是我的模型架构:

x = (Convolution2D(32,5,5,activation='relu',input_shape=(501,501,1)))(input_img)
x = (MaxPooling2D(pool_size=(2,2)))(x)
x = (Convolution2D(32,5,5,activation='relu'))(x)
x = (MaxPooling2D(pool_size=(2,2)))(x)
x = (Dropout(0.25))(x)
x = (Flatten())(x)
x = (Dense(128,activation='relu'))(x)
x = (Dropout(0.5))(x)
classify = (Dense(12,activation='softmax', kernel_regularizer=regularizers.l1_l2(l1 = 0.001,l2 = 0.001)))(x)

model = Model(input_img,classify)
model.compile(loss='categorical_crossentropy',optimizer='nadam',metrics=['accuracy'])

这是我对 fit_generator 的调用:

model.fit_generator(generator = pd.data_generator(folder,'train'),
                    validation_data = pd.data_generator(folder,'test'),
                    steps_per_epoch=(120),
                    validation_steps=(24),
                    nb_epoch=20,
                    verbose=1,
                    shuffle=True,
                    callbacks=[tensorboard_callback,early_stop_callback])

最后是我的数据生成器的重要部分:


if mode == 'test':
        print('test')
        while True:

            for things in up.unpickle_batch(folder,50,6000,7200): #The last 1200 things in batches of 50
                random.shuffle(things)
                test_spect = []
                test_months = []
                for thing in things:
                    test_spect.append(thing.spect) #GET BATCH DATA
                    test_months.append(thing.month-1) #this is is here because the months go from 1-12 but should go from 0-11 for to_categorical   
                x_test = np.asarray(test_spect) #PREPARE BATCH DATA
                x_test =  x_test.astype('float32')
                x_test /= np.amax(x_test) #- 0.5
                X_test = np.reshape(x_test, (-1,501, 501,1))


                Y_test = np_utils.to_categorical(test_months,12)

                yield X_test,Y_test #RETURN BATCH DATA

【问题讨论】:

  • 尝试手动评估它。取一批大小为 10 或类似的东西,在其上运行 model.predict,并打印出预测和基本事实。希望这可以为您提供有关正在发生的事情的更多信息。
  • 这有帮助!我发现我没有正确输入随机数据,因为所有测试用例都是同一个月,而且出于某种原因,我的模型猜测每个输入都在同一月份,导致每次都出错!因此,0 val_acc。

标签: python machine-learning keras


【解决方案1】:

检查错误数据。

确保您的数据与您认为的一样 - 随机分配,与您的验证集和/或测试集相同,没有误导/错误/矛盾的样本。您可能可以生成一个防故障数据集(例如,区分深色图像和浅色图像,或者清晰与模糊)并证明除数据之外的所有内容都正常。如果不能,请更仔细地查看您的代码。然而,这听起来像是一个数据问题。

我刚刚在一个简单的 3 层 MLP 网络中解决了一个类似的问题,该网络的训练损失和准确度朝着合理的方向发展,验证损失在训练损失之后(但滞后),但验证准确度徘徊在零。在我的训练数据集生成(来自更大集合的采样脚本)中存在一个错误,这意味着一种类型的整个样本块中的 1 个样本具有不同类型的下一个块的标签。 500 个样本中的 499 个正确样本不足以使训练保持正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-10
    • 2020-10-16
    • 1970-01-01
    • 2019-10-01
    • 2020-01-05
    • 2020-11-13
    • 2020-06-15
    • 2020-07-08
    相关资源
    最近更新 更多