---
title: npu_dynamic_rnn
description: "| 产品 | 是否支持 |"
url: https://www.hiascend.com/document/detail/zh/TensorFlowCommercial/latest/migration/tfmigr1/tfmigr1_tfadapi_0075.html
sourcePath: /source/zh/TensorFlowCommercial/900/migration/tfmigr1/tfmigr1_tfadapi_0075.html
indexId: c716b29e70d82e33cba28a90f3a8850862af3ad6d9ba2a02e9492f204027d10f79
---
# npu_dynamic_rnn

#### 产品支持情况

| 产品 | 是否支持 |
| --- | --- |
| Atlas 350 加速卡 | √ |
| Atlas A3 训练系列产品 / Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品 / Atlas A2 推理系列产品 | √ |
| Atlas 200I/500 A2 推理产品 | ☓ |
| Atlas 推理系列产品 | ☓ |
| Atlas 训练系列产品 | √ |


#### 功能说明

创建由RNNCell指定的高性能神经网络。


#### 函数原型

```
def npu_dynamic_rnn(cell,
                    inputs,
                    initial_state=None,
                    dtype=None,
                    sequence_length=None,
                    scope=None)
```


#### 参数说明

| 参数名 | 输入/输出 | 描述 |
| --- | --- | --- |
| cell | 输入 | RNNCell的实例，为LSTM、GRU等的记忆单元。 |
| inputs | 输入 | 长度为T的输入列表，每一个都是shape为[max\_time，batch\_size，input\_size]或此类元素的嵌套元组。 |
| initial\_state | 输入 | （可选）RNN的初始状态。如果cell.state\_size是整数，则必须是shape为[batch\_size，cell.state\_size]的Tensor；如果cell.state\_size是一个元组，则它应该是cell.state\_size中形状为[batch\_size，s]的张量的元组。 |
| dtype | 输入 | （可选）初始状态和预期输出的数据类型。如果initial\_state为空或RNN状态具有异构dtype，则该参数为必需。 |
| sequence\_length | 输入 | 指定输入中每个序列的长度。一个int32或int64向量（张量）大小为[batch\_size]，值为[0，T）。 |
| scope | 输入 | 创建子图的VariableScope。 默认为“rnn”。 |


#### 返回值

tensor：RNN的输出Tensor。

state：最终状态。


#### 约束说明

适用于NMT网络训练脚本的while_loop循环展开场景。


#### 调用示例

```
from npu_bridge.npu_init import *
# 原代码：
inputs = npu_unstack(self.encoder_emb_inp, axis=0)
encoder_outputs , encoder_state = static_rnn(
    cell,
    inputs,
    dtype= dtype,
    sequence_length = sequence_length
     )
encoder_outputs = npu_stack( encoder_outputs, axis=0 )
# 替换成：
encoder_outputs , encoder_state = npu_rnn.npu_dynamic_rnn(
    cell,
    inputs=self.encoder_emb_inp,
    dtype= dtype,
    sequence_length= sequence_length)
```
