变量初始化和数据预处理初始化在同一子图导致训练异常
2022/08/16
83
问题信息
问题来源 | 产品大类 | 产品子类 | 关键字 |
---|---|---|---|
官方 | 模型训练 | TensorFlow | 变量初始化、数据预处理初始化 |
问题现象描述
某些网络,例如LeNet网络迁移至昇腾AI处理器上训练时,loss不收敛,精度很低且不变。
同时发现变量初始化全0。
原因分析
分析用户的训练脚本:
sess.run(tf.group( tf.global_variables_initializer(), # 变量初始化 tf.local_variables_initializer(), # 变量初始化 iterator.initializer # 数据预处理初始化 ))
基于上面这种写法,TF在图拆分时,会将变量初始化和数据预处理初始化在同一子图中,变量初始化需要下沉到Device侧执行,而数据预处理初始化无法下沉,导致整个子图无法下沉到昇腾AI处理器。
变量初始化在Host侧执行,会导致初始化全0。
解决措施
为保证TF在图拆分时,将变量初始化和数据预处理初始化拆分成不同的子图,建议用户脚本分开执行:
sess.run(tf.group( tf.global_variables_initializer(), # 变量初始化 tf.local_variables_initializer(), # 变量初始化 )) sess.run(iterator.initializer) # 数据预处理初始化
本页内容