在训练活动识别模型时观察不同机器中不同的模型性能

问题描述

我发现我的模型在两台不同的机器(笔记本电脑和 PC)上具有不同的性能(训练和验证准确度)。使用的代码和数据是一样的。

所以:

  • 在笔记本电脑上训练和验证(验证准确率 ~91%)
  • 将相同的 jupyter 笔记本和数据通过(通过 Box 手动移动,很快将移动到版本控制的存储库)
  • 在 PC 上进行训练和验证(val 准确率约 33%) - 它是一个三级分类器,因此基本上没有学到任何东西
  • 观察到千差万别的训练和验证准确度

我使用的库版本存在差异。

笔记本电脑(适用于工作站的 Windows 10 专业版): Tensorflow(仅限 cpu)(2.4.1) Keras - 2.4.1

PC(Windows 10 教育版): Tensorflow(启用 GPU)- 2.1.0 Keras - 2.1.0

有关模型架构的更多信息 - 基于视频分类的活动分类。时间分布的 CNN(经过训练的移动网络,最后 9 层未经训练)和一个 GRU

任何建议(我正在尝试将一个训练有素的模型从性能良好的笔记本电脑移到 PC 上,并再次在训练集上进行测试,看看我得到了什么性能。如果它很好,我可以确保新 PC 中的数据没有以某种方式损坏)

解决方法

首先,为了获得相同的结果,您应该在两台机器上使用相同的 tfkeras 库版本;否则就不可能跟踪这些变化。其次,GPU计算一般使用不同的数据大小,影响精度;您可以同时使用 CPU 或 GPU,但不应更改。最后,您应该在运行代码时设置一个种子:

import tensorflow as tf
import random,os
import numpy as np

def set_seed(s):
   os.environ['PYTHONHASHSEED']=str(SEED)
   os.environ['TF_CUDNN_DETERMINISTIC'] = '1'  # new flag present in tf 2.0+
   random.seed(SEED)
   np.random.seed(SEED)
   tf.random.set_seed(0)