【问题标题】:Why the final accuracy is far different to the one showing为什么最终的准确度与显示的相差甚远
【发布时间】:2018-03-05 19:39:58
【问题描述】:

我运行一个简单的神经网络进行训练。输入是 12 个特征,输出是 25 个。我使用 tflearn 运行代码,但是如屏幕截图所示,为什么最终的准确率不在 0.68 左右?

我的代码是:

    #Set network variables and hyperparameters
    nIn = 12
    nHidden = 200
    nOut = 25
    alpha = 0.01
    nEpochs = 500
    testSplit = 0.2
    batchSize = 32

    input_layer = tflearn.input_data(shape=[None, nIn])
    layer2 = tflearn.fully_connected(input_layer, nHidden, activation="relu")
    out = tflearn.fully_connected(layer2, nOut, activation="softmax")

    #sgd = tflearn.optimizers.SGD(learning_rate=0.001, lr_decay=0.0, decay_step=1000, staircase=False, use_locking=False)
    network = tflearn.regression(out, optimizer="adam", loss="categorical_crossentropy",batch_size=batchSize)

    model = tflearn.DNN(network)

    #Number of data points used for testing
    num_test = int(testSplit * len(data))

    #Split data into train and  test
    trainX = dataX[:-num_test]
    testX = dataX[-num_test:]

    trainY = dataY[:-num_test]
    testY = dataY[-num_test:]

    model.fit(trainX, trainY, n_epoch=nEpochs, show_metric=True)

    print("Final Accuracy:", model.evaluate(testX, testY))

任何帮助将不胜感激。

【问题讨论】:

    标签: model tflearn


    【解决方案1】:

    在代码末尾,您会看到您使用验证集计算模型的准确性。这意味着:您的模型在此之前永远不会看到该数据。

    当您根据训练数据训练网络时,它会在多次迭代中重复使用相同的数据。在您的情况下,它至少使用了您的整个训练集 499 次并调整了它的参数。当您使用验证集时,它从未见过该数据,并且会比您的训练数据表现更差。这绝对是常见的。

    我建议您做的是,在训练期间使用您的验证数据来验证您的模型。可能导致训练和测试准确性之间存在较大差距的常见问题是所谓的overfit。这意味着您的模型参数已经对训练数据进行了太多调整,并且无法很好地泛化到新数据。您将能够通过将验证/测试准确度与训练准确度进行比较来检测此类情况。如果第一个增加而第二个减少,则您将过拟合。

    【讨论】:

    • 这回答了你的问题吗?
    猜你喜欢
    • 2021-10-26
    • 1970-01-01
    • 2020-11-13
    • 1970-01-01
    • 2022-01-12
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    相关资源
    最近更新 更多