keras - 在训练活动识别模型时观察不同机器中不同的模型性能
问题描述
我发现我的模型在两台不同的机器(笔记本电脑和 PC)上具有不同的性能(训练和验证精度)。使用的代码和数据相同。
所以:
- 在笔记本电脑上训练和验证(val 准确率 ~91%)
- 将相同的 jupyter 笔记本和数据通过(手动通过 Box,将很快移至版本控制的存储库)移动到 PC
- 在 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 中的数据没有以某种方式损坏)
解决方案
首先,为了获得相同的结果,您应该在两台机器上使用相同的tf
库keras
版本;否则将无法跟踪更改。其次,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)
推荐阅读
- php - 使用 static::MY_CONST vs self::MY_CONST vs SomeClass::MY_CONST 引用 PHP 7 中的常量
- amazon - 是否可以创建一个自定义技能来阻止 Echo dot 上的所有技能并仅使用密码解锁?
- php - 表中的多行数据到 JSON 数组
- angular - 除非安装 Redux Devtools,否则 ngrx Angular 应用程序无法运行
- python - 函数内部的类初始化?
- c# - 类和文本的多重绑定 StringFormat
- r - 根据前面的标签重新排列特定的单元格
- python-3.x - 在烧瓶应用程序中设置 python dash 仪表板
- javascript - 基于多事件的jQuery滚动功能
- laravel-5.6 - Laravel-'auth' 中间件不起作用