TensorRT IRNNv2Layer

wujianming_110117發表於2020-11-03

TensorRT IRNNv2Layer

IRNNv2Layer層實現遞迴層,如遞迴神經網路(RNN)、門控遞迴單元(GRU)和長短期記憶(LSTM)。支援的型別有RNN、GRU和LSTM。它執行一個遞迴操作,其中操作由幾個著名的遞迴神經網路(RNN)“單元”之一定義。

圖層說明

該層接受輸入序列X,初始隱藏狀態H0,如果該單元是長短期儲存器(LSTM)單元,則為初始單元狀態C0,併產生一個輸出Y,該輸出Y表示跨T個時間步計算的最終RNN“子層”的輸出(見下文)。可選地,該層還可以產生表示最終隱藏狀態的輸出hT,並且,如果單元是LSTM單元,則輸出cT表示最終單元狀態。

將單元的操作定義為函式G(x,h,c)。此函式接受向量輸入x、h和c,併產生最多兩個向量輸出h’和c’,表示執行單元操作後的隱藏狀態和單元狀態。

在預設(單向)配置中,RNNv2層應用如下圖所示的Gas:

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

another layer are dropped.

network->markOutput(*pred->getOutput(1));

pred->getOutput(1)->setType(DataType::kINT32);

rnn->getOutput(1)->setName(HIDDEN_OUT_BLOB_NAME);

network->markOutput(*rnn->getOutput(1));

if
(rnn->getOperation() == RNNOperation::kLSTM)

{

rnn->getOutput(2)->setName(CELL_OUT_BLOB_NAME);

network->markOutput(*rnn->getOutput(2));

};

See the C++ class IRNNv2Layer or the Python
class IRNNv2Layer for further details.

  1. RNNv2 Layer Setup

網路的第一層是RNN層。這是在addRNNv2Layer()函式中新增和配置的。該層由以下配置引數組成。

操作

這定義了RNN單元的操作。支援的操作目前有relu、LSTM、GRU和tanh。

方向

這定義了RNN是單向的還是雙向的(BiRNN)。

輸入模式

這定義了RNN的第一層是執行矩陣乘法(線性模式),還是跳過矩陣乘法(跳過模式)。

例如,在sampleCharRNN中使用的網路中,我們使用了一個線性的、單向的LSTM單元,其中包含層數為層數的層數。下面的程式碼顯示瞭如何建立這個RNNv2層。

auto rnn =network->addRNNv2(*data, LAYER_COUNT, HIDDEN_SIZE, SEQ_SIZE, RNNOperation::kLSTM);

注:對於RNNv2層,需要單獨設定權重和偏差。有關詳細資訊,請參見RNNv2層-可選輸入。

有關更多資訊,請參閱TensorRT API文件。

  1. RNNv2 Layer - Optional Inputs

如果存在需要將hidden和cell狀態預初始化為非零值的情況,那麼可以通過setHiddenState和setCellState呼叫對它們進行預初始化。這些是RNN的可選輸入。

C++ code snippet

rnn->setHiddenState(*hiddenIn);

if(rnn->getOperation() == RNNOperation::kLSTM)

rnn->setCellState(*cellIn);

Python code snippet

rnn.hidden_state =hidden_in

if rnn.op ==trt.RNNOperation.LSTM:

rnn.cell_state =cell_in

相關文章