---
title: Keras迁移
description: "若原始TensorFlow网络基于Keras API构造，可参见本节了解手工迁移全流程。"
url: https://www.hiascend.com/document/detail/zh/TensorFlowCommercial/latest/migration/tfmigr1/tfmigr1_000020.html
sourcePath: /source/zh/TensorFlowCommercial/900/migration/tfmigr1/tfmigr1_000020.html
indexId: 27bb2d9df199481483c69d7882f93d36c4b61809a27b53e21c283ec8efaee37873
---
# 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相关库。

```
from npu_bridge.npu_init import *
```

引入上述头文件后，训练脚本默认在NPU执行。


#### 迁移点说明

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

```
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模式下使能训练迭代循环下沉。
