下载
中文
注册

Keras迁移

若原始TensorFlow网络基于Keras API构造,可参见本节了解手工迁移全流程。

Keras简介

Keras和Estimator类似,都属于TensorFlow高阶API,提供了方便的构图功能,并对训练、评估、验证、导出提供了方便的接口。使用TensorFlow的Keras API进行训练脚本开发的一般步骤为:

  1. 数据预处理。
  2. 模型搭建。
  3. 模型编译。
  4. 模型训练。

当前仅支持通过TensorFlow的Keras API编写的训练脚本,而不支持原生Keras API。

下面介绍如何迁移Keras训练脚本,以便在昇腾AI处理器上进行训练。

头文件增加

对于以下步骤中涉及修改的python文件,新增以下头文件引用,用于导入NPU相关库。

1
from npu_bridge.npu_init import *

引入上述头文件后,训练脚本默认在昇腾AI处理器执行。

迁移点说明

创建一个TensorFlow会话并且注册Keras,并增加相关配置项以便在昇腾AI处理器执行训练。同时在训练结束时,关闭会话。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
import tensorflow as tf
import tensorflow.python.keras as keras
from tensorflow.python.keras import backend as K
from npu_bridge.npu_init import *

# 增加session配置“allow_soft_placement=True”,允许TensorFlow自动分配设备。
sess_config = tf.ConfigProto(allow_soft_placement=True)
# 添加名字为“NpuOptimizer”的NPU优化器,网络编译时,NPU只会遍历“NpuOptimizer”下的session配置。
custom_op = sess_config.graph_options.rewrite_options.custom_optimizers.add()
custom_op.name = "NpuOptimizer"
# 显式关闭TensorFlow的remapping、memory_optimization功能,避免与NPU中的功能冲突。
sess_config.graph_options.rewrite_options.remapping = RewriterConfig.OFF
sess_config.graph_options.rewrite_options.memory_optimization = RewriterConfig.OFF
sess = tf.Session(config=sess_config)
K.set_session(sess)

#数据预处理...
#模型搭建...
#模型编译...
#模型训练...

sess.close()

通过以上配置迁移后,一次session.run调用在昇腾AI处理器执行训练迭代的次数固定为1,如需减少Host与Device间的交互次数,缩短训练时长,需要通过model_to_npu_estimator接口,将通过Keras构建的模型转换为NPUEstimator对象,同时通过NPURunConfig中的iterations_per_loop参数,指定一次session.run调用时在昇腾AI处理器执行训练迭代的次数,具体请参考Keras模式下使能训练迭代循环下沉