【问题标题】:Keras + TensorFlow ModelKeras + TensorFlow 模型
【发布时间】:2020-05-13 09:30:32
【问题描述】:

我目前正在创建一个模型,在创建它时我提出了一些问题。使用相同的数据多次训练相同的模型是否会导致这些对象的精度更高,因为您每次都训练它?当有时对象获得 90% 的精度并且当我重新运行它得到较低的精度甚至无法预测正确的对象时,可能会出现什么问题?是因为Tensorflow 在 GPU 上运行吗?

【问题讨论】:

    标签: python tensorflow keras


    【解决方案1】:

    我猜你正在做图像识别,并且你想使用 Keras 制作的神经网络来识别图像(对象)。你应该训练一次,但在训练期间你会做几个 epoch,这意味着算法会在几轮(epochs)中调整权重。对于每一轮,它都会遍历所有训练图像。训练后,您可以使用该模型来识别图像/对象。

    您可以在相同的训练集上评估您的训练模型的准确性,但最好使用不同的集(例如,参见 sklearn 的 train_test_split)。

    训练是一个随机过程,这意味着每次训练网络时,最终都会有所不同。因此,您将获得不同的精度。随机性来自不同的初始权重或来自使用随机梯度下降法等。

    这个问题似乎与 Keras 或 TensorFlow 没有任何关系,而是对神经元网络如何工作的基本了解。在 GPU 上运行 Tensorflow 没有任何联系。通过使用相同的对象进行训练,您也不会获得更好的精度。如果你在一个数据集上训练你的模型很长时间(很多 epoch),你可能会陷入过度拟合。那么,你的模型在这个训练数据集上的准确率会很高,但在其他数据集上的准确率会很低。

    【讨论】:

    • 这正是我想要的,感谢您提供的信息!
    【解决方案2】:

    一种常见的技术是将您的日期拆分到训练和验证数据集中,然后使用 EarlyStopping 重复训练您的模型。这将在训练数据集上进行训练,然后针对验证数据集计算损失,然后继续训练直到看不到进一步的改进。您可以设置一个耐心参数来等待 X 个 epoch 没有改进以停止训练(并可选择保存最佳模型)

    另一个技巧是使用 ImageDataGenerator 进行图像增强,它将为您生成合成数据(旋转、移位、镜像、亮度调整、噪声等)。这可以有效地增加您必须训练的数据量,从而减少过度拟合。

    【讨论】:

    • 是的,这正是我正在做的事情,但由于我是图像识别的新手,所以我在某些方面存在疑问。那么最后每次运行后得到不同的精度数字是很正常的吗?
    • 运行之间会有一小部分随机变化。对此进行测试的方法是使用相同的设置训练您的模型 5-10 次,然后计算结果的最小/最大/标准。将这种变化视为“噪音”。
    猜你喜欢
    • 2019-06-04
    • 2017-12-17
    • 2021-12-26
    • 1970-01-01
    • 2019-10-08
    • 1970-01-01
    • 2018-10-08
    • 2018-12-08
    • 2019-08-30
    相关资源
    最近更新 更多