OpenCV 4.10.0
开源计算机视觉库
|
GRU 循环单层。 更多...
#include <opencv2/dnn/all_layers.hpp>
静态公共成员函数 | |
static Ptr< GRULayer > | create (const LayerParams ¶ms) |
从 cv::Algorithm 继承的静态公共成员函数 | |
template<typename _Tp > | |
static Ptr< _Tp > | load (const String &filename, const String &objname=String()) |
从文件中加载算法。 | |
template<typename _Tp > | |
static Ptr< _Tp > | loadFromString (const String &strModel, const String &objname=String()) |
从字符串加载算法。 | |
template<typename _Tp > | |
static Ptr< _Tp > | read (const FileNode &fn) |
从文件节点读取算法。 | |
其他继承成员 | |
从 cv::dnn::Layer 继承的公共成员函数 | |
Layer () | |
Layer (const LayerParams ¶ms) | |
仅初始化 name、type 和 blobs 字段。 | |
virtual | ~Layer () |
virtual void | applyHalideScheduler (Ptr< BackendNode > &node, const std::vector< Mat * > &inputs, const std::vector< Mat > &outputs, int targetId) const |
基于层超参数的自动 Halide 调度。 | |
virtual void | finalize (const std::vector< Mat * > &input, std::vector< Mat > &output) |
根据输入、输出和 blob 计算并设置内部参数。 | |
std::vector< Mat > | finalize (const std::vector< Mat > &inputs) |
这是一个重载成员函数,为方便起见而提供。 它与上述函数的不同之处仅在于它接受的参数。 | |
void | finalize (const std::vector< Mat > &inputs, std::vector< Mat > &outputs) |
这是一个重载成员函数,为方便起见而提供。 它与上述函数的不同之处仅在于它接受的参数。 | |
virtual void | finalize (InputArrayOfArrays inputs, OutputArrayOfArrays outputs) |
根据输入、输出和 blob 计算并设置内部参数。 | |
virtual void | forward (InputArrayOfArrays inputs, OutputArrayOfArrays outputs, OutputArrayOfArrays internals) |
根据给定的 input blob 计算输出 blobs 。 | |
virtual void | forward (std::vector< Mat * > &input, std::vector< Mat > &output, std::vector< Mat > &internals) |
根据给定的 input blob 计算输出 blobs 。 | |
void | forward_fallback (InputArrayOfArrays inputs, OutputArrayOfArrays outputs, OutputArrayOfArrays internals) |
根据给定的 input blob 计算输出 blobs 。 | |
virtual int64 | getFLOPS (const std::vector< MatShape > &inputs, const std::vector< MatShape > &outputs) const |
virtual bool | getMemoryShapes (const std::vector< MatShape > &inputs, const int requiredOutputs, std::vector< MatShape > &outputs, std::vector< MatShape > &internals) const |
virtual void | getScaleShift (Mat &scale, Mat &shift) const |
返回具有逐通道乘法和加法层的参数。 | |
virtual void | getScaleZeropoint (float &scale, int &zeropoint) const |
返回层的缩放比例和零点。 | |
virtual Ptr< BackendNode > | initCann (const std::vector< Ptr< BackendWrapper > > &inputs, const std::vector< Ptr< BackendWrapper > > &outputs, const std::vector< Ptr< BackendNode > > &nodes) |
返回一个 CANN 后端节点。 | |
virtual Ptr< BackendNode > | initCUDA (void *context, const std::vector< Ptr< BackendWrapper > > &inputs, const std::vector< Ptr< BackendWrapper > > &outputs) |
返回一个 CUDA 后端节点。 | |
virtual Ptr< BackendNode > | initHalide (const std::vector< Ptr< BackendWrapper > > &inputs) |
返回 Halide 后端节点。 | |
virtual Ptr< BackendNode > | initNgraph (const std::vector< Ptr< BackendWrapper > > &inputs, const std::vector< Ptr< BackendNode > > &nodes) |
virtual Ptr< BackendNode > | initTimVX (void *timVxInfo, const std::vector< Ptr< BackendWrapper > > &inputsWrapper, const std::vector< Ptr< BackendWrapper > > &outputsWrapper, bool isLast) |
返回一个 TimVX 后端节点。 | |
virtual Ptr< BackendNode > | initVkCom (const std::vector< Ptr< BackendWrapper > > &inputs, std::vector< Ptr< BackendWrapper > > &outputs) |
virtual Ptr< BackendNode > | initWebnn (const std::vector< Ptr< BackendWrapper > > &inputs, const std::vector< Ptr< BackendNode > > &nodes) |
virtual int | inputNameToIndex (String inputName) |
返回输入数组中输入 blob 的索引。 | |
virtual int | outputNameToIndex (const String &outputName) |
返回输出数组中输出 blob 的索引。 | |
void | run (const std::vector< Mat > &inputs, std::vector< Mat > &outputs, std::vector< Mat > &internals) |
分配层并计算输出。 | |
virtual bool | setActivation (const Ptr< ActivationLayer > &layer) |
尝试将后续激活层附加到该层,即在部分情况下进行层融合。 | |
void | setParamsFrom (const LayerParams ¶ms) |
仅初始化 name、type 和 blobs 字段。 | |
virtual bool | supportBackend (int backendId) |
询问层是否支持特定后端进行计算。 | |
virtual Ptr< BackendNode > | tryAttach (const Ptr< BackendNode > &node) |
实现层融合。 | |
virtual bool | tryFuse (Ptr< Layer > &top) |
尝试将当前层与下一层融合。 | |
virtual bool | tryQuantize (const std::vector< std::vector< float > > &scales, const std::vector< std::vector< int > > &zeropoints, LayerParams ¶ms) |
尝试量化给定层并计算定点实现所需的量化参数。 | |
virtual void | unsetAttached () |
“分离”附加到特定层的所有层。 | |
virtual bool | updateMemoryShapes (const std::vector< MatShape > &inputs) |
从 cv::Algorithm 继承的公共成员函数 | |
算法 () | |
virtual | ~算法 () |
virtual void | 清除 () |
清除算法状态。 | |
virtual bool | 为空 () const |
如果 算法 为空(例如,在最开始或读取失败后),则返回 true。 | |
virtual 字符串 | 获取默认名称 () const |
virtual void | 读取 (const FileNode &fn) |
从文件存储中读取算法参数。 | |
virtual void | 保存 (const 字符串 &filename) const |
void | 写入 (const Ptr< FileStorage > &fs, const 字符串 &name=字符串()) const |
virtual void | 写入 (FileStorage &fs) const |
将算法参数存储在文件存储中。 | |
void | 写入 (FileStorage &fs, const 字符串 &name) const |
从 cv::dnn::Layer 继承的公共属性 | |
std::vector< Mat > | 斑点 |
必须在此处存储学习到的参数列表,以便可以通过使用 Net::getParam() 读取它们。 | |
字符串 | 名称 |
层实例的名称,可用于日志记录或其他内部用途。 | |
int | 首选目标 |
层转发的首选目标 | |
字符串 | 类型 |
用于由层工厂创建层的类型名称。 | |
从 cv::Algorithm 继承的受保护成员函数 | |
void | 写入格式 (FileStorage &fs) const |
GRU 循环单层。
接受输入序列并计算批次中每个元素的最终隐藏状态。
T
、N
、data_dims
],其中 T
是序列长度,N
是批次大小,data_dims
是输入大小T
、N
、D
* hidden_size
],如果层是双向的,则 D = 2
,否则 D = 1
取决于以下属性
最终隐藏状态 \( h_t \) 通过以下公式计算
\begin{eqnarray*} r_t = \sigma(W_{ir} x_t + b_{ir} + W_{hr} h_{(t-1)} + b_{hr}) \\ z_t = \sigma(W_{iz} x_t + b_{iz} + W_{hz} h_{(t-1)} + b_{hz}) \\ n_t = \tanh(W_{in} x_t + b_{in} + r_t \odot (W_{hn} h_{(t-1)}+ b_{hn})) \\ h_t = (1 - z_t) \odot n_t + z_t \odot h_{(t-1)} \\ \end{eqnarray*}
其中 \(x_t\) 是当前输入,\(h_{(t-1)}\) 是先前或初始隐藏状态。
\(W_{x?}\)、\(W_{h?}\) 和 \(b_{?}\) 是学习到的权重,表示为矩阵:\(W_{x?} \in R^{N_h \times N_x}\)、\(W_{h?} \in R^{N_h \times N_h}\)、\(b_? \in R^{N_h}\)。
\(\odot\) 是逐元素乘法运算。
|
静态 |
创建 GRU 层的实例