0

这是我已经问过的一个问题的更通用版本:Python 中深度 tensorflow keras 模型的输出和 tensorflowjs 转换之间的显着差异

据我所知,与在 Python 或 Node.js 中运行的相同模型相比,在浏览器中运行的 tfjs 模型的层(目前仅在 Chrome 和 Firefox 中测试)在输出值上会有小的数值差异。模型所有层的这些微小差异的累积效应会导致输出出现相当显着的差异。有关此示例,请参见此处。

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

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

4

1 回答 1

0

这个答案是基于我个人的观察。因此,它是有争议的,没有太多证据支持。为了使 16 位模型的精度接近 32 位模型,我遵循的一些方法是:

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

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

于 2020-05-06T07:01:50.087 回答