TensorRT IRNNv2Layer
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.
网络的第一层是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文档。
如果存在需要将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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)