【问题标题】:Strategies for pre-training models for use in tfjs用于 tfjs 的预训练模型策略
【发布时间】:2020-05-05 15:47:50
【问题描述】:

这是我已经问过的问题的更通用版本:Significant difference between outputs of deep tensorflow keras model in Python and tensorflowjs conversion

据我所知,与在 Python 中运行的相同模型或节点。模型所有层的这些微小差异的累积效应会导致输出出现相当显着的差异。有关此示例,请参阅 here。

这意味着在 Python 或 Node 中训练的模型在浏览器中运行时在准确性方面表现不佳。而且你的模型越深入,它会变得越糟糕。

因此我的问题是,在浏览器中训练模型与 tfjs 一起使用的最佳方法是什么?有没有办法确保输出相同?或者您是否只需要接受会有小的数值差异,如果是这样,是否有任何方法可用于训练模型以使其更具弹性?

【问题讨论】:

    标签: tensorflow tf.keras tensorflow.js tfjs-node


    【解决方案1】:

    这个答案是基于我个人的观察。因此,它是有争议的,没有太多证据支持。为了使 16 位模型的准确性接近 32 位模型,我遵循以下几点:

    1. 避免对隐藏层使用具有较小上限和下限的激活,例如 sigmoid 或 tanh。这些激活导致下一层的权重对小值变得非常敏感,因此对小变化非常敏感。我更喜欢将 ReLU 用于此类模型。由于它现在是大多数模型中隐藏层的标准激活方式,因此无论如何您都应该使用它。

    2. 在训练时避免权重衰减和 L1/L2 正则化(keras 中的 kernel_regularizer 参数),因为这些会增加权重的敏感性。改用Dropout,当使用它而不是数值正则化器时,我没有观察到 TFLite 的性能大幅下降。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-19
      • 2017-11-27
      • 1970-01-01
      • 2020-01-02
      • 2019-07-15
      • 2021-03-23
      • 1970-01-01
      • 2022-10-19
      相关资源
      最近更新 更多