【问题标题】:Tensorflow Training accuracy much higher than test accuracyTensorFlow 训练精度远高于测试精度
【发布时间】:2020-06-04 06:17:36
【问题描述】:

训练数据的准确率始终保持在 60% 左右,但当我尝试使用测试数据预测结果时,模型的准确率约为 50%(如果它是随机的,这是可以预料的)。

def train_model(training_data, training_differential, test_data, 
test_differential):
    num_nodes = 180

    model = keras.Sequential([
        keras.layers.Flatten(input_shape=(12, 22)),
        keras.layers.Dense(num_nodes, activation="relu"),
        keras.layers.Dense(2, activation="softmax")
    ])

model.compile(optimizer="adam", loss="sparse_categorical_crossentropy", metrics=["accuracy"])

model.fit(training_data, training_differential, epochs=20)

predictions = model.predict(test_data)


return predictions

不确定我是过度拟合数据还是使用了不正确的模型。任何帮助将不胜感激!

【问题讨论】:

    标签: python tensorflow


    【解决方案1】:

    这可能涉及很多事情,输入什么样的数据以及您的目标类型是什么?它们是[0,1] 之类的类还是整数[6,2]。如果它们是类,那么您可能不需要稀疏分类交叉熵,只需要分类交叉熵。如果这是一个二元分类问题,例如cat or dog 但绝不会同时使用两者,那么您的最后一层应该是大小 1,其中目标是单个向量,其中每个值都是 1 或 0。

    还有你的训练集有多大?如果它太小,过度拟合很可能是一个问题。

    无论如何,从这里开始的一个地方可能是减少节点数量,从而减少网络本身的容量。您还可以引入某种形式的正则化,以防止网络在训练集上过度拟合。

    【讨论】:

    • 我传入整数数组,这是一个二进制分类问题(它应该只猜测 0 或 1)。我的训练集大约是 800 个。
    • 好的,那么在这种情况下,我会将您的目标 (y_train) 重塑为单个值向量,例如 [0,1,0,1,1,0],其中 y_train 中的每个索引 i 都指您输入的类别。 y_train 的长度应与 x_train 的长度相同。在这种情况下,您将需要在最后一层使用binary_crossentropy 并将激活设置为sigmoid。你的最后一层应该看起来像keras.layers.Dense(1, activation="sigmoid")
    猜你喜欢
    • 1970-01-01
    • 2016-10-01
    • 2020-07-08
    • 2018-12-30
    • 1970-01-01
    • 1970-01-01
    • 2020-12-17
    • 2021-05-14
    • 1970-01-01
    相关资源
    最近更新 更多