<!-- IR -->
<tab type="usergroup" title="Intermediate Representation and Operations Sets" url="@ref openvino_docs_MO_DG_IR_and_opsets">
<tab type="usergroup" title="Available Operations Sets" url="@ref openvino_docs_ops_opset">
+ <tab type="user" title="opset5 Specification" url="@ref openvino_docs_ops_opset5"/>
<tab type="user" title="opset4 Specification" url="@ref openvino_docs_ops_opset4"/>
<tab type="user" title="opset3 Specification" url="@ref openvino_docs_ops_opset3"/>
<tab type="user" title="opset2 Specification" url="@ref openvino_docs_ops_opset2"/>
<tab type="user" title="Floor_1" url="@ref openvino_docs_ops_arithmetic_Floor_1"/>
<tab type="user" title="GRN-1" url="@ref openvino_docs_ops_normalization_GRN_1"/>
<tab type="user" title="GRUCell-3" url="@ref openvino_docs_ops_sequence_GRUCell_3"/>
+ <tab type="user" title="GRUSequence-5" url="@ref openvino_docs_ops_sequence_GRUSequence_5"/>
<tab type="user" title="GatherTree-1" url="@ref openvino_docs_ops_movement_GatherTree_1"/>
<tab type="user" title="Gather-1" url="@ref openvino_docs_ops_movement_Gather_1"/>
<tab type="user" title="Gelu-2" url="@ref openvino_docs_ops_activation_GELU_2"/>
<tab type="user" title="Reverse" url="@ref openvino_docs_ops_movement_Reverse_1"/>
<tab type="user" title="ReverseSequence-1" url="@ref openvino_docs_ops_movement_ReverseSequence_1"/>
<tab type="user" title="RNNCell-3" url="@ref openvino_docs_ops_sequence_RNNCell_3"/>
+ <tab type="user" title="RNNSequence-5" url="@ref openvino_docs_ops_sequence_RNNSequence_5"/>
<tab type="user" title="ROIAlign-3" url="@ref openvino_docs_ops_detection_ROIAlign_3"/>
<tab type="user" title="ROIPooling-1" url="@ref openvino_docs_ops_detection_ROIPooling_1"/>
<tab type="user" title="ScatterElementsUpdate-3" url="@ref openvino_docs_ops_movement_ScatterElementsUpdate_3"/>
| OpenVINO™ Version | Actual Operations Set |
| :---------------- | :------------------------------- |
+| 2021.2 | [opset5](opset5.md) |
| 2021.1 | [opset4](opset4.md) |
| 2020.4 | [opset3](opset3.md) |
| 2020.3 | [opset2](opset2.md) |
--- /dev/null
+# Operation Set `opset5` Specification {#openvino_docs_ops_opset5}
+
+This specification document describes `opset5` operation set supported in OpenVINO.
+Support for each particular operation from the list below depends on the capabilities available in a inference plugin
+and may vary among different hardware platforms and devices. Examples of operation instances are expressed as IR V10 xml
+snippets. Such IR is generated by the Model Optimizer. The semantics match corresponding nGraph operation classes
+declared in `namespace opset5`.
+
+
+## Table of Contents <a name="toc"></a>
+
+* [Abs](arithmetic/Abs_1.md)
+* [Acos](arithmetic/Acos_1.md)
+* [Acosh](arithmetic/Acosh_3.md)
+* [Add](arithmetic/Add_1.md)
+* [Asin](arithmetic/Asin_1.md)
+* [Asinh](arithmetic/Asinh_3.md)
+* [Assign](infrastructure/Assign_3.md)
+* [Atan](arithmetic/Atan_1.md)
+* [Atanh](arithmetic/Atanh_3.md)
+* [AvgPool](pooling/AvgPool_1.md)
+* [BatchNormInference](normalization/BatchNormInference_1.md)
+* [BatchToSpace](movement/BatchToSpace_2.md)
+* [BinaryConvolution](convolution/BinaryConvolution_1.md)
+* [Broadcast](movement/Broadcast_3.md)
+* [Bucketize](condition/Bucketize_3.md)
+* [CTCGreedyDecoder](sequence/CTCGreedyDecoder_1.md)
+* [CTCLoss](sequence/CTCLoss_4.md)
+* [Ceiling](arithmetic/Ceiling_1.md)
+* [Clamp](activation/Clamp_1.md)
+* [Concat](movement/Concat_1.md)
+* [Constant](infrastructure/Constant_1.md)
+* [Convert](type/Convert_1.md)
+* [ConvertLike](type/ConvertLike_1.md)
+* [Convolution](convolution/Convolution_1.md)
+* [ConvolutionBackpropData](convolution/ConvolutionBackpropData_1.md)
+* [Cos](arithmetic/Cos_1.md)
+* [Cosh](arithmetic/Cosh_1.md)
+* [CumSum](arithmetic/CumSum_3.md)
+* [DeformableConvolution](convolution/DeformableConvolution_1.md)
+* [DeformablePSROIPooling](detection/DeformablePSROIPooling_1.md)
+* [DepthToSpace](movement/DepthToSpace_1.md)
+* [DetectionOutput](detection/DetectionOutput_1.md)
+* [Divide](arithmetic/Divide_1.md)
+* [Elu](activation/Elu_1.md)
+* [EmbeddingBagOffsetsSum](sparse/EmbeddingBagOffsetsSum_3.md)
+* [EmbeddingBagPackedSum](sparse/EmbeddingBagPackedSum_3.md)
+* [EmbeddingSegmentsSum](sparse/EmbeddingSegmentsSum_3.md)
+* [Equal](comparison/Equal_1.md)
+* [Erf](arithmetic/Erf_1.md)
+* [Exp](activation/Exp_1.md)
+* [ExtractImagePatches](movement/ExtractImagePatches_3.md)
+* [FakeQuantize](quantization/FakeQuantize_1.md)
+* [Floor](arithmetic/Floor_1.md)
+* [FloorMod](arithmetic/FloorMod_1.md)
+* [Gather](movement/Gather_1.md)
+* [GatherTree](movement/GatherTree_1.md)
+* [Gelu](activation/GELU_2.md)
+* [Greater](comparison/Greater_1.md)
+* [GreaterEqual](comparison/GreaterEqual_1.md)
+* [GRN](normalization/GRN_1.md)
+* [GroupConvolution](convolution/GroupConvolution_1.md)
+* [GroupConvolutionBackpropData](convolution/GroupConvolutionBackpropData_1.md)
+* [GRUCell](sequence/GRUCell_3.md)
+* [GRUSequence](sequence/GRUSequence_5.md)
+* [HardSigmoid](activation/HardSigmoid_1.md)
+* [HSwish](activation/HSwish_4.md)
+* [Interpolate](image/Interpolate_4.md)
+* [Less](comparison/Less_1.md)
+* [LessEqual](comparison/LessEqual_1.md)
+* [Log](arithmetic/Log_1.md)
+* [LogicalAnd](logical/LogicalAnd_1.md)
+* [LogicalNot](logical/LogicalNot_1.md)
+* [LogicalOr](logical/LogicalOr_1.md)
+* [LogicalXor](logical/LogicalXor_1.md)
+* [LRN](normalization/LRN_1.md)
+* [LSTMCell](sequence/LSTMCell_1.md)
+* [LSTMSequence](sequence/LSTMSequence_1.md)
+* [MatMul](matrix/MatMul_1.md)
+* [MaxPool](pooling/MaxPool_1.md)
+* [Maximum](arithmetic/Maximum_1.md)
+* [Minimum](arithmetic/Minimum_1.md)
+* [Mish](activation/Mish_4.md)
+* [Mod](arithmetic/Mod_1.md)
+* [MVN](normalization/MVN_1.md)
+* [Multiply](arithmetic/Multiply_1.md)
+* [Negative](arithmetic/Negative_1.md)
+* [NonMaxSuppression](sort/NonMaxSuppression_4.md)
+* [NonZero](condition/NonZero_3.md)
+* [NormalizeL2](normalization/NormalizeL2_1.md)
+* [NotEqual](comparison/NotEqual_1.md)
+* [OneHot](sequence/OneHot_1.md)
+* [Pad](movement/Pad_1.md)
+* [Parameter](infrastructure/Parameter_1.md)
+* [Power](arithmetic/Power_1.md)
+* [PReLU](activation/PReLU_1.md)
+* [PriorBoxClustered](detection/PriorBoxClustered_1.md)
+* [PriorBox](detection/PriorBox_1.md)
+* [Proposal](detection/Proposal_4.md)
+* [PSROIPooling](detection/PSROIPooling_1.md)
+* [Range](generation/Range_4.md)
+* [ReLU](activation/ReLU_1.md)
+* [ReadValue](infrastructure/ReadValue_3.md)
+* [ReduceL1](reduction/ReduceL1_4.md)
+* [ReduceL2](reduction/ReduceL2_4.md)
+* [ReduceLogicalAnd](reduction/ReduceLogicalAnd_1.md)
+* [ReduceLogicalOr](reduction/ReduceLogicalOr_1.md)
+* [ReduceMax](reduction/ReduceMax_1.md)
+* [ReduceMean](reduction/ReduceMean_1.md)
+* [ReduceMin](reduction/ReduceMin_1.md)
+* [ReduceProd](reduction/ReduceProd_1.md)
+* [ReduceSum](reduction/ReduceSum_1.md)
+* [RegionYolo](detection/RegionYolo_1.md)
+* [ReorgYolo](detection/ReorgYolo_1.md)
+* [Reshape](shape/Reshape_1.md)
+* [Result](infrastructure/Result_1.md)
+* [Reverse](movement/Reverse_1.md)
+* [ReverseSequence](movement/ReverseSequence_1.md)
+* [RNNCell](sequence/RNNCell_3.md)
+* [RNNSequence](sequence/RNNSequence_5.md)
+* [ROIAlign](detection/ROIAlign_3.md)
+* [ROIPooling](detection/ROIPooling_1.md)
+* [ScatterElementsUpdate](movement/ScatterElementsUpdate_3.md)
+* [ScatterNDUpdate](movement/ScatterNDUpdate_3.md)
+* [ScatterUpdate](movement/ScatterUpdate_3.md)
+* [Select](condition/Select_1.md)
+* [Selu](arithmetic/Selu_1.md)
+* [ShapeOf](shape/ShapeOf_3.md)
+* [ShuffleChannels](movement/ShuffleChannels_1.md)
+* [Sigmoid](activation/Sigmoid_1.md)
+* [Sign](arithmetic/Sign_1.md)
+* [Sin](arithmetic/Sin_1.md)
+* [Sinh](arithmetic/Sinh_1.md)
+* [SoftMax](activation/SoftMax_1.md)
+* [SoftPlus](activation/SoftPlus_4.md)
+* [SpaceToBatch](movement/SpaceToBatch_2.md)
+* [SpaceToDepth](movement/SpaceToDepth_1.md)
+* [Split](movement/Split_1.md)
+* [Sqrt](arithmetic/Sqrt_1.md)
+* [SquaredDifference](arithmetic/SquaredDifference_1.md)
+* [Squeeze](shape/Squeeze_1.md)
+* [StridedSlice](movement/StridedSlice_1.md)
+* [Subtract](arithmetic/Subtract_1.md)
+* [Swish](activation/Swish_4.md)
+* [Tan](arithmetic/Tan_1.md)
+* [Tanh](arithmetic/Tanh_1.md)
+* [TensorIterator](infrastructure/TensorIterator_1.md)
+* [Tile](movement/Tile_1.md)
+* [TopK](sort/TopK_3.md)
+* [Transpose](movement/Transpose_1.md)
+* [Unsqueeze](shape/Unsqueeze_1.md)
+* [VariadicSplit](movement/VariadicSplit_1.md)
--- /dev/null
+## GRUSequence <a name="GRUSequence"></a> {#openvino_docs_ops_sequence_GRUSequence_5}
+
+**Versioned name**: *GRUSequence-5*
+
+**Category**: *Sequence processing*
+
+**Short description**: *GRUSequence* operation represents a series of GRU cells. Each cell is implemented as <a href="#GRUCell">GRUCell</a> operation.
+
+**Detailed description**
+
+A single cell in the sequence is implemented in the same way as in <a href="#GRUCell">GRUCell</a> operation. *GRUSequence* represents a sequence of GRU cells. The sequence can be connected differently depending on `direction` attribute that specifies the direction of traversing of input data along sequence dimension or specifies whether it should be a bidirectional sequence. The most of the attributes are in sync with the specification of ONNX GRU operator defined <a href="https://github.com/onnx/onnx/blob/master/docs/Operators.md#gru">GRUCell</a>.
+
+
+**Attributes**
+
+* *hidden_size*
+
+ * **Description**: *hidden_size* specifies hidden state size.
+ * **Range of values**: a positive integer
+ * **Type**: `int`
+ * **Default value**: None
+ * **Required**: *yes*
+
+* *activations*
+
+ * **Description**: *activations* specifies activation functions for gates, there are two gates, so two activation functions should be specified as a value for this attributes
+ * **Range of values**: any combination of *relu*, *sigmoid*, *tanh*
+ * **Type**: a list of strings
+ * **Default value**: *sigmoid,tanh*
+ * **Required**: *no*
+
+* *activations_alpha, activations_beta*
+
+ * **Description**: *activations_alpha, activations_beta* attributes of functions; applicability and meaning of these attributes depends on choosen activation functions
+ * **Range of values**: a list of floating-point numbers
+ * **Type**: `float[]`
+ * **Default value**: None
+ * **Required**: *no*
+
+* *clip*
+
+ * **Description**: *clip* specifies bound values *[-C, C]* for tensor clipping. Clipping is performed before activations.
+ * **Range of values**: a positive floating-point number
+ * **Type**: `float`
+ * **Default value**: *infinity* that means that the clipping is not applied
+ * **Required**: *no*
+
+* *direction*
+
+ * **Description**: Specify if the RNN is forward, reverse, or bidirectional. If it is one of *forward* or *reverse* then `num_directions = 1`, if it is *bidirectional*, then `num_directions = 2`. This `num_directions` value specifies input/output shape requirements.
+ * **Range of values**: *forward*, *reverse*, *bidirectional*
+ * **Type**: `string`
+ * **Default value**: None
+ * **Required**: *Yes*
+
+* *linear_before_reset*
+
+ * **Description**: *linear_before_reset* flag denotes if the layer behaves according to the modification of *GRUCell* described in the formula in the [ONNX documentation](https://github.com/onnx/onnx/blob/master/docs/Operators.md#GRU).
+ * **Range of values**: True or False
+ * **Type**: `boolean`
+ * **Default value**: False
+ * **Required**: *no*
+
+**Inputs**
+
+* **1**: `X` - 3D tensor of type *T1* `[batch_size, seq_length, input_size]`, input data. It differs from GRUCell 1st input only by additional axis with size `seq_length`. **Required.**
+
+* **2**: `initial_hidden_state` - 3D tensor of type *T1* `[batch_size, num_directions, hidden_size]`, input hidden state data. **Required.**
+
+* **3**: `sequence_lengths` - 1D tensor of type *T2* `[batch_size]`, specifies real sequence lengths for each batch element. **Required.**
+
+* **4**: `W` - 3D tensor of type *T1* `[num_directions, 3 * hidden_size, input_size]`, the weights for matrix multiplication, gate order: zrh. **Required.**
+
+* **5**: `R` - 3D tensor of type *T1* `[num_directions, 3 * hidden_size, hidden_size]`, the recurrence weights for matrix multiplication, gate order: zrh. **Required.**
+
+* **6**: `B` - 2D tensor of type *T*. If *linear_before_reset* is set to 1, then the shape is `[num_directions, 4 * hidden_size]` - the sum of biases for z and r gates (weights and recurrence weights), the biases for h gate are placed separately. Otherwise the shape is `[num_directions, 3 * hidden_size]`, the sum of biases (weights and recurrence weights). **Required.**
+
+**Outputs**
+
+* **1**: `Y` \96 3D tensor of type *T1* `[batch_size, num_directions, seq_len, hidden_size]`, concatenation of all the intermediate output values of the hidden.
+
+* **2**: `Ho` - 3D tensor of type *T1* `[batch_size, num_directions, hidden_size]`, the last output value of hidden state.
+
+**Types**
+
+* *T1*: any supported floating point type.
+* *T2*: any supported integer type.
+
+**Example**
+```xml
+<layer ... type="GRUSequence" ...>
+ <data hidden_size="128"/>
+ <input>
+ <port id="0">
+ <dim>1</dim>
+ <dim>4</dim>
+ <dim>16</dim>
+ </port>
+ <port id="1">
+ <dim>1</dim>
+ <dim>1</dim>
+ <dim>128</dim>
+ </port>
+ <port id="2">
+ <dim>1</dim>
+ </port>
+ <port id="3">
+ <dim>1</dim>
+ <dim>384</dim>
+ <dim>16</dim>
+ </port>
+ <port id="4">
+ <dim>1</dim>
+ <dim>384</dim>
+ <dim>128</dim>
+ </port>
+ <port id="5">
+ <dim>1</dim>
+ <dim>384</dim>
+ </port>
+ </input>
+ <output>
+ <port id="6">
+ <dim>1</dim>
+ <dim>1</dim>
+ <dim>4</dim>
+ <dim>128</dim>
+ </port>
+ <port id="7">
+ <dim>1</dim>
+ <dim>1</dim>
+ <dim>128</dim>
+ </port>
+ </output>
+</layer>
+```
\ No newline at end of file
--- /dev/null
+## RNNSequence <a name="RNNSequence"></a> {#openvino_docs_ops_sequence_RNNSequence_5}
+
+**Versioned name**: *RNNSequence-5*
+
+**Category**: *Sequence processing*
+
+**Short description**: *RNNSequence* operation represents a series of RNN cells. Each cell is implemented as <a href="#RNNCell">RNNCell</a> operation.
+
+**Detailed description**
+
+A single cell in the sequence is implemented in the same way as in <a href="#RNNCell">RNNCell</a> operation. *RNNSequence* represents a sequence of RNN cells. The sequence can be connected differently depending on `direction` attribute that specifies the direction of traversing of input data along sequence dimension or specifies whether it should be a bidirectional sequence. The most of the attributes are in sync with the specification of ONNX RNN operator defined <a href="https://github.com/onnx/onnx/blob/master/docs/Operators.md#rnn">RNNCell</a>.
+
+
+**Attributes**
+
+* *hidden_size*
+
+ * **Description**: *hidden_size* specifies hidden state size.
+ * **Range of values**: a positive integer
+ * **Type**: `int`
+ * **Default value**: None
+ * **Required**: *yes*
+
+* *activations*
+
+ * **Description**: activation functions for gates
+ * **Range of values**: any combination of *relu*, *sigmoid*, *tanh*
+ * **Type**: a list of strings
+ * **Default value**: *tanh*
+ * **Required**: *no*
+
+* *activations_alpha, activations_beta*
+
+ * **Description**: *activations_alpha, activations_beta* attributes of functions; applicability and meaning of these attributes depends on choosen activation functions
+ * **Range of values**: a list of floating-point numbers
+ * **Type**: `float[]`
+ * **Default value**: None
+ * **Required**: *no*
+
+* *clip*
+
+ * **Description**: *clip* specifies bound values *[-C, C]* for tensor clipping. Clipping is performed before activations.
+ * **Range of values**: a positive floating-point number
+ * **Type**: `float`
+ * **Default value**: *infinity* that means that the clipping is not applied
+ * **Required**: *no*
+
+* *direction*
+
+ * **Description**: Specify if the RNN is forward, reverse, or bidirectional. If it is one of *forward* or *reverse* then `num_directions = 1`, if it is *bidirectional*, then `num_directions = 2`. This `num_directions` value specifies input/output shape requirements.
+ * **Range of values**: *forward*, *reverse*, *bidirectional*
+ * **Type**: `string`
+ * **Default value**: None
+ * **Required**: *Yes*
+
+**Inputs**
+
+* **1**: `X` - 3D tensor of type *T1* `[batch_size, seq_length, input_size]`, input data. It differs from RNNCell 1st input only by additional axis with size `seq_length`. **Required.**
+
+* **2**: `initial_hidden_state` - 3D tensor of type *T1* `[batch_size, num_directions, hidden_size]`, input hidden state data. **Required.**
+
+* **3**: `sequence_lengths` - 1D tensor of type *T2* `[batch_size]`, specifies real sequence lengths for each batch element. **Required.**
+
+* **4**: `W` - 3D tensor of type *T1* `[num_directions, hidden_size, input_size]`, the weights for matrix multiplication. **Required.**
+
+* **5**: `R` - 3D tensor of type *T1* `[num_directions, hidden_size, hidden_size]`, the recurrence weights for matrix multiplication. **Required.**
+
+* **6**: `B` - 2D tensor of type *T1* `[num_directions, hidden_size]`, the sum of biases (weights and recurrence weights). **Required.**
+
+**Outputs**
+
+* **1**: `Y` \96 3D tensor of type *T1* `[batch_size, num_directions, seq_len, hidden_size]`, concatenation of all the intermediate output values of the hidden.
+
+* **2**: `Ho` - 3D tensor of type *T1* `[batch_size, num_directions, hidden_size]`, the last output value of hidden state.
+
+**Types**
+
+* *T1*: any supported floating point type.
+* *T2*: any supported integer type.
+
+**Example**
+```xml
+<layer ... type="RNNSequence" ...>
+ <data hidden_size="128"/>
+ <input>
+ <port id="0">
+ <dim>1</dim>
+ <dim>4</dim>
+ <dim>16</dim>
+ </port>
+ <port id="1">
+ <dim>1</dim>
+ <dim>1</dim>
+ <dim>128</dim>
+ </port>
+ <port id="2">
+ <dim>1</dim>
+ </port>
+ <port id="3">
+ <dim>1</dim>
+ <dim>128</dim>
+ <dim>16</dim>
+ </port>
+ <port id="4">
+ <dim>1</dim>
+ <dim>128</dim>
+ <dim>128</dim>
+ </port>
+ <port id="5">
+ <dim>1</dim>
+ <dim>128</dim>
+ </port>
+ </input>
+ <output>
+ <port id="6">
+ <dim>1</dim>
+ <dim>1</dim>
+ <dim>4</dim>
+ <dim>128</dim>
+ </port>
+ <port id="7">
+ <dim>1</dim>
+ <dim>1</dim>
+ <dim>128</dim>
+ </port>
+ </output>
+</layer>
+```
\ No newline at end of file
// Check that operation in default opsets
auto isDefaultOpSet = [](const std::string& version) -> bool {
- for (size_t i = 1; i <= 4; i++) {
+ for (size_t i = 1; i <= 5; i++) {
std::string opset_name = "opset" + std::to_string(i);
if (version == opset_name)
return true;
#include <memory>
#include <ngraph/opsets/opset4.hpp>
+#include <ngraph/opsets/opset5.hpp>
#include <ngraph/rt_info.hpp>
#include <ngraph/pattern/op/wrap_type.hpp>
ngraph::pass::BidirectionalLSTMSequenceDecomposition::BidirectionalLSTMSequenceDecomposition() {
- auto lstm_sequence_ngraph = ngraph::pattern::wrap_type<ngraph::op::v5::LSTMSequence>();
+ auto lstm_sequence_ngraph = ngraph::pattern::wrap_type<ngraph::opset5::LSTMSequence>();
ngraph::matcher_pass_callback callback = [](pattern::Matcher &m) {
- auto lstm_sequence = std::dynamic_pointer_cast<ngraph::op::v5::LSTMSequence>(m.get_match_root());
+ auto lstm_sequence = std::dynamic_pointer_cast<ngraph::opset5::LSTMSequence>(m.get_match_root());
if (!lstm_sequence) {
return false;
}
lstm_sequence->get_activations(),
lstm_sequence->get_clip());
- auto lstm_sequence_reverse = std::make_shared<ngraph::op::v5::LSTMSequence>(
+ auto lstm_sequence_reverse = std::make_shared<ngraph::opset5::LSTMSequence>(
lstm_sequence->input_value(0),
H->output(1),
C->output(1),
lstm_sequence->get_activations(),
lstm_sequence->get_clip());
- auto concat_0 = std::make_shared<opset4::Concat>(OutputVector{lstm_sequence_forward->output(0),
+ auto concat_0 = std::make_shared<opset5::Concat>(OutputVector{lstm_sequence_forward->output(0),
lstm_sequence_reverse->output(0)}, 1);
- auto concat_1 = std::make_shared<opset4::Concat>(OutputVector{lstm_sequence_forward->output(1),
+ auto concat_1 = std::make_shared<opset5::Concat>(OutputVector{lstm_sequence_forward->output(1),
lstm_sequence_reverse->output(1)}, 1);
- auto concat_2 = std::make_shared<opset4::Concat>(OutputVector{lstm_sequence_forward->output(2),
+ auto concat_2 = std::make_shared<opset5::Concat>(OutputVector{lstm_sequence_forward->output(2),
lstm_sequence_reverse->output(2)}, 1);
ngraph::copy_runtime_info(lstm_sequence, {H, C, W, R, B, lstm_sequence_forward, lstm_sequence_reverse,
concat_0, concat_1, concat_2});
}
ngraph::pass::BidirectionalGRUSequenceDecomposition::BidirectionalGRUSequenceDecomposition() {
- auto gru_sequence_ngraph = ngraph::pattern::wrap_type<ngraph::op::v5::GRUSequence>();
+ auto gru_sequence_ngraph = ngraph::pattern::wrap_type<ngraph::opset5::GRUSequence>();
ngraph::matcher_pass_callback callback = [](pattern::Matcher &m) {
- auto gru_sequence = std::dynamic_pointer_cast<ngraph::op::v5::GRUSequence>(m.get_match_root());
+ auto gru_sequence = std::dynamic_pointer_cast<ngraph::opset5::GRUSequence>(m.get_match_root());
if (!gru_sequence) {
return false;
}
gru_sequence->get_clip(),
gru_sequence->get_linear_before_reset());
- auto gru_sequence_reverse = std::make_shared<ngraph::op::v5::GRUSequence>(
+ auto gru_sequence_reverse = std::make_shared<ngraph::opset5::GRUSequence>(
gru_sequence->input_value(0),
H->output(1),
gru_sequence->input_value(2),
gru_sequence->get_clip(),
gru_sequence->get_linear_before_reset());
- auto concat_0 = std::make_shared<opset4::Concat>(OutputVector{gru_sequence_forward->output(0),
+ auto concat_0 = std::make_shared<opset5::Concat>(OutputVector{gru_sequence_forward->output(0),
gru_sequence_reverse->output(0)}, 1);
- auto concat_1 = std::make_shared<opset4::Concat>(OutputVector{gru_sequence_forward->output(1),
+ auto concat_1 = std::make_shared<opset5::Concat>(OutputVector{gru_sequence_forward->output(1),
gru_sequence_reverse->output(1)}, 1);
ngraph::copy_runtime_info(gru_sequence, {H, W, R, B, gru_sequence_forward, gru_sequence_reverse,
concat_0, concat_1});
}
ngraph::pass::BidirectionalRNNSequenceDecomposition::BidirectionalRNNSequenceDecomposition() {
- auto rnn_sequence_ngraph = ngraph::pattern::wrap_type<ngraph::op::v5::RNNSequence>();
+ auto rnn_sequence_ngraph = ngraph::pattern::wrap_type<ngraph::opset5::RNNSequence>();
ngraph::matcher_pass_callback callback = [](pattern::Matcher &m) {
- auto rnn_sequence = std::dynamic_pointer_cast<ngraph::op::v5::RNNSequence>(m.get_match_root());
+ auto rnn_sequence = std::dynamic_pointer_cast<ngraph::opset5::RNNSequence>(m.get_match_root());
if (!rnn_sequence) {
return false;
}
rnn_sequence->get_activations_beta(),
rnn_sequence->get_clip());
- auto rnn_sequence_reverse = std::make_shared<ngraph::op::v5::RNNSequence>(
+ auto rnn_sequence_reverse = std::make_shared<ngraph::opset5::RNNSequence>(
rnn_sequence->input_value(0),
H->output(1),
rnn_sequence->input_value(2),
rnn_sequence->get_activations_beta(),
rnn_sequence->get_clip());
- auto concat_0 = std::make_shared<opset4::Concat>(OutputVector{rnn_sequence_forward->output(0),
+ auto concat_0 = std::make_shared<opset5::Concat>(OutputVector{rnn_sequence_forward->output(0),
rnn_sequence_reverse->output(0)}, 1);
- auto concat_1 = std::make_shared<opset4::Concat>(OutputVector{rnn_sequence_forward->output(1),
+ auto concat_1 = std::make_shared<opset5::Concat>(OutputVector{rnn_sequence_forward->output(1),
rnn_sequence_reverse->output(1)}, 1);
ngraph::copy_runtime_info(rnn_sequence, {H, W, R, B, rnn_sequence_forward, rnn_sequence_reverse,
concat_0, concat_1});
#include <memory>
-#include <ngraph/opsets/opset4.hpp>
+#include <ngraph/opsets/opset5.hpp>
#include <ngraph/rt_info.hpp>
#include <ngraph/pattern/op/wrap_type.hpp>
#include <ngraph_ops/rnn_sequence_ie.hpp>
ngraph::pass::ConvertLSTMSequenceMatcher::ConvertLSTMSequenceMatcher() {
- auto lstm_sequence_ngraph = ngraph::pattern::wrap_type<ngraph::op::v5::LSTMSequence>();
+ auto lstm_sequence_ngraph = ngraph::pattern::wrap_type<ngraph::opset5::LSTMSequence>();
ngraph::matcher_pass_callback callback = [](pattern::Matcher &m) {
- auto lstm_sequence = std::dynamic_pointer_cast<ngraph::op::v5::LSTMSequence>(m.get_match_root());
+ auto lstm_sequence = std::dynamic_pointer_cast<ngraph::opset5::LSTMSequence>(m.get_match_root());
if (!lstm_sequence) {
return false;
}
return false;
// for forward/reverse cases we can squeeze num_direction dimension
- auto axis_1 = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
- auto in_1 = std::make_shared<ngraph::opset4::Squeeze>(lstm_sequence->input_value(1), axis_1);
- auto in_2 = std::make_shared<ngraph::opset4::Squeeze>(lstm_sequence->input_value(2), axis_1);
- auto concat = std::make_shared<ngraph::opset4::Concat>(ngraph::OutputVector{W, R}, 2);
- auto axis_2 = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {0});
- auto in_3 = std::make_shared<ngraph::opset4::Squeeze>(concat->output(0), axis_2);
- auto in_4 = std::make_shared<ngraph::opset4::Squeeze>(lstm_sequence->input_value(6), axis_2);
+ auto axis_1 = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
+ auto in_1 = std::make_shared<ngraph::opset5::Squeeze>(lstm_sequence->input_value(1), axis_1);
+ auto in_2 = std::make_shared<ngraph::opset5::Squeeze>(lstm_sequence->input_value(2), axis_1);
+ auto concat = std::make_shared<ngraph::opset5::Concat>(ngraph::OutputVector{W, R}, 2);
+ auto axis_2 = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {0});
+ auto in_3 = std::make_shared<ngraph::opset5::Squeeze>(concat->output(0), axis_2);
+ auto in_4 = std::make_shared<ngraph::opset5::Squeeze>(lstm_sequence->input_value(6), axis_2);
auto lstm_sequence_ie = std::make_shared<ngraph::op::LSTMSequenceIE>(
lstm_sequence->input(0).get_source_output(), // X
in_1, // initial_hidden_state
lstm_sequence->get_activations_beta(),
lstm_sequence->get_clip());
- auto unsqueeze_axis = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
- auto unsqueeze_1 = std::make_shared<ngraph::opset4::Unsqueeze>(lstm_sequence_ie->output(0), unsqueeze_axis);
- auto unsqueeze_2 = std::make_shared<ngraph::opset4::Unsqueeze>(lstm_sequence_ie->output(1), unsqueeze_axis);
- auto unsqueeze_3 = std::make_shared<ngraph::opset4::Unsqueeze>(lstm_sequence_ie->output(2), unsqueeze_axis);
+ auto unsqueeze_axis = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
+ auto unsqueeze_1 = std::make_shared<ngraph::opset5::Unsqueeze>(lstm_sequence_ie->output(0), unsqueeze_axis);
+ auto unsqueeze_2 = std::make_shared<ngraph::opset5::Unsqueeze>(lstm_sequence_ie->output(1), unsqueeze_axis);
+ auto unsqueeze_3 = std::make_shared<ngraph::opset5::Unsqueeze>(lstm_sequence_ie->output(2), unsqueeze_axis);
ngraph::copy_runtime_info(lstm_sequence, {concat, lstm_sequence_ie, in_1, in_2, in_3, in_4, unsqueeze_1,
unsqueeze_2, unsqueeze_3});
}
ngraph::pass::ConvertGRUSequenceMatcher::ConvertGRUSequenceMatcher() {
- auto gru_sequence_ngraph = ngraph::pattern::wrap_type<ngraph::op::v5::GRUSequence>();
+ auto gru_sequence_ngraph = ngraph::pattern::wrap_type<ngraph::opset5::GRUSequence>();
ngraph::matcher_pass_callback callback = [](pattern::Matcher &m) {
- auto gru_sequence = std::dynamic_pointer_cast<ngraph::op::v5::GRUSequence>(m.get_match_root());
+ auto gru_sequence = std::dynamic_pointer_cast<ngraph::opset5::GRUSequence>(m.get_match_root());
if (!gru_sequence) {
return false;
}
return false;
// for forward/reverse cases we can squeeze num_direction dimension
- auto axis_1 = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
- auto in_1 = std::make_shared<ngraph::opset4::Squeeze>(gru_sequence->input_value(1), axis_1);
- auto concat = std::make_shared<ngraph::opset4::Concat>(ngraph::OutputVector{W, R}, 2);
- auto axis_2 = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {0});
- auto in_3 = std::make_shared<ngraph::opset4::Squeeze>(concat->output(0), axis_2);
- auto in_4 = std::make_shared<ngraph::opset4::Squeeze>(gru_sequence->input_value(5), axis_2);
+ auto axis_1 = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
+ auto in_1 = std::make_shared<ngraph::opset5::Squeeze>(gru_sequence->input_value(1), axis_1);
+ auto concat = std::make_shared<ngraph::opset5::Concat>(ngraph::OutputVector{W, R}, 2);
+ auto axis_2 = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {0});
+ auto in_3 = std::make_shared<ngraph::opset5::Squeeze>(concat->output(0), axis_2);
+ auto in_4 = std::make_shared<ngraph::opset5::Squeeze>(gru_sequence->input_value(5), axis_2);
auto gru_sequence_ie = std::make_shared<ngraph::op::GRUSequenceIE>(
gru_sequence->input_value(0), // X
gru_sequence->get_clip(),
gru_sequence->get_linear_before_reset());
- auto unsqueeze_axis = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
- auto unsqueeze_1 = std::make_shared<ngraph::opset4::Unsqueeze>(gru_sequence_ie->output(0), unsqueeze_axis);
- auto unsqueeze_2 = std::make_shared<ngraph::opset4::Unsqueeze>(gru_sequence_ie->output(1), unsqueeze_axis);
+ auto unsqueeze_axis = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
+ auto unsqueeze_1 = std::make_shared<ngraph::opset5::Unsqueeze>(gru_sequence_ie->output(0), unsqueeze_axis);
+ auto unsqueeze_2 = std::make_shared<ngraph::opset5::Unsqueeze>(gru_sequence_ie->output(1), unsqueeze_axis);
ngraph::copy_runtime_info(gru_sequence, {concat, gru_sequence_ie, unsqueeze_1, unsqueeze_2, in_1, in_3, in_4});
unsqueeze_1->set_friendly_name(gru_sequence->get_friendly_name()+".0");
}
ngraph::pass::ConvertRNNSequenceMatcher::ConvertRNNSequenceMatcher() {
- auto rnn_sequence_ngraph = ngraph::pattern::wrap_type<ngraph::op::v5::RNNSequence>();
+ auto rnn_sequence_ngraph = ngraph::pattern::wrap_type<ngraph::opset5::RNNSequence>();
ngraph::matcher_pass_callback callback = [](pattern::Matcher &m) {
- auto rnn_sequence = std::dynamic_pointer_cast<ngraph::op::v5::RNNSequence>(m.get_match_root());
+ auto rnn_sequence = std::dynamic_pointer_cast<ngraph::opset5::RNNSequence>(m.get_match_root());
if (!rnn_sequence) {
return false;
}
auto R = rnn_sequence->input_value(4);
// for forward/reverse cases we can squeeze num_direction dimension
- auto axis_1 = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
- auto in_1 = std::make_shared<ngraph::opset4::Squeeze>(rnn_sequence->input_value(1), axis_1);
- auto concat = std::make_shared<ngraph::opset4::Concat>(ngraph::OutputVector{W, R}, 2);
- auto axis_2 = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {0});
- auto in_3 = std::make_shared<ngraph::opset4::Squeeze>(concat->output(0), axis_2);
- auto in_4 = std::make_shared<ngraph::opset4::Squeeze>(rnn_sequence->input_value(5), axis_2);
+ auto axis_1 = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
+ auto in_1 = std::make_shared<ngraph::opset5::Squeeze>(rnn_sequence->input_value(1), axis_1);
+ auto concat = std::make_shared<ngraph::opset5::Concat>(ngraph::OutputVector{W, R}, 2);
+ auto axis_2 = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {0});
+ auto in_3 = std::make_shared<ngraph::opset5::Squeeze>(concat->output(0), axis_2);
+ auto in_4 = std::make_shared<ngraph::opset5::Squeeze>(rnn_sequence->input_value(5), axis_2);
auto rnn_sequence_ie = std::make_shared<ngraph::op::RNNSequenceIE>(
rnn_sequence->input_value(0), // X
in_1, // initial_hidden_state
rnn_sequence->get_activations_beta(),
rnn_sequence->get_clip());
- auto unsqueeze_axis = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
- auto unsqueeze_1 = std::make_shared<ngraph::opset4::Unsqueeze>(rnn_sequence_ie->output(0), unsqueeze_axis);
- auto unsqueeze_2 = std::make_shared<ngraph::opset4::Unsqueeze>(rnn_sequence_ie->output(1), unsqueeze_axis);
+ auto unsqueeze_axis = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
+ auto unsqueeze_1 = std::make_shared<ngraph::opset5::Unsqueeze>(rnn_sequence_ie->output(0), unsqueeze_axis);
+ auto unsqueeze_2 = std::make_shared<ngraph::opset5::Unsqueeze>(rnn_sequence_ie->output(1), unsqueeze_axis);
ngraph::copy_runtime_info(rnn_sequence, {concat, rnn_sequence_ie, in_1, in_3, in_4, unsqueeze_1,
unsqueeze_2});
#include <ngraph/node.hpp>
#include <ngraph/pass/manager.hpp>
-#include <ngraph/opsets/opset4.hpp>
+#include <ngraph/opsets/opset5.hpp>
#include <ngraph/rt_info.hpp>
#include <ngraph/graph_util.hpp>
#include <ngraph/specialize_function.hpp>
ngraph::pass::ConvertTensorIteratorToLSTMSequence::ConvertTensorIteratorToLSTMSequence() {
auto tensor_iterator = std::make_shared<ngraph::pattern::op::Label>(ngraph::element::f32,
- ngraph::Shape{}, ngraph::pattern::has_class<ngraph::opset4::TensorIterator>());
+ ngraph::Shape{}, ngraph::pattern::has_class<ngraph::opset5::TensorIterator>());
ngraph::matcher_pass_callback callback = [this](pattern::Matcher &m) {
- auto ti = std::dynamic_pointer_cast<ngraph::opset4::TensorIterator>(m.get_match_root());
+ auto ti = std::dynamic_pointer_cast<ngraph::opset5::TensorIterator>(m.get_match_root());
if (!ti || !m_transformation_callback(ti))
return false;
// create pattern
- auto data = std::make_shared<ngraph::opset4::Parameter>(ngraph::element::f32, ngraph::Shape{1, 1, 1});
- auto axis_squeeze = std::make_shared<ngraph::opset4::Constant>(ngraph::element::i64, ngraph::Shape{1}, 1);
+ auto data = std::make_shared<ngraph::opset5::Parameter>(ngraph::element::f32, ngraph::Shape{1, 1, 1});
+ auto axis_squeeze = std::make_shared<ngraph::opset5::Constant>(ngraph::element::i64, ngraph::Shape{1}, 1);
- auto input_data = std::make_shared<ngraph::opset4::Squeeze>(data, axis_squeeze);
- auto input_H_state = std::make_shared<ngraph::opset4::Parameter>(ngraph::element::f32, ngraph::Shape{1, 1});
- auto input_C_state = std::make_shared<ngraph::opset4::Parameter>(ngraph::element::f32, ngraph::Shape{1, 1});
- auto input_W = std::make_shared<ngraph::opset4::Constant>(ngraph::element::f32, ngraph::Shape{4, 1});
- auto input_R = std::make_shared<ngraph::opset4::Constant>(ngraph::element::f32, ngraph::Shape{4, 1});
- auto input_B = std::make_shared<ngraph::opset4::Constant>(ngraph::element::f32, ngraph::Shape{4});
+ auto input_data = std::make_shared<ngraph::opset5::Squeeze>(data, axis_squeeze);
+ auto input_H_state = std::make_shared<ngraph::opset5::Parameter>(ngraph::element::f32, ngraph::Shape{1, 1});
+ auto input_C_state = std::make_shared<ngraph::opset5::Parameter>(ngraph::element::f32, ngraph::Shape{1, 1});
+ auto input_W = std::make_shared<ngraph::opset5::Constant>(ngraph::element::f32, ngraph::Shape{4, 1});
+ auto input_R = std::make_shared<ngraph::opset5::Constant>(ngraph::element::f32, ngraph::Shape{4, 1});
+ auto input_B = std::make_shared<ngraph::opset5::Constant>(ngraph::element::f32, ngraph::Shape{4});
- auto cell = std::make_shared<ngraph::opset4::LSTMCell>(input_data, input_H_state, input_C_state,
+ auto cell = std::make_shared<ngraph::opset5::LSTMCell>(input_data, input_H_state, input_C_state,
input_W, input_R, input_B, 1);
- auto axis_unsqueeze = std::make_shared<ngraph::opset4::Constant>(ngraph::element::i64, ngraph::Shape{1}, 1);
- auto unsqueeze = std::make_shared<ngraph::opset4::Unsqueeze>(cell, axis_unsqueeze);
+ auto axis_unsqueeze = std::make_shared<ngraph::opset5::Constant>(ngraph::element::i64, ngraph::Shape{1}, 1);
+ auto unsqueeze = std::make_shared<ngraph::opset5::Unsqueeze>(cell, axis_unsqueeze);
ngraph::pattern::Matcher matcher(unsqueeze);
bool match = false;
auto pattern_map = matcher.get_pattern_map();
auto params = func->get_parameters();
- std::vector<std::shared_ptr<ngraph::opset4::TensorIterator::InputDescription>> ordered_in_descs(3);
+ std::vector<std::shared_ptr<ngraph::opset5::TensorIterator::InputDescription>> ordered_in_descs(3);
int64_t stride = 0, slice_axis = 0;
size_t batch_size = 0;
for (const auto& input_desc : ti->get_input_descriptions()) {
return false;
}
auto slice_input
- = std::dynamic_pointer_cast<ngraph::opset4::TensorIterator::SliceInputDescription>(input_desc);
+ = std::dynamic_pointer_cast<ngraph::opset5::TensorIterator::SliceInputDescription>(input_desc);
if (!slice_input)
return false;
}
auto results = func->get_results();
- std::vector<std::shared_ptr<ngraph::opset4::TensorIterator::OutputDescription>> ordered_out_descs(3);
+ std::vector<std::shared_ptr<ngraph::opset5::TensorIterator::OutputDescription>> ordered_out_descs(3);
for (const auto& output_desc : ti->get_output_descriptions()) {
- std::shared_ptr<opset4::Result> res = results[output_desc->m_body_value_index];
+ std::shared_ptr<opset5::Result> res = results[output_desc->m_body_value_index];
if (res->get_input_source_output(0) == pattern_map[unsqueeze]) {
auto concat_output
- = std::dynamic_pointer_cast<ngraph::opset4::TensorIterator::ConcatOutputDescription>(output_desc);
+ = std::dynamic_pointer_cast<ngraph::opset5::TensorIterator::ConcatOutputDescription>(output_desc);
if (!concat_output)
return false;
}
}
- auto seq_lengths = ngraph::opset4::Constant::create(element::i32, Shape{batch_size}, {ti->get_num_iterations()});
- const auto& lstm_cell = std::dynamic_pointer_cast<ngraph::opset4::LSTMCell>(pattern_map[cell]);
+ auto seq_lengths = ngraph::opset5::Constant::create(element::i32, Shape{batch_size}, {ti->get_num_iterations()});
+ const auto& lstm_cell = std::dynamic_pointer_cast<ngraph::opset5::LSTMCell>(pattern_map[cell]);
auto in_0 = ti->input_values()[ordered_in_descs[0]->m_input_index];
if (slice_axis == 0) {
- auto order = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{3}, {1, 0, 2});
- in_0 = std::make_shared<ngraph::opset4::Transpose>(ti->input_values()[ordered_in_descs[0]->m_input_index], order);
+ auto order = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{3}, {1, 0, 2});
+ in_0 = std::make_shared<ngraph::opset5::Transpose>(ti->input_values()[ordered_in_descs[0]->m_input_index], order);
}
- auto axis_1 = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
- auto in_1 = std::make_shared<ngraph::opset4::Unsqueeze>(ti->input_values()[ordered_in_descs[1]->m_input_index], axis_1);
- auto in_2 = std::make_shared<ngraph::opset4::Unsqueeze>(ti->input_values()[ordered_in_descs[2]->m_input_index], axis_1);
-
- auto axis_2 = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {0});
- auto in_4 = std::make_shared<ngraph::opset4::Unsqueeze>(pattern_map[input_W]->output(0).get_node_shared_ptr(), axis_2);
- auto in_5 = std::make_shared<ngraph::opset4::Unsqueeze>(pattern_map[input_R]->output(0).get_node_shared_ptr(), axis_2);
- auto in_6 = std::make_shared<ngraph::opset4::Unsqueeze>(pattern_map[input_B]->output(0).get_node_shared_ptr(), axis_2);
- auto sequence = std::make_shared<op::v5::LSTMSequence>(
+ auto axis_1 = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
+ auto in_1 = std::make_shared<ngraph::opset5::Unsqueeze>(ti->input_values()[ordered_in_descs[1]->m_input_index], axis_1);
+ auto in_2 = std::make_shared<ngraph::opset5::Unsqueeze>(ti->input_values()[ordered_in_descs[2]->m_input_index], axis_1);
+
+ auto axis_2 = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {0});
+ auto in_4 = std::make_shared<ngraph::opset5::Unsqueeze>(pattern_map[input_W]->output(0).get_node_shared_ptr(), axis_2);
+ auto in_5 = std::make_shared<ngraph::opset5::Unsqueeze>(pattern_map[input_R]->output(0).get_node_shared_ptr(), axis_2);
+ auto in_6 = std::make_shared<ngraph::opset5::Unsqueeze>(pattern_map[input_B]->output(0).get_node_shared_ptr(), axis_2);
+ auto sequence = std::make_shared<opset5::LSTMSequence>(
in_0,
in_1,
in_2,
lstm_cell->get_activations(),
lstm_cell->get_clip());
- auto axis_out = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
- auto out_0 = std::make_shared<ngraph::opset4::Squeeze>(sequence->output(0), axis_out);
- auto out_1 = std::make_shared<ngraph::opset4::Squeeze>(sequence->output(1), axis_out);
- auto out_2 = std::make_shared<ngraph::opset4::Squeeze>(sequence->output(2), axis_out);
+ auto axis_out = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
+ auto out_0 = std::make_shared<ngraph::opset5::Squeeze>(sequence->output(0), axis_out);
+ auto out_1 = std::make_shared<ngraph::opset5::Squeeze>(sequence->output(1), axis_out);
+ auto out_2 = std::make_shared<ngraph::opset5::Squeeze>(sequence->output(2), axis_out);
std::shared_ptr<Node> out = out_0;
if (slice_axis == 0) {
- auto order = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{3}, {1, 0, 2});
- out = std::make_shared<ngraph::opset4::Transpose>(out_0, order);
+ auto order = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{3}, {1, 0, 2});
+ out = std::make_shared<ngraph::opset5::Transpose>(out_0, order);
}
ngraph::NodeVector outputs = {out, out_1, out_2};
ngraph::pass::ConvertTensorIteratorToRNNSequence::ConvertTensorIteratorToRNNSequence() {
auto tensor_iterator = std::make_shared<ngraph::pattern::op::Label>(ngraph::element::f32,
- ngraph::Shape{}, ngraph::pattern::has_class<ngraph::opset4::TensorIterator>());
+ ngraph::Shape{}, ngraph::pattern::has_class<ngraph::opset5::TensorIterator>());
ngraph::matcher_pass_callback callback = [this](pattern::Matcher &m) {
- auto ti = std::dynamic_pointer_cast<ngraph::opset4::TensorIterator>(m.get_match_root());
+ auto ti = std::dynamic_pointer_cast<ngraph::opset5::TensorIterator>(m.get_match_root());
if (!ti || !m_transformation_callback(ti))
return false;
// create pattern
- auto data = std::make_shared<ngraph::opset4::Parameter>(ngraph::element::f32, ngraph::Shape{1, 1, 1});
- auto axis_squeeze = std::make_shared<ngraph::opset4::Constant>(ngraph::element::i64, ngraph::Shape{1}, 0);
- auto input_data = std::make_shared<ngraph::opset4::Squeeze>(data, axis_squeeze);
+ auto data = std::make_shared<ngraph::opset5::Parameter>(ngraph::element::f32, ngraph::Shape{1, 1, 1});
+ auto axis_squeeze = std::make_shared<ngraph::opset5::Constant>(ngraph::element::i64, ngraph::Shape{1}, 0);
+ auto input_data = std::make_shared<ngraph::opset5::Squeeze>(data, axis_squeeze);
- auto input_H_state = std::make_shared<ngraph::opset4::Parameter>(ngraph::element::f32, ngraph::Shape{1, 1});
- auto input_W = std::make_shared<ngraph::opset4::Constant>(ngraph::element::f32, ngraph::Shape{1, 1});
- auto input_R = std::make_shared<ngraph::opset4::Constant>(ngraph::element::f32, ngraph::Shape{1, 1});
- auto input_B = std::make_shared<ngraph::opset4::Constant>(ngraph::element::f32, ngraph::Shape{1});
+ auto input_H_state = std::make_shared<ngraph::opset5::Parameter>(ngraph::element::f32, ngraph::Shape{1, 1});
+ auto input_W = std::make_shared<ngraph::opset5::Constant>(ngraph::element::f32, ngraph::Shape{1, 1});
+ auto input_R = std::make_shared<ngraph::opset5::Constant>(ngraph::element::f32, ngraph::Shape{1, 1});
+ auto input_B = std::make_shared<ngraph::opset5::Constant>(ngraph::element::f32, ngraph::Shape{1});
- auto cell = std::make_shared<ngraph::opset4::RNNCell>(input_data, input_H_state, input_W, input_R, input_B, 1);
+ auto cell = std::make_shared<ngraph::opset5::RNNCell>(input_data, input_H_state, input_W, input_R, input_B, 1);
- auto axis_unsqueeze = std::make_shared<ngraph::opset4::Constant>(ngraph::element::i64, ngraph::Shape{1}, 0);
- auto unsqueeze = std::make_shared<ngraph::opset4::Unsqueeze>(cell, axis_unsqueeze);
+ auto axis_unsqueeze = std::make_shared<ngraph::opset5::Constant>(ngraph::element::i64, ngraph::Shape{1}, 0);
+ auto unsqueeze = std::make_shared<ngraph::opset5::Unsqueeze>(cell, axis_unsqueeze);
ngraph::pattern::Matcher matcher(unsqueeze);
bool match = false;
auto pattern_map = matcher.get_pattern_map();
auto params = func->get_parameters();
- std::vector<std::shared_ptr<ngraph::opset4::TensorIterator::InputDescription>> ordered_in_descs(3);
+ std::vector<std::shared_ptr<ngraph::opset5::TensorIterator::InputDescription>> ordered_in_descs(3);
int64_t stride = 0, slice_axis = 0;
size_t batch_size = 0;
for (const auto& input_desc : ti->get_input_descriptions()) {
return false;
}
auto slice_input
- = std::dynamic_pointer_cast<ngraph::opset4::TensorIterator::SliceInputDescription>(input_desc);
+ = std::dynamic_pointer_cast<ngraph::opset5::TensorIterator::SliceInputDescription>(input_desc);
if (!slice_input)
return false;
}
}
- auto seq_lengths = ngraph::opset4::Constant::create(element::i32, Shape{batch_size}, {ti->get_num_iterations()});
+ auto seq_lengths = ngraph::opset5::Constant::create(element::i32, Shape{batch_size}, {ti->get_num_iterations()});
auto results = func->get_results();
- std::vector<std::shared_ptr<ngraph::opset4::TensorIterator::OutputDescription>> ordered_out_descs(2);
+ std::vector<std::shared_ptr<ngraph::opset5::TensorIterator::OutputDescription>> ordered_out_descs(2);
for (const auto& output_desc : ti->get_output_descriptions()) {
- std::shared_ptr<opset4::Result> res = results[output_desc->m_body_value_index];
+ std::shared_ptr<opset5::Result> res = results[output_desc->m_body_value_index];
if (res->get_input_source_output(0) == pattern_map[unsqueeze]) {
auto concat_output
- = std::dynamic_pointer_cast<ngraph::opset4::TensorIterator::ConcatOutputDescription>(output_desc);
+ = std::dynamic_pointer_cast<ngraph::opset5::TensorIterator::ConcatOutputDescription>(output_desc);
if (!concat_output)
return false;
}
}
- const auto& rnn_cell = std::dynamic_pointer_cast<ngraph::opset4::RNNCell>(pattern_map[cell]);
+ const auto& rnn_cell = std::dynamic_pointer_cast<ngraph::opset5::RNNCell>(pattern_map[cell]);
auto in_0 = ti->input_values()[ordered_in_descs[0]->m_input_index];
if (slice_axis == 0) {
- auto order = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{3}, {1, 0, 2});
- in_0 = std::make_shared<ngraph::opset4::Transpose>(ti->input_values()[ordered_in_descs[0]->m_input_index], order);
+ auto order = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{3}, {1, 0, 2});
+ in_0 = std::make_shared<ngraph::opset5::Transpose>(ti->input_values()[ordered_in_descs[0]->m_input_index], order);
}
- auto axis_1 = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
- auto in_1 = std::make_shared<ngraph::opset4::Unsqueeze>(ti->input_values()[ordered_in_descs[1]->m_input_index], axis_1);
+ auto axis_1 = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
+ auto in_1 = std::make_shared<ngraph::opset5::Unsqueeze>(ti->input_values()[ordered_in_descs[1]->m_input_index], axis_1);
- auto axis_2 = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {0});
- auto in_3 = std::make_shared<ngraph::opset4::Unsqueeze>(pattern_map[input_W]->output(0).get_node_shared_ptr(), axis_2);
- auto in_4 = std::make_shared<ngraph::opset4::Unsqueeze>(pattern_map[input_R]->output(0).get_node_shared_ptr(), axis_2);
- auto in_5 = std::make_shared<ngraph::opset4::Unsqueeze>(pattern_map[input_B]->output(0).get_node_shared_ptr(), axis_2);
- auto sequence = std::make_shared<op::v5::RNNSequence>(
+ auto axis_2 = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {0});
+ auto in_3 = std::make_shared<ngraph::opset5::Unsqueeze>(pattern_map[input_W]->output(0).get_node_shared_ptr(), axis_2);
+ auto in_4 = std::make_shared<ngraph::opset5::Unsqueeze>(pattern_map[input_R]->output(0).get_node_shared_ptr(), axis_2);
+ auto in_5 = std::make_shared<ngraph::opset5::Unsqueeze>(pattern_map[input_B]->output(0).get_node_shared_ptr(), axis_2);
+ auto sequence = std::make_shared<opset5::RNNSequence>(
in_0,
in_1,
seq_lengths,
rnn_cell->get_activations_beta(),
rnn_cell->get_clip());
- auto axis_out = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
- auto out_0 = std::make_shared<ngraph::opset4::Squeeze>(sequence->output(0), axis_out);
- auto out_1 = std::make_shared<ngraph::opset4::Squeeze>(sequence->output(1), axis_out);
+ auto axis_out = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
+ auto out_0 = std::make_shared<ngraph::opset5::Squeeze>(sequence->output(0), axis_out);
+ auto out_1 = std::make_shared<ngraph::opset5::Squeeze>(sequence->output(1), axis_out);
std::shared_ptr<Node> out = out_0;
if (slice_axis == 0) {
- auto order = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{3}, {1, 0, 2});
- out = std::make_shared<ngraph::opset4::Transpose>(out_0, order);
+ auto order = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{3}, {1, 0, 2});
+ out = std::make_shared<ngraph::opset5::Transpose>(out_0, order);
}
ngraph::NodeVector outputs = {out, out_1};
ngraph::pass::ConvertTensorIteratorToGRUSequence::ConvertTensorIteratorToGRUSequence() {
auto tensor_iterator = std::make_shared<ngraph::pattern::op::Label>(ngraph::element::f32,
- ngraph::Shape{}, ngraph::pattern::has_class<ngraph::opset4::TensorIterator>());
+ ngraph::Shape{}, ngraph::pattern::has_class<ngraph::opset5::TensorIterator>());
ngraph::matcher_pass_callback callback = [this](pattern::Matcher &m) {
- auto ti = std::dynamic_pointer_cast<ngraph::opset4::TensorIterator>(m.get_match_root());
+ auto ti = std::dynamic_pointer_cast<ngraph::opset5::TensorIterator>(m.get_match_root());
if (!ti || !m_transformation_callback(ti))
return false;
// create pattern
- auto data = std::make_shared<ngraph::opset4::Parameter>(ngraph::element::f32, ngraph::Shape{1, 1, 1});
- auto axis_squeeze = std::make_shared<ngraph::opset4::Constant>(ngraph::element::i64, ngraph::Shape{1}, 0);
- auto input_data = std::make_shared<ngraph::opset4::Squeeze>(data, axis_squeeze);
+ auto data = std::make_shared<ngraph::opset5::Parameter>(ngraph::element::f32, ngraph::Shape{1, 1, 1});
+ auto axis_squeeze = std::make_shared<ngraph::opset5::Constant>(ngraph::element::i64, ngraph::Shape{1}, 0);
+ auto input_data = std::make_shared<ngraph::opset5::Squeeze>(data, axis_squeeze);
- auto input_H_state = std::make_shared<ngraph::opset4::Parameter>(ngraph::element::f32, ngraph::Shape{1, 1});
- auto input_W = std::make_shared<ngraph::opset4::Constant>(ngraph::element::f32, ngraph::Shape{3, 1});
- auto input_R = std::make_shared<ngraph::opset4::Constant>(ngraph::element::f32, ngraph::Shape{3, 1});
- auto input_B = std::make_shared<ngraph::opset4::Constant>(ngraph::element::f32, ngraph::Shape{3});
+ auto input_H_state = std::make_shared<ngraph::opset5::Parameter>(ngraph::element::f32, ngraph::Shape{1, 1});
+ auto input_W = std::make_shared<ngraph::opset5::Constant>(ngraph::element::f32, ngraph::Shape{3, 1});
+ auto input_R = std::make_shared<ngraph::opset5::Constant>(ngraph::element::f32, ngraph::Shape{3, 1});
+ auto input_B = std::make_shared<ngraph::opset5::Constant>(ngraph::element::f32, ngraph::Shape{3});
- auto cell = std::make_shared<ngraph::opset4::GRUCell>(input_data, input_H_state, input_W, input_R, input_B, 1);
+ auto cell = std::make_shared<ngraph::opset5::GRUCell>(input_data, input_H_state, input_W, input_R, input_B, 1);
- auto axis_unsqueeze = std::make_shared<ngraph::opset4::Constant>(ngraph::element::i64, ngraph::Shape{1}, 0);
- auto unsqueeze = std::make_shared<ngraph::opset4::Unsqueeze>(cell, axis_unsqueeze);
+ auto axis_unsqueeze = std::make_shared<ngraph::opset5::Constant>(ngraph::element::i64, ngraph::Shape{1}, 0);
+ auto unsqueeze = std::make_shared<ngraph::opset5::Unsqueeze>(cell, axis_unsqueeze);
ngraph::pattern::Matcher matcher(unsqueeze);
bool match = false;
auto pattern_map = matcher.get_pattern_map();
auto params = func->get_parameters();
- std::vector<std::shared_ptr<ngraph::opset4::TensorIterator::InputDescription>> ordered_in_descs(3);
+ std::vector<std::shared_ptr<ngraph::opset5::TensorIterator::InputDescription>> ordered_in_descs(3);
int64_t stride = 0, slice_axis = 0;
size_t batch_size = 0;
for (const auto& input_desc : ti->get_input_descriptions()) {
return false;
}
auto slice_input
- = std::dynamic_pointer_cast<ngraph::opset4::TensorIterator::SliceInputDescription>(input_desc);
+ = std::dynamic_pointer_cast<ngraph::opset5::TensorIterator::SliceInputDescription>(input_desc);
if (!slice_input)
return false;
}
}
- auto seq_lengths = ngraph::opset4::Constant::create(element::i32, Shape{batch_size}, {ti->get_num_iterations()});
+ auto seq_lengths = ngraph::opset5::Constant::create(element::i32, Shape{batch_size}, {ti->get_num_iterations()});
auto results = func->get_results();
- std::vector<std::shared_ptr<ngraph::opset4::TensorIterator::OutputDescription>> ordered_out_descs(2);
+ std::vector<std::shared_ptr<ngraph::opset5::TensorIterator::OutputDescription>> ordered_out_descs(2);
for (const auto& output_desc : ti->get_output_descriptions()) {
- std::shared_ptr<opset4::Result> res = results[output_desc->m_body_value_index];
+ std::shared_ptr<opset5::Result> res = results[output_desc->m_body_value_index];
if (res->get_input_source_output(0) == pattern_map[unsqueeze]) {
auto concat_output
- = std::dynamic_pointer_cast<ngraph::opset4::TensorIterator::ConcatOutputDescription>(output_desc);
+ = std::dynamic_pointer_cast<ngraph::opset5::TensorIterator::ConcatOutputDescription>(output_desc);
if (!concat_output)
return false;
}
}
- const auto& rnn_cell = std::dynamic_pointer_cast<ngraph::opset4::GRUCell>(pattern_map[cell]);
+ const auto& rnn_cell = std::dynamic_pointer_cast<ngraph::opset5::GRUCell>(pattern_map[cell]);
auto in_0 = ti->input_values()[ordered_in_descs[0]->m_input_index];
if (slice_axis == 0) {
- auto order = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{3}, {1, 0, 2});
- in_0 = std::make_shared<ngraph::opset4::Transpose>(ti->input_values()[ordered_in_descs[0]->m_input_index], order);
+ auto order = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{3}, {1, 0, 2});
+ in_0 = std::make_shared<ngraph::opset5::Transpose>(ti->input_values()[ordered_in_descs[0]->m_input_index], order);
}
- auto axis_1 = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
- auto in_1 = std::make_shared<ngraph::opset4::Unsqueeze>(ti->input_values()[ordered_in_descs[1]->m_input_index], axis_1);
+ auto axis_1 = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
+ auto in_1 = std::make_shared<ngraph::opset5::Unsqueeze>(ti->input_values()[ordered_in_descs[1]->m_input_index], axis_1);
- auto axis_2 = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {0});
- auto in_3 = std::make_shared<ngraph::opset4::Unsqueeze>(pattern_map[input_W]->output(0).get_node_shared_ptr(), axis_2);
- auto in_4 = std::make_shared<ngraph::opset4::Unsqueeze>(pattern_map[input_R]->output(0).get_node_shared_ptr(), axis_2);
- auto in_5 = std::make_shared<ngraph::opset4::Unsqueeze>(pattern_map[input_B]->output(0).get_node_shared_ptr(), axis_2);
- auto sequence = std::make_shared<op::v5::GRUSequence>(
+ auto axis_2 = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {0});
+ auto in_3 = std::make_shared<ngraph::opset5::Unsqueeze>(pattern_map[input_W]->output(0).get_node_shared_ptr(), axis_2);
+ auto in_4 = std::make_shared<ngraph::opset5::Unsqueeze>(pattern_map[input_R]->output(0).get_node_shared_ptr(), axis_2);
+ auto in_5 = std::make_shared<ngraph::opset5::Unsqueeze>(pattern_map[input_B]->output(0).get_node_shared_ptr(), axis_2);
+ auto sequence = std::make_shared<opset5::GRUSequence>(
in_0,
in_1,
seq_lengths,
rnn_cell->get_clip(),
rnn_cell->get_linear_before_reset());
- auto axis_out = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
- auto out_0 = std::make_shared<ngraph::opset4::Squeeze>(sequence->output(0), axis_out);
- auto out_1 = std::make_shared<ngraph::opset4::Squeeze>(sequence->output(1), axis_out);
+ auto axis_out = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
+ auto out_0 = std::make_shared<ngraph::opset5::Squeeze>(sequence->output(0), axis_out);
+ auto out_1 = std::make_shared<ngraph::opset5::Squeeze>(sequence->output(1), axis_out);
std::shared_ptr<Node> out = out_0;
if (slice_axis == 0) {
- auto order = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{3}, {1, 0, 2});
- out = std::make_shared<ngraph::opset4::Transpose>(out_0, order);
+ auto order = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{3}, {1, 0, 2});
+ out = std::make_shared<ngraph::opset5::Transpose>(out_0, order);
}
ngraph::NodeVector outputs = {out, out_1};
#include <transformations/convert_opset1_to_legacy/convert_sequences_to_sequences_ie.hpp>
#include <ngraph/ops.hpp>
-#include <ngraph/opsets/opset4.hpp>
+#include <ngraph/opsets/opset5.hpp>
#include <ngraph/function.hpp>
#include <ngraph_ops/gru_sequence_ie.hpp>
#include <ngraph_ops/rnn_sequence_ie.hpp>
TEST(TransformationTests, GRUSequenceConversionTest) {
std::shared_ptr<ngraph::Function> f(nullptr), f_ref(nullptr);
- std::shared_ptr<ngraph::op::v5::GRUSequence> sequence;
+ std::shared_ptr<ngraph::opset5::GRUSequence> sequence;
const size_t batch_size = 2;
const size_t input_size = 3;
const size_t gates_count = 3;
const size_t num_directions = 1;
{
- const auto X = std::make_shared<ngraph::opset4::Parameter>(ngraph::element::f32,
+ const auto X = std::make_shared<ngraph::opset5::Parameter>(ngraph::element::f32,
ngraph::Shape{batch_size, 1, input_size});
const auto W =
- std::make_shared<ngraph::opset4::Constant>(ngraph::element::f32,
+ std::make_shared<ngraph::opset5::Constant>(ngraph::element::f32,
ngraph::Shape{num_directions, gates_count * hidden_size, input_size});
const auto R =
- std::make_shared<ngraph::opset4::Constant>(ngraph::element::f32,
+ std::make_shared<ngraph::opset5::Constant>(ngraph::element::f32,
ngraph::Shape{num_directions, gates_count * hidden_size, hidden_size});
- const auto H_t = std::make_shared<ngraph::opset4::Parameter>(ngraph::element::f32,
+ const auto H_t = std::make_shared<ngraph::opset5::Parameter>(ngraph::element::f32,
ngraph::Shape{batch_size, num_directions, hidden_size});
- const auto B = std::make_shared<ngraph::opset4::Constant>(ngraph::element::f32,
+ const auto B = std::make_shared<ngraph::opset5::Constant>(ngraph::element::f32,
ngraph::Shape{num_directions, gates_count * hidden_size});
- const auto seq_len = std::make_shared<ngraph::opset4::Constant>(ngraph::element::i32, ngraph::Shape{batch_size});
- sequence = std::make_shared<ngraph::op::v5::GRUSequence>(X, H_t, seq_len, W, R, B, hidden_size,
+ const auto seq_len = std::make_shared<ngraph::opset5::Constant>(ngraph::element::i32, ngraph::Shape{batch_size});
+ sequence = std::make_shared<ngraph::opset5::GRUSequence>(X, H_t, seq_len, W, R, B, hidden_size,
ngraph::op::RecurrentSequenceDirection::FORWARD);
sequence->set_friendly_name("test_sequence");
}
{
- const auto X = std::make_shared<ngraph::opset4::Parameter>(ngraph::element::f32,
+ const auto X = std::make_shared<ngraph::opset5::Parameter>(ngraph::element::f32,
ngraph::Shape{batch_size, 1, input_size});
const auto W =
- std::make_shared<ngraph::opset4::Constant>(ngraph::element::f32,
+ std::make_shared<ngraph::opset5::Constant>(ngraph::element::f32,
ngraph::Shape{num_directions, gates_count * hidden_size, input_size});
const auto R =
- std::make_shared<ngraph::opset4::Constant>(ngraph::element::f32,
+ std::make_shared<ngraph::opset5::Constant>(ngraph::element::f32,
ngraph::Shape{num_directions, gates_count * hidden_size, hidden_size});
- const auto H_t = std::make_shared<ngraph::opset4::Parameter>(ngraph::element::f32,
+ const auto H_t = std::make_shared<ngraph::opset5::Parameter>(ngraph::element::f32,
ngraph::Shape{batch_size, num_directions, hidden_size});
- const auto B = std::make_shared<ngraph::opset4::Constant>(ngraph::element::f32,
+ const auto B = std::make_shared<ngraph::opset5::Constant>(ngraph::element::f32,
ngraph::Shape{num_directions, gates_count * hidden_size});
- const auto seq_len = std::make_shared<ngraph::opset4::Constant>(ngraph::element::i32, ngraph::Shape{batch_size}, 1);
- auto axis_1 = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
- auto in_1 = std::make_shared<ngraph::opset4::Squeeze>(H_t, axis_1);
- auto concat = std::make_shared<ngraph::opset4::Concat>(ngraph::NodeVector({W, R}), 2);
- auto axis_2 = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {0});
- auto in_3 = std::make_shared<ngraph::opset4::Squeeze>(concat->output(0), axis_2);
- auto in_4 = std::make_shared<ngraph::opset4::Squeeze>(B, axis_2);
+ const auto seq_len = std::make_shared<ngraph::opset5::Constant>(ngraph::element::i32, ngraph::Shape{batch_size}, 1);
+ auto axis_1 = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
+ auto in_1 = std::make_shared<ngraph::opset5::Squeeze>(H_t, axis_1);
+ auto concat = std::make_shared<ngraph::opset5::Concat>(ngraph::NodeVector({W, R}), 2);
+ auto axis_2 = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {0});
+ auto in_3 = std::make_shared<ngraph::opset5::Squeeze>(concat->output(0), axis_2);
+ auto in_4 = std::make_shared<ngraph::opset5::Squeeze>(B, axis_2);
auto sequence_ie = std::make_shared<ngraph::op::GRUSequenceIE>(X,
in_1,
seq_len, // this input is not supported
sequence->get_linear_before_reset());
sequence_ie->set_friendly_name("test_sequence");
- auto unsqueeze_axis = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
- auto unsqueeze_1 = std::make_shared<ngraph::opset4::Unsqueeze>(sequence_ie->output(0), unsqueeze_axis);
- auto unsqueeze_2 = std::make_shared<ngraph::opset4::Unsqueeze>(sequence_ie->output(1), unsqueeze_axis);
+ auto unsqueeze_axis = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
+ auto unsqueeze_1 = std::make_shared<ngraph::opset5::Unsqueeze>(sequence_ie->output(0), unsqueeze_axis);
+ auto unsqueeze_2 = std::make_shared<ngraph::opset5::Unsqueeze>(sequence_ie->output(1), unsqueeze_axis);
f_ref = std::make_shared<ngraph::Function>(ngraph::NodeVector{unsqueeze_1}, ngraph::ParameterVector{X, H_t});
}
auto res = compare_functions(f, f_ref);
const size_t num_directions = 1;
const size_t batch_size = 2;
std::shared_ptr<ngraph::Function> f(nullptr), f_ref(nullptr);
- std::shared_ptr<ngraph::op::v5::RNNSequence> sequence;
+ std::shared_ptr<ngraph::opset5::RNNSequence> sequence;
{
- auto X = std::make_shared<ngraph::opset4::Parameter>(ngraph::element::f32, ngraph::Shape{batch_size, 1, 3});
- auto H = std::make_shared<ngraph::opset4::Parameter>(ngraph::element::f32, ngraph::Shape{batch_size, num_directions, 3});
- auto W = std::make_shared<ngraph::opset4::Constant>(ngraph::element::f32, ngraph::Shape{num_directions, 3, 3});
- auto R = std::make_shared<ngraph::opset4::Constant>(ngraph::element::f32, ngraph::Shape{num_directions, 3, 3});
- auto B = std::make_shared<ngraph::opset4::Constant>(ngraph::element::f32, ngraph::Shape{num_directions, 3});
- auto seq_len = std::make_shared<ngraph::opset4::Constant>(ngraph::element::f32, ngraph::Shape{2});
- sequence = std::make_shared<ngraph::op::v5::RNNSequence>(X, H, seq_len, W, R, B, hidden_size,
+ auto X = std::make_shared<ngraph::opset5::Parameter>(ngraph::element::f32, ngraph::Shape{batch_size, 1, 3});
+ auto H = std::make_shared<ngraph::opset5::Parameter>(ngraph::element::f32, ngraph::Shape{batch_size, num_directions, 3});
+ auto W = std::make_shared<ngraph::opset5::Constant>(ngraph::element::f32, ngraph::Shape{num_directions, 3, 3});
+ auto R = std::make_shared<ngraph::opset5::Constant>(ngraph::element::f32, ngraph::Shape{num_directions, 3, 3});
+ auto B = std::make_shared<ngraph::opset5::Constant>(ngraph::element::f32, ngraph::Shape{num_directions, 3});
+ auto seq_len = std::make_shared<ngraph::opset5::Constant>(ngraph::element::f32, ngraph::Shape{2});
+ sequence = std::make_shared<ngraph::opset5::RNNSequence>(X, H, seq_len, W, R, B, hidden_size,
ngraph::op::RecurrentSequenceDirection::FORWARD);
sequence->set_friendly_name("test_sequence");
}
{
- auto X = std::make_shared<ngraph::opset4::Parameter>(ngraph::element::f32, ngraph::Shape{batch_size, 1, 3});
- auto H = std::make_shared<ngraph::opset4::Parameter>(ngraph::element::f32, ngraph::Shape{batch_size, num_directions, 3});
- auto W = std::make_shared<ngraph::opset4::Constant>(ngraph::element::f32, ngraph::Shape{num_directions, 3, 3});
- auto R = std::make_shared<ngraph::opset4::Constant>(ngraph::element::f32, ngraph::Shape{num_directions, 3, 3});
- auto B = std::make_shared<ngraph::opset4::Constant>(ngraph::element::f32, ngraph::Shape{num_directions, 3});
- auto seq_len = std::make_shared<ngraph::opset4::Constant>(ngraph::element::f32, ngraph::Shape{batch_size}, 1);
- auto axis_1 = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
- auto in_1 = std::make_shared<ngraph::opset4::Squeeze>(H, axis_1);
- auto concat = std::make_shared<ngraph::opset4::Concat>(ngraph::NodeVector({W, R}), 2);
- auto axis_2 = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {0});
- auto in_3 = std::make_shared<ngraph::opset4::Squeeze>(concat->output(0), axis_2);
- auto in_4 = std::make_shared<ngraph::opset4::Squeeze>(B, axis_2);
+ auto X = std::make_shared<ngraph::opset5::Parameter>(ngraph::element::f32, ngraph::Shape{batch_size, 1, 3});
+ auto H = std::make_shared<ngraph::opset5::Parameter>(ngraph::element::f32, ngraph::Shape{batch_size, num_directions, 3});
+ auto W = std::make_shared<ngraph::opset5::Constant>(ngraph::element::f32, ngraph::Shape{num_directions, 3, 3});
+ auto R = std::make_shared<ngraph::opset5::Constant>(ngraph::element::f32, ngraph::Shape{num_directions, 3, 3});
+ auto B = std::make_shared<ngraph::opset5::Constant>(ngraph::element::f32, ngraph::Shape{num_directions, 3});
+ auto seq_len = std::make_shared<ngraph::opset5::Constant>(ngraph::element::f32, ngraph::Shape{batch_size}, 1);
+ auto axis_1 = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
+ auto in_1 = std::make_shared<ngraph::opset5::Squeeze>(H, axis_1);
+ auto concat = std::make_shared<ngraph::opset5::Concat>(ngraph::NodeVector({W, R}), 2);
+ auto axis_2 = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {0});
+ auto in_3 = std::make_shared<ngraph::opset5::Squeeze>(concat->output(0), axis_2);
+ auto in_4 = std::make_shared<ngraph::opset5::Squeeze>(B, axis_2);
auto sequence_ie = std::make_shared<ngraph::op::RNNSequenceIE>(X,
in_1,
seq_len,
sequence->get_activations_beta(),
sequence->get_clip());
- auto unsqueeze_axis = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
- auto unsqueeze_1 = std::make_shared<ngraph::opset4::Unsqueeze>(sequence_ie->output(0), unsqueeze_axis);
- auto unsqueeze_2 = std::make_shared<ngraph::opset4::Unsqueeze>(sequence_ie->output(1), unsqueeze_axis);
+ auto unsqueeze_axis = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
+ auto unsqueeze_1 = std::make_shared<ngraph::opset5::Unsqueeze>(sequence_ie->output(0), unsqueeze_axis);
+ auto unsqueeze_2 = std::make_shared<ngraph::opset5::Unsqueeze>(sequence_ie->output(1), unsqueeze_axis);
sequence_ie->set_friendly_name("test_sequence");
f_ref = std::make_shared<ngraph::Function>(ngraph::NodeVector{unsqueeze_1}, ngraph::ParameterVector{X, H});
}
const size_t gates_count = 4;
const size_t num_directions = 1;
std::shared_ptr<ngraph::Function> f(nullptr), f_ref(nullptr);
- std::shared_ptr<ngraph::op::v5::LSTMSequence> sequence;
+ std::shared_ptr<ngraph::opset5::LSTMSequence> sequence;
{
- const auto X = std::make_shared<ngraph::opset4::Parameter>(ngraph::element::f32,
+ const auto X = std::make_shared<ngraph::opset5::Parameter>(ngraph::element::f32,
ngraph::Shape{batch_size, 10, input_size});
const auto W =
- std::make_shared<ngraph::opset4::Constant>(ngraph::element::f32,
+ std::make_shared<ngraph::opset5::Constant>(ngraph::element::f32,
ngraph::Shape{num_directions,
gates_count * hidden_size, input_size});
const auto R =
- std::make_shared<ngraph::opset4::Constant>(ngraph::element::f32,
+ std::make_shared<ngraph::opset5::Constant>(ngraph::element::f32,
ngraph::Shape{num_directions,
gates_count * hidden_size, hidden_size});
- const auto H_t = std::make_shared<ngraph::opset4::Parameter>(ngraph::element::f32,
+ const auto H_t = std::make_shared<ngraph::opset5::Parameter>(ngraph::element::f32,
ngraph::Shape{batch_size, num_directions,
hidden_size});
- const auto C_t = std::make_shared<ngraph::opset4::Parameter>(ngraph::element::f32,
+ const auto C_t = std::make_shared<ngraph::opset5::Parameter>(ngraph::element::f32,
ngraph::Shape{batch_size, num_directions, hidden_size});
- const auto B = std::make_shared<ngraph::opset4::Constant>(ngraph::element::f32,
+ const auto B = std::make_shared<ngraph::opset5::Constant>(ngraph::element::f32,
ngraph::Shape{num_directions,
gates_count * hidden_size});
- const auto seq_len = std::make_shared<ngraph::opset4::Constant>(ngraph::element::i32, ngraph::Shape{batch_size});
- sequence = std::make_shared<ngraph::op::v5::LSTMSequence>(X, H_t, C_t, seq_len, W, R, B, hidden_size,
+ const auto seq_len = std::make_shared<ngraph::opset5::Constant>(ngraph::element::i32, ngraph::Shape{batch_size});
+ sequence = std::make_shared<ngraph::opset5::LSTMSequence>(X, H_t, C_t, seq_len, W, R, B, hidden_size,
ngraph::op::RecurrentSequenceDirection::FORWARD);
sequence->set_friendly_name("test_sequence");
}
{
- const auto X = std::make_shared<ngraph::opset4::Parameter>(ngraph::element::f32,
+ const auto X = std::make_shared<ngraph::opset5::Parameter>(ngraph::element::f32,
ngraph::Shape{batch_size, 10, input_size});
const auto W =
- std::make_shared<ngraph::opset4::Constant>(ngraph::element::f32,
+ std::make_shared<ngraph::opset5::Constant>(ngraph::element::f32,
ngraph::Shape{num_directions,
gates_count * hidden_size, input_size});
const auto R =
- std::make_shared<ngraph::opset4::Constant>(ngraph::element::f32,
+ std::make_shared<ngraph::opset5::Constant>(ngraph::element::f32,
ngraph::Shape{num_directions,
gates_count * hidden_size, hidden_size});
- const auto H_t = std::make_shared<ngraph::opset4::Parameter>(ngraph::element::f32,
+ const auto H_t = std::make_shared<ngraph::opset5::Parameter>(ngraph::element::f32,
ngraph::Shape{batch_size, num_directions, hidden_size});
- const auto C_t = std::make_shared<ngraph::opset4::Parameter>(ngraph::element::f32,
+ const auto C_t = std::make_shared<ngraph::opset5::Parameter>(ngraph::element::f32,
ngraph::Shape{batch_size, num_directions, hidden_size});
- const auto seq_lenghts = std::make_shared<ngraph::opset4::Constant>(ngraph::element::f32,
+ const auto seq_lenghts = std::make_shared<ngraph::opset5::Constant>(ngraph::element::f32,
ngraph::Shape{batch_size});
- const auto B = std::make_shared<ngraph::opset4::Constant>(ngraph::element::f32,
+ const auto B = std::make_shared<ngraph::opset5::Constant>(ngraph::element::f32,
ngraph::Shape{num_directions,
gates_count * hidden_size});
- // const auto seq_len = std::make_shared<ngraph::opset4::Constant>(ngraph::element::i32, ngraph::Shape{1}, 1);
- auto axis_1 = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
- auto in_1 = std::make_shared<ngraph::opset4::Squeeze>(H_t, axis_1);
- auto in_2 = std::make_shared<ngraph::opset4::Squeeze>(C_t, axis_1);
- auto concat = std::make_shared<ngraph::opset4::Concat>(ngraph::NodeVector({W, R}), 2);
- auto axis_2 = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {0});
- auto in_3 = std::make_shared<ngraph::opset4::Squeeze>(concat->output(0), axis_2);
- auto in_4 = std::make_shared<ngraph::opset4::Squeeze>(B, axis_2);
+ // const auto seq_len = std::make_shared<ngraph::opset5::Constant>(ngraph::element::i32, ngraph::Shape{1}, 1);
+ auto axis_1 = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
+ auto in_1 = std::make_shared<ngraph::opset5::Squeeze>(H_t, axis_1);
+ auto in_2 = std::make_shared<ngraph::opset5::Squeeze>(C_t, axis_1);
+ auto concat = std::make_shared<ngraph::opset5::Concat>(ngraph::NodeVector({W, R}), 2);
+ auto axis_2 = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {0});
+ auto in_3 = std::make_shared<ngraph::opset5::Squeeze>(concat->output(0), axis_2);
+ auto in_4 = std::make_shared<ngraph::opset5::Squeeze>(B, axis_2);
auto sequence_ie = std::make_shared<ngraph::op::LSTMSequenceIE>(X,
in_1,
in_2,
sequence->get_activations_beta(),
sequence->get_clip());
sequence_ie->set_friendly_name("test_sequence");
- auto unsqueeze_axis = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
- auto unsqueeze_1 = std::make_shared<ngraph::opset4::Unsqueeze>(sequence_ie->output(0), unsqueeze_axis);
- auto unsqueeze_2 = std::make_shared<ngraph::opset4::Unsqueeze>(sequence_ie->output(1), unsqueeze_axis);
- auto unsqueeze_3 = std::make_shared<ngraph::opset4::Unsqueeze>(sequence_ie->output(2), unsqueeze_axis);
+ auto unsqueeze_axis = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
+ auto unsqueeze_1 = std::make_shared<ngraph::opset5::Unsqueeze>(sequence_ie->output(0), unsqueeze_axis);
+ auto unsqueeze_2 = std::make_shared<ngraph::opset5::Unsqueeze>(sequence_ie->output(1), unsqueeze_axis);
+ auto unsqueeze_3 = std::make_shared<ngraph::opset5::Unsqueeze>(sequence_ie->output(2), unsqueeze_axis);
f_ref = std::make_shared<ngraph::Function>(ngraph::NodeVector{unsqueeze_1},
ngraph::ParameterVector{X, H_t, C_t});
}
#include <ngraph/pass/manager.hpp>
#include <ngraph/function.hpp>
-#include <ngraph/opsets/opset4.hpp>
+#include <ngraph/opsets/opset5.hpp>
#include <ngraph_ops/fully_connected.hpp>
#include <transformations/tensor_iterator_transformations/convert_ti_to_sequences.h>
#include <transformations/utils/utils.hpp>
TEST(TransformationTests, ConvertTensorIteratorToLSTMSequence) {
std::shared_ptr<ngraph::Function> f(nullptr), f_ref(nullptr);
{
- auto X = std::make_shared<opset4::Parameter>(element::f32, Shape{1, 2, 16});
- auto Y = std::make_shared<opset4::Parameter>(element::f32, Shape{1, 128});
- auto Z = std::make_shared<opset4::Parameter>(element::f32, Shape{1, 128});
+ auto X = std::make_shared<opset5::Parameter>(element::f32, Shape{1, 2, 16});
+ auto Y = std::make_shared<opset5::Parameter>(element::f32, Shape{1, 128});
+ auto Z = std::make_shared<opset5::Parameter>(element::f32, Shape{1, 128});
- auto Xi = std::make_shared<opset4::Parameter>(element::f32, Shape{1, 1, 16});
- auto Yi = std::make_shared<opset4::Parameter>(element::f32, Shape{1, 128});
- auto Zi = std::make_shared<opset4::Parameter>(element::f32, Shape{1, 128});
+ auto Xi = std::make_shared<opset5::Parameter>(element::f32, Shape{1, 1, 16});
+ auto Yi = std::make_shared<opset5::Parameter>(element::f32, Shape{1, 128});
+ auto Zi = std::make_shared<opset5::Parameter>(element::f32, Shape{1, 128});
// Body
- auto axis = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
- auto squeeze = std::make_shared<opset4::Squeeze>(Xi, axis);
+ auto axis = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
+ auto squeeze = std::make_shared<opset5::Squeeze>(Xi, axis);
auto w_val = std::vector<float>(512 * 16, 0);
auto r_val = std::vector<float>(512 * 128, 0);
auto b_val = std::vector<float>(512, 0);
- auto W = ngraph::opset4::Constant::create(ngraph::element::f32, ngraph::Shape{512, 16}, w_val);
- auto R = ngraph::opset4::Constant::create(ngraph::element::f32, ngraph::Shape{512, 128}, r_val);
- auto B = ngraph::opset4::Constant::create(ngraph::element::f32, ngraph::Shape{512}, b_val);
-
- auto lstm_cell = std::make_shared<opset4::LSTMCell>(squeeze, Yi, Zi, W, R, B, 128);
- auto res_1 = std::make_shared<opset4::Result>(lstm_cell);
- auto axis_unsqueeze = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
- auto unsqueeze = std::make_shared<opset4::Unsqueeze>(lstm_cell, axis_unsqueeze);
- auto res_2 = std::make_shared<opset4::Result>(unsqueeze);
+ auto W = ngraph::opset5::Constant::create(ngraph::element::f32, ngraph::Shape{512, 16}, w_val);
+ auto R = ngraph::opset5::Constant::create(ngraph::element::f32, ngraph::Shape{512, 128}, r_val);
+ auto B = ngraph::opset5::Constant::create(ngraph::element::f32, ngraph::Shape{512}, b_val);
+
+ auto lstm_cell = std::make_shared<opset5::LSTMCell>(squeeze, Yi, Zi, W, R, B, 128);
+ auto res_1 = std::make_shared<opset5::Result>(lstm_cell);
+ auto axis_unsqueeze = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
+ auto unsqueeze = std::make_shared<opset5::Unsqueeze>(lstm_cell, axis_unsqueeze);
+ auto res_2 = std::make_shared<opset5::Result>(unsqueeze);
auto body = std::make_shared<Function>(OutputVector{res_1, res_2},
ParameterVector{Xi, Yi, Zi});
- auto tensor_iterator = std::make_shared<opset4::TensorIterator>();
+ auto tensor_iterator = std::make_shared<opset5::TensorIterator>();
tensor_iterator->set_body(body);
tensor_iterator->set_invariant_input(Zi, Z);
auto out0 = tensor_iterator->get_iter_value(res_1, -1);
auto out1 = tensor_iterator->get_concatenated_slices(res_2, 0, 1, 1, -1, 1);
- auto res_ti_1 = std::make_shared<opset4::Result>(tensor_iterator->output(1));
- //auto res_ti_2 = std::make_shared<opset4::Result>(tensor_iterator->output(0));
+ auto res_ti_1 = std::make_shared<opset5::Result>(tensor_iterator->output(1));
+ //auto res_ti_2 = std::make_shared<opset5::Result>(tensor_iterator->output(0));
f = std::make_shared<ngraph::Function>(ngraph::NodeVector{res_ti_1},
ngraph::ParameterVector{X, Y, Z});
}
{
- auto X = std::make_shared<opset4::Parameter>(element::f32, Shape{1, 2, 16});
- auto Y = std::make_shared<opset4::Parameter>(element::f32, Shape{1, 128});
- auto Z = std::make_shared<opset4::Parameter>(element::f32, Shape{1, 128});
+ auto X = std::make_shared<opset5::Parameter>(element::f32, Shape{1, 2, 16});
+ auto Y = std::make_shared<opset5::Parameter>(element::f32, Shape{1, 128});
+ auto Z = std::make_shared<opset5::Parameter>(element::f32, Shape{1, 128});
auto w_val = std::vector<float>(512 * 16, 0);
auto r_val = std::vector<float>(512 * 128, 0);
auto b_val = std::vector<float>(512, 0);
- auto W = ngraph::opset4::Constant::create(ngraph::element::f32, ngraph::Shape{512, 16}, w_val);
- auto R = ngraph::opset4::Constant::create(ngraph::element::f32, ngraph::Shape{512, 128}, r_val);
- auto B = ngraph::opset4::Constant::create(ngraph::element::f32, ngraph::Shape{512}, b_val);
+ auto W = ngraph::opset5::Constant::create(ngraph::element::f32, ngraph::Shape{512, 16}, w_val);
+ auto R = ngraph::opset5::Constant::create(ngraph::element::f32, ngraph::Shape{512, 128}, r_val);
+ auto B = ngraph::opset5::Constant::create(ngraph::element::f32, ngraph::Shape{512}, b_val);
- auto axis_1 = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
- auto in_1 = std::make_shared<ngraph::opset4::Unsqueeze>(Y, axis_1);
- auto in_2 = std::make_shared<ngraph::opset4::Unsqueeze>(Z, axis_1);
+ auto axis_1 = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
+ auto in_1 = std::make_shared<ngraph::opset5::Unsqueeze>(Y, axis_1);
+ auto in_2 = std::make_shared<ngraph::opset5::Unsqueeze>(Z, axis_1);
- auto axis_2 = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {0});
- auto in_4 = std::make_shared<ngraph::opset4::Unsqueeze>(W, axis_2);
- auto in_5 = std::make_shared<ngraph::opset4::Unsqueeze>(R, axis_2);
- auto in_6 = std::make_shared<ngraph::opset4::Unsqueeze>(B, axis_2);
+ auto axis_2 = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {0});
+ auto in_4 = std::make_shared<ngraph::opset5::Unsqueeze>(W, axis_2);
+ auto in_5 = std::make_shared<ngraph::opset5::Unsqueeze>(R, axis_2);
+ auto in_6 = std::make_shared<ngraph::opset5::Unsqueeze>(B, axis_2);
- auto seq_lengths = ngraph::opset4::Constant::create(element::i32, Shape{1}, {2});
- auto lstm_seq = std::make_shared<op::v5::LSTMSequence>(X, in_1, in_2, seq_lengths, in_4, in_5, in_6,
+ auto seq_lengths = ngraph::opset5::Constant::create(element::i32, Shape{1}, {2});
+ auto lstm_seq = std::make_shared<opset5::LSTMSequence>(X, in_1, in_2, seq_lengths, in_4, in_5, in_6,
128, ngraph::op::RecurrentSequenceDirection::FORWARD);
- auto axis_out = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
- auto out_0 = std::make_shared<ngraph::opset4::Squeeze>(lstm_seq->output(0), axis_out);
- auto out_1 = std::make_shared<ngraph::opset4::Squeeze>(lstm_seq->output(1), axis_out);
- auto out_2 = std::make_shared<ngraph::opset4::Squeeze>(lstm_seq->output(1), axis_out);
- auto res_ti_1 = std::make_shared<opset4::Result>(out_0);
+ auto axis_out = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
+ auto out_0 = std::make_shared<ngraph::opset5::Squeeze>(lstm_seq->output(0), axis_out);
+ auto out_1 = std::make_shared<ngraph::opset5::Squeeze>(lstm_seq->output(1), axis_out);
+ auto out_2 = std::make_shared<ngraph::opset5::Squeeze>(lstm_seq->output(1), axis_out);
+ auto res_ti_1 = std::make_shared<opset5::Result>(out_0);
f_ref = std::make_shared<ngraph::Function>(ngraph::NodeVector{res_ti_1}, ngraph::ParameterVector{X, Y, Z});
}
TEST(TransformationTests, ConvertTensorIteratorToRNNSequence) {
std::shared_ptr<ngraph::Function> f(nullptr), f_ref(nullptr);
{
- auto X = std::make_shared<opset4::Parameter>(element::f32, Shape{1, 2, 16});
- auto Y = std::make_shared<opset4::Parameter>(element::f32, Shape{1, 128});
+ auto X = std::make_shared<opset5::Parameter>(element::f32, Shape{1, 2, 16});
+ auto Y = std::make_shared<opset5::Parameter>(element::f32, Shape{1, 128});
- auto Xi = std::make_shared<opset4::Parameter>(element::f32, Shape{1, 1, 16});
- auto Yi = std::make_shared<opset4::Parameter>(element::f32, Shape{1, 128});
+ auto Xi = std::make_shared<opset5::Parameter>(element::f32, Shape{1, 1, 16});
+ auto Yi = std::make_shared<opset5::Parameter>(element::f32, Shape{1, 128});
// Body
- auto axis = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
- auto squeeze = std::make_shared<opset4::Squeeze>(Xi, axis);
+ auto axis = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
+ auto squeeze = std::make_shared<opset5::Squeeze>(Xi, axis);
auto w_val = std::vector<float>(128 * 16, 0);
auto r_val = std::vector<float>(128 * 128, 0);
auto b_val = std::vector<float>(128, 0);
- auto W = ngraph::opset4::Constant::create(ngraph::element::f32, ngraph::Shape{128, 16}, w_val);
- auto R = ngraph::opset4::Constant::create(ngraph::element::f32, ngraph::Shape{128, 128}, r_val);
- auto B = ngraph::opset4::Constant::create(ngraph::element::f32, ngraph::Shape{128}, b_val);
-
- auto rnn_cell = std::make_shared<opset4::RNNCell>(squeeze, Yi, W, R, B, 128);
- auto res_1 = std::make_shared<opset4::Result>(rnn_cell);
- auto axis_unsqueeze = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
- auto unsqueeze = std::make_shared<opset4::Unsqueeze>(rnn_cell, axis_unsqueeze);
- auto res_2 = std::make_shared<opset4::Result>(unsqueeze);
+ auto W = ngraph::opset5::Constant::create(ngraph::element::f32, ngraph::Shape{128, 16}, w_val);
+ auto R = ngraph::opset5::Constant::create(ngraph::element::f32, ngraph::Shape{128, 128}, r_val);
+ auto B = ngraph::opset5::Constant::create(ngraph::element::f32, ngraph::Shape{128}, b_val);
+
+ auto rnn_cell = std::make_shared<opset5::RNNCell>(squeeze, Yi, W, R, B, 128);
+ auto res_1 = std::make_shared<opset5::Result>(rnn_cell);
+ auto axis_unsqueeze = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
+ auto unsqueeze = std::make_shared<opset5::Unsqueeze>(rnn_cell, axis_unsqueeze);
+ auto res_2 = std::make_shared<opset5::Result>(unsqueeze);
auto body = std::make_shared<Function>(OutputVector{res_1, res_2},
ParameterVector{Xi, Yi});
- auto tensor_iterator = std::make_shared<opset4::TensorIterator>();
+ auto tensor_iterator = std::make_shared<opset5::TensorIterator>();
tensor_iterator->set_body(body);
tensor_iterator->set_sliced_input(Xi, X, 0, 1, 1, -1, 1);
auto out0 = tensor_iterator->get_iter_value(res_1, -1);
auto out1 = tensor_iterator->get_concatenated_slices(res_2, 0, 1, 1, -1, 1);
- auto res_ti_1 = std::make_shared<opset4::Result>(tensor_iterator->output(1));
- //auto res_ti_2 = std::make_shared<opset4::Result>(tensor_iterator->output(0));
+ auto res_ti_1 = std::make_shared<opset5::Result>(tensor_iterator->output(1));
+ //auto res_ti_2 = std::make_shared<opset5::Result>(tensor_iterator->output(0));
f = std::make_shared<ngraph::Function>(ngraph::NodeVector{res_ti_1},
ngraph::ParameterVector{X, Y});
}
{
- auto X = std::make_shared<opset4::Parameter>(element::f32, Shape{1, 2, 16});
- auto Y = std::make_shared<opset4::Parameter>(element::f32, Shape{1, 128});
+ auto X = std::make_shared<opset5::Parameter>(element::f32, Shape{1, 2, 16});
+ auto Y = std::make_shared<opset5::Parameter>(element::f32, Shape{1, 128});
auto w_val = std::vector<float>(128 * 16, 0);
auto r_val = std::vector<float>(128 * 128, 0);
auto b_val = std::vector<float>(128, 0);
- auto W = ngraph::opset4::Constant::create(ngraph::element::f32, ngraph::Shape{128, 16}, w_val);
- auto R = ngraph::opset4::Constant::create(ngraph::element::f32, ngraph::Shape{128, 128}, r_val);
- auto B = ngraph::opset4::Constant::create(ngraph::element::f32, ngraph::Shape{128}, b_val);
+ auto W = ngraph::opset5::Constant::create(ngraph::element::f32, ngraph::Shape{128, 16}, w_val);
+ auto R = ngraph::opset5::Constant::create(ngraph::element::f32, ngraph::Shape{128, 128}, r_val);
+ auto B = ngraph::opset5::Constant::create(ngraph::element::f32, ngraph::Shape{128}, b_val);
- auto axis_1 = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
- auto in_1 = std::make_shared<ngraph::opset4::Unsqueeze>(Y, axis_1);
+ auto axis_1 = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
+ auto in_1 = std::make_shared<ngraph::opset5::Unsqueeze>(Y, axis_1);
- auto axis_2 = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {0});
- auto in_3 = std::make_shared<ngraph::opset4::Unsqueeze>(W, axis_2);
- auto in_4 = std::make_shared<ngraph::opset4::Unsqueeze>(R, axis_2);
- auto in_5 = std::make_shared<ngraph::opset4::Unsqueeze>(B, axis_2);
+ auto axis_2 = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {0});
+ auto in_3 = std::make_shared<ngraph::opset5::Unsqueeze>(W, axis_2);
+ auto in_4 = std::make_shared<ngraph::opset5::Unsqueeze>(R, axis_2);
+ auto in_5 = std::make_shared<ngraph::opset5::Unsqueeze>(B, axis_2);
- auto seq_lengths = ngraph::opset4::Constant::create(element::i32, Shape{1}, {2});
- auto rnn_sequence = std::make_shared<op::v5::RNNSequence>(X, in_1, seq_lengths, in_3, in_4, in_5,
+ auto seq_lengths = ngraph::opset5::Constant::create(element::i32, Shape{1}, {2});
+ auto rnn_sequence = std::make_shared<opset5::RNNSequence>(X, in_1, seq_lengths, in_3, in_4, in_5,
128, ngraph::op::RecurrentSequenceDirection::FORWARD);
- auto axis_out = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
- auto out_0 = std::make_shared<ngraph::opset4::Squeeze>(rnn_sequence->output(0), axis_out);
- auto out_1 = std::make_shared<ngraph::opset4::Squeeze>(rnn_sequence->output(1), axis_out);
- auto res_ti_1 = std::make_shared<opset4::Result>(out_0);
+ auto axis_out = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
+ auto out_0 = std::make_shared<ngraph::opset5::Squeeze>(rnn_sequence->output(0), axis_out);
+ auto out_1 = std::make_shared<ngraph::opset5::Squeeze>(rnn_sequence->output(1), axis_out);
+ auto res_ti_1 = std::make_shared<opset5::Result>(out_0);
f_ref = std::make_shared<ngraph::Function>(ngraph::NodeVector{res_ti_1}, ngraph::ParameterVector{X, Y});
}
TEST(TransformationTests, ConvertTensorIteratorToGRUSequence) {
std::shared_ptr<ngraph::Function> f(nullptr), f_ref(nullptr);
{
- auto X = std::make_shared<opset4::Parameter>(element::f32, Shape{1, 2, 16});
- auto Y = std::make_shared<opset4::Parameter>(element::f32, Shape{1, 128});
+ auto X = std::make_shared<opset5::Parameter>(element::f32, Shape{1, 2, 16});
+ auto Y = std::make_shared<opset5::Parameter>(element::f32, Shape{1, 128});
- auto Xi = std::make_shared<opset4::Parameter>(element::f32, Shape{1, 1, 16});
- auto Yi = std::make_shared<opset4::Parameter>(element::f32, Shape{1, 128});
+ auto Xi = std::make_shared<opset5::Parameter>(element::f32, Shape{1, 1, 16});
+ auto Yi = std::make_shared<opset5::Parameter>(element::f32, Shape{1, 128});
// Body
- auto axis = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
- auto squeeze = std::make_shared<opset4::Squeeze>(Xi, axis);
+ auto axis = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
+ auto squeeze = std::make_shared<opset5::Squeeze>(Xi, axis);
auto w_val = std::vector<float>(384 * 16, 0);
auto r_val = std::vector<float>(384 * 128, 0);
auto b_val = std::vector<float>(384, 0);
- auto W = ngraph::opset4::Constant::create(ngraph::element::f32, ngraph::Shape{384, 16}, w_val);
- auto R = ngraph::opset4::Constant::create(ngraph::element::f32, ngraph::Shape{384, 128}, r_val);
- auto B = ngraph::opset4::Constant::create(ngraph::element::f32, ngraph::Shape{384}, b_val);
-
- auto gru_cell = std::make_shared<opset4::GRUCell>(squeeze, Yi, W, R, B, 128);
- auto res_1 = std::make_shared<opset4::Result>(gru_cell);
- auto axis_unsqueeze = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
- auto unsqueeze = std::make_shared<opset4::Unsqueeze>(gru_cell, axis_unsqueeze);
- auto res_2 = std::make_shared<opset4::Result>(unsqueeze);
+ auto W = ngraph::opset5::Constant::create(ngraph::element::f32, ngraph::Shape{384, 16}, w_val);
+ auto R = ngraph::opset5::Constant::create(ngraph::element::f32, ngraph::Shape{384, 128}, r_val);
+ auto B = ngraph::opset5::Constant::create(ngraph::element::f32, ngraph::Shape{384}, b_val);
+
+ auto gru_cell = std::make_shared<opset5::GRUCell>(squeeze, Yi, W, R, B, 128);
+ auto res_1 = std::make_shared<opset5::Result>(gru_cell);
+ auto axis_unsqueeze = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
+ auto unsqueeze = std::make_shared<opset5::Unsqueeze>(gru_cell, axis_unsqueeze);
+ auto res_2 = std::make_shared<opset5::Result>(unsqueeze);
auto body = std::make_shared<Function>(OutputVector{res_1, res_2},
ParameterVector{Xi, Yi});
- auto tensor_iterator = std::make_shared<opset4::TensorIterator>();
+ auto tensor_iterator = std::make_shared<opset5::TensorIterator>();
tensor_iterator->set_body(body);
tensor_iterator->set_sliced_input(Xi, X, 0, 1, 1, -1, 1);
auto out0 = tensor_iterator->get_iter_value(res_1, -1);
auto out1 = tensor_iterator->get_concatenated_slices(res_2, 0, 1, 1, -1, 1);
- auto res_ti_1 = std::make_shared<opset4::Result>(tensor_iterator->output(1));
- //auto res_tRNNCelli_2 = std::make_shared<opset4::Result>(tensor_iterator->output(0));
+ auto res_ti_1 = std::make_shared<opset5::Result>(tensor_iterator->output(1));
+ //auto res_tRNNCelli_2 = std::make_shared<opset5::Result>(tensor_iterator->output(0));
f = std::make_shared<ngraph::Function>(ngraph::NodeVector{res_ti_1},
ngraph::ParameterVector{X, Y});
}
{
- auto X = std::make_shared<opset4::Parameter>(element::f32, Shape{1, 2, 16});
- auto Y = std::make_shared<opset4::Parameter>(element::f32, Shape{1, 128});
+ auto X = std::make_shared<opset5::Parameter>(element::f32, Shape{1, 2, 16});
+ auto Y = std::make_shared<opset5::Parameter>(element::f32, Shape{1, 128});
auto w_val = std::vector<float>(384 * 16, 0);
auto r_val = std::vector<float>(384 * 128, 0);
auto b_val = std::vector<float>(384, 0);
- auto W = ngraph::opset4::Constant::create(ngraph::element::f32, ngraph::Shape{384, 16}, w_val);
- auto R = ngraph::opset4::Constant::create(ngraph::element::f32, ngraph::Shape{384, 128}, r_val);
- auto B = ngraph::opset4::Constant::create(ngraph::element::f32, ngraph::Shape{384}, b_val);
+ auto W = ngraph::opset5::Constant::create(ngraph::element::f32, ngraph::Shape{384, 16}, w_val);
+ auto R = ngraph::opset5::Constant::create(ngraph::element::f32, ngraph::Shape{384, 128}, r_val);
+ auto B = ngraph::opset5::Constant::create(ngraph::element::f32, ngraph::Shape{384}, b_val);
- auto axis_1 = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
- auto in_1 = std::make_shared<ngraph::opset4::Unsqueeze>(Y, axis_1);
+ auto axis_1 = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
+ auto in_1 = std::make_shared<ngraph::opset5::Unsqueeze>(Y, axis_1);
- auto axis_2 = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {0});
- auto in_3 = std::make_shared<ngraph::opset4::Unsqueeze>(W, axis_2);
- auto in_4 = std::make_shared<ngraph::opset4::Unsqueeze>(R, axis_2);
- auto in_5 = std::make_shared<ngraph::opset4::Unsqueeze>(B, axis_2);
+ auto axis_2 = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {0});
+ auto in_3 = std::make_shared<ngraph::opset5::Unsqueeze>(W, axis_2);
+ auto in_4 = std::make_shared<ngraph::opset5::Unsqueeze>(R, axis_2);
+ auto in_5 = std::make_shared<ngraph::opset5::Unsqueeze>(B, axis_2);
- auto seq_lengths = ngraph::opset4::Constant::create(element::i32, Shape{1}, {2});
- auto gru_sequence = std::make_shared<op::v5::GRUSequence>(X, in_1, seq_lengths, in_3, in_4, in_5,
+ auto seq_lengths = ngraph::opset5::Constant::create(element::i32, Shape{1}, {2});
+ auto gru_sequence = std::make_shared<opset5::GRUSequence>(X, in_1, seq_lengths, in_3, in_4, in_5,
128, ngraph::op::RecurrentSequenceDirection::FORWARD);
- auto axis_out = ngraph::opset4::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
- auto out_0 = std::make_shared<ngraph::opset4::Squeeze>(gru_sequence->output(0), axis_out);
- auto out_1 = std::make_shared<ngraph::opset4::Squeeze>(gru_sequence->output(1), axis_out);
- auto res_ti_1 = std::make_shared<opset4::Result>(out_0);
+ auto axis_out = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{1}, {1});
+ auto out_0 = std::make_shared<ngraph::opset5::Squeeze>(gru_sequence->output(0), axis_out);
+ auto out_1 = std::make_shared<ngraph::opset5::Squeeze>(gru_sequence->output(1), axis_out);
+ auto res_ti_1 = std::make_shared<opset5::Result>(out_0);
f_ref = std::make_shared<ngraph::Function>(ngraph::NodeVector{res_ti_1}, ngraph::ParameterVector{X, Y});
}
#include <ngraph/opsets/opset2.hpp>
#include <ngraph/opsets/opset3.hpp>
#include <ngraph/opsets/opset4.hpp>
+#include <ngraph/opsets/opset5.hpp>
#include "ngraph_functions/utils/data_utils.hpp"
} else {
std::vector<float> lenghts(in[0].get_shape()[0], in[0].get_shape()[1]);
auto seq_lenghts = ngraph::builder::makeConstant(in[0].get_element_type(), constants[3], lenghts, false);
- return std::make_shared<ngraph::op::v5::GRUSequence>(in[0], in[1], seq_lenghts, W, R, B, hidden_size, direction,
+ return std::make_shared<ngraph::opset5::GRUSequence>(in[0], in[1], seq_lenghts, W, R, B, hidden_size, direction,
activations, activations_alpha, activations_beta, clip, linear_before_reset);
}
}
} else {
std::vector<float> lenghts(in[0].get_shape()[0], in[0].get_shape()[1]);
auto seq_lenghts = ngraph::builder::makeConstant(in[0].get_element_type(), constants[3], lenghts, false);
- return std::make_shared<ngraph::op::v5::LSTMSequence>(in[0], in[1], in[2], seq_lenghts, W, R, B, hidden_size, direction,
+ return std::make_shared<ngraph::opset5::LSTMSequence>(in[0], in[1], in[2], seq_lenghts, W, R, B, hidden_size, direction,
activations_alpha, activations_beta, activations, clip);
}
}
} else {
std::vector<float> lenghts(in[0].get_shape()[0], in[0].get_shape()[1]);
auto seq_lenghts = ngraph::builder::makeConstant(in[0].get_element_type(), constants[3], lenghts, false);
- return std::make_shared<ngraph::op::v5::RNNSequence>(in[0], in[1], seq_lenghts, W, R, B, hidden_size, direction,
+ return std::make_shared<ngraph::opset5::RNNSequence>(in[0], in[1], seq_lenghts, W, R, B, hidden_size, direction,
activations, activations_alpha, activations_beta, clip);
}
}
const NGRAPH_API OpSet& get_opset2();
const NGRAPH_API OpSet& get_opset3();
const NGRAPH_API OpSet& get_opset4();
+ const NGRAPH_API OpSet& get_opset5();
}
--- /dev/null
+//*****************************************************************************
+// Copyright 2017-2020 Intel Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//*****************************************************************************
+
+#pragma once
+
+#include "ngraph/ops.hpp"
+
+namespace ngraph
+{
+ namespace opset5
+ {
+#define NGRAPH_OP(a, b) using b::a;
+#include "ngraph/opsets/opset5_tbl.hpp"
+#undef NGRAPH_OP
+ }
+}
--- /dev/null
+//*****************************************************************************
+// Copyright 2017-2020 Intel Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//*****************************************************************************
+
+#ifndef NGRAPH_OP
+#warning "NGRAPH_OP not defined"
+#define NGRAPH_OP(x, y)
+#endif
+
+NGRAPH_OP(Abs, ngraph::op::v0)
+NGRAPH_OP(Acos, ngraph::op::v0)
+NGRAPH_OP(Add, ngraph::op::v1)
+NGRAPH_OP(Asin, ngraph::op::v0)
+NGRAPH_OP(Atan, ngraph::op::v0)
+NGRAPH_OP(AvgPool, ngraph::op::v1)
+NGRAPH_OP(BatchNormInference, ngraph::op::v0)
+NGRAPH_OP(BinaryConvolution, ngraph::op::v1)
+NGRAPH_OP(Broadcast, ngraph::op::v3)
+NGRAPH_OP(Bucketize, ngraph::op::v3)
+NGRAPH_OP(CTCGreedyDecoder, ngraph::op::v0)
+NGRAPH_OP(Ceiling, ngraph::op::v0)
+NGRAPH_OP(Clamp, ngraph::op::v0)
+NGRAPH_OP(Concat, ngraph::op::v0)
+NGRAPH_OP(Constant, ngraph::op)
+NGRAPH_OP(Convert, ngraph::op::v0)
+NGRAPH_OP(ConvertLike, ngraph::op::v1)
+NGRAPH_OP(Convolution, ngraph::op::v1)
+NGRAPH_OP(ConvolutionBackpropData, ngraph::op::v1)
+NGRAPH_OP(Cos, ngraph::op::v0)
+NGRAPH_OP(Cosh, ngraph::op::v0)
+NGRAPH_OP(CumSum, ngraph::op::v0)
+NGRAPH_OP(DeformableConvolution, ngraph::op::v1)
+NGRAPH_OP(DeformablePSROIPooling, ngraph::op::v1)
+NGRAPH_OP(DepthToSpace, ngraph::op::v0)
+NGRAPH_OP(DetectionOutput, ngraph::op::v0)
+NGRAPH_OP(Divide, ngraph::op::v1)
+NGRAPH_OP(Elu, ngraph::op::v0)
+NGRAPH_OP(Erf, ngraph::op::v0)
+NGRAPH_OP(Equal, ngraph::op::v1)
+NGRAPH_OP(Exp, ngraph::op::v0)
+NGRAPH_OP(ExtractImagePatches, ngraph::op::v3)
+NGRAPH_OP(FakeQuantize, ngraph::op::v0)
+NGRAPH_OP(Floor, ngraph::op::v0)
+NGRAPH_OP(FloorMod, ngraph::op::v1)
+NGRAPH_OP(Gather, ngraph::op::v1)
+NGRAPH_OP(GatherTree, ngraph::op::v1)
+NGRAPH_OP(Greater, ngraph::op::v1)
+NGRAPH_OP(GreaterEqual, ngraph::op::v1)
+NGRAPH_OP(GroupConvolution, ngraph::op::v1)
+NGRAPH_OP(GroupConvolutionBackpropData, ngraph::op::v1)
+NGRAPH_OP(GRN, ngraph::op::v0)
+NGRAPH_OP(HardSigmoid, ngraph::op::v0)
+NGRAPH_OP(Less, ngraph::op::v1)
+NGRAPH_OP(LessEqual, ngraph::op::v1)
+NGRAPH_OP(Log, ngraph::op::v0)
+NGRAPH_OP(LogicalAnd, ngraph::op::v1)
+NGRAPH_OP(LogicalNot, ngraph::op::v1)
+NGRAPH_OP(LogicalOr, ngraph::op::v1)
+NGRAPH_OP(LogicalXor, ngraph::op::v1)
+NGRAPH_OP(LRN, ngraph::op::v0)
+NGRAPH_OP(LSTMCell, ngraph::op::v4)
+NGRAPH_OP(MatMul, ngraph::op::v0)
+NGRAPH_OP(MaxPool, ngraph::op::v1)
+NGRAPH_OP(Maximum, ngraph::op::v1)
+NGRAPH_OP(Minimum, ngraph::op::v1)
+NGRAPH_OP(Mod, ngraph::op::v1)
+NGRAPH_OP(Multiply, ngraph::op::v1)
+NGRAPH_OP(MVN, ngraph::op::v0)
+NGRAPH_OP(Negative, ngraph::op::v0)
+NGRAPH_OP(NormalizeL2, ngraph::op::v0)
+NGRAPH_OP(NotEqual, ngraph::op::v1)
+NGRAPH_OP(OneHot, ngraph::op::v1)
+NGRAPH_OP(PRelu, ngraph::op::v0)
+NGRAPH_OP(PSROIPooling, ngraph::op::v0)
+NGRAPH_OP(Pad, ngraph::op::v1)
+NGRAPH_OP(Parameter, ngraph::op::v0)
+NGRAPH_OP(Power, ngraph::op::v1)
+NGRAPH_OP(PriorBox, ngraph::op::v0)
+NGRAPH_OP(PriorBoxClustered, ngraph::op::v0)
+NGRAPH_OP(Proposal, ngraph::op::v4)
+NGRAPH_OP(Range, ngraph::op::v4)
+NGRAPH_OP(Relu, ngraph::op::v0)
+NGRAPH_OP(ReduceMax, ngraph::op::v1)
+NGRAPH_OP(ReduceLogicalAnd, ngraph::op::v1)
+NGRAPH_OP(ReduceLogicalOr, ngraph::op::v1)
+NGRAPH_OP(ReduceMean, ngraph::op::v1)
+NGRAPH_OP(ReduceMin, ngraph::op::v1)
+NGRAPH_OP(ReduceProd, ngraph::op::v1)
+NGRAPH_OP(ReduceSum, ngraph::op::v1)
+NGRAPH_OP(RegionYolo, ngraph::op::v0)
+NGRAPH_OP(ReorgYolo, ngraph::op::v0)
+NGRAPH_OP(Reshape, ngraph::op::v1)
+NGRAPH_OP(Result, ngraph::op::v0)
+NGRAPH_OP(ReverseSequence, ngraph::op::v0)
+NGRAPH_OP(ROIPooling, ngraph::op::v0)
+NGRAPH_OP(ScatterNDUpdate, ngraph::op::v3)
+NGRAPH_OP(Select, ngraph::op::v1)
+NGRAPH_OP(Selu, ngraph::op::v0)
+NGRAPH_OP(Sign, ngraph::op::v0)
+NGRAPH_OP(Sigmoid, ngraph::op::v0)
+NGRAPH_OP(Sin, ngraph::op::v0)
+NGRAPH_OP(Sinh, ngraph::op::v0)
+NGRAPH_OP(Softmax, ngraph::op::v1)
+NGRAPH_OP(Sqrt, ngraph::op::v0)
+NGRAPH_OP(SpaceToDepth, ngraph::op::v0)
+NGRAPH_OP(Split, ngraph::op::v1)
+NGRAPH_OP(SquaredDifference, ngraph::op::v0)
+NGRAPH_OP(Squeeze, ngraph::op::v0)
+NGRAPH_OP(StridedSlice, ngraph::op::v1)
+NGRAPH_OP(Subtract, ngraph::op::v1)
+NGRAPH_OP(Tan, ngraph::op::v0)
+NGRAPH_OP(Tanh, ngraph::op::v0)
+NGRAPH_OP(TensorIterator, ngraph::op::v0)
+NGRAPH_OP(Tile, ngraph::op::v0)
+NGRAPH_OP(Transpose, ngraph::op::v1)
+NGRAPH_OP(Unsqueeze, ngraph::op::v0)
+NGRAPH_OP(VariadicSplit, ngraph::op::v1)
+
+// New operations added in opset2
+NGRAPH_OP(Gelu, ngraph::op::v0)
+NGRAPH_OP(BatchToSpace, ngraph::op::v1)
+NGRAPH_OP(SpaceToBatch, ngraph::op::v1)
+
+// New operations added in opset3
+NGRAPH_OP(EmbeddingBagPackedSum, ngraph::op::v3)
+NGRAPH_OP(EmbeddingSegmentsSum, ngraph::op::v3)
+NGRAPH_OP(EmbeddingBagOffsetsSum, ngraph::op::v3)
+NGRAPH_OP(GRUCell, ngraph::op::v3)
+NGRAPH_OP(NonZero, ngraph::op::v3)
+NGRAPH_OP(RNNCell, ngraph::op::v0)
+NGRAPH_OP(ROIAlign, ngraph::op::v3)
+NGRAPH_OP(ScatterElementsUpdate, ngraph::op::v3)
+NGRAPH_OP(ScatterUpdate, ngraph::op::v3)
+NGRAPH_OP(ShuffleChannels, ngraph::op::v0)
+NGRAPH_OP(ShapeOf, ngraph::op::v3)
+NGRAPH_OP(Assign, ngraph::op::v3)
+NGRAPH_OP(ReadValue, ngraph::op::v3)
+NGRAPH_OP(TopK, ngraph::op::v3)
+
+// New operations added in opset4
+NGRAPH_OP(Acosh, ngraph::op::v3)
+NGRAPH_OP(Asinh, ngraph::op::v3)
+NGRAPH_OP(Atanh, ngraph::op::v3)
+NGRAPH_OP(CTCLoss, ngraph::op::v4)
+NGRAPH_OP(HSwish, ngraph::op::v4)
+NGRAPH_OP(Interpolate, ngraph::op::v4)
+NGRAPH_OP(Mish, ngraph::op::v4)
+NGRAPH_OP(NonMaxSuppression, ngraph::op::v4)
+NGRAPH_OP(ReduceL1, ngraph::op::v4)
+NGRAPH_OP(ReduceL2, ngraph::op::v4)
+NGRAPH_OP(SoftPlus, ngraph::op::v4)
+NGRAPH_OP(Swish, ngraph::op::v4)
+
+// New operations added in opset5
+NGRAPH_OP(LSTMSequence, ngraph::op::v5)
+NGRAPH_OP(GRUSequence, ngraph::op::v5)
+NGRAPH_OP(RNNSequence, ngraph::op::v5)
\ No newline at end of file
}
return opset;
}
+
+const ngraph::OpSet& ngraph::get_opset5()
+{
+ static std::mutex init_mutex;
+ static bool opset_is_initialized = false;
+ static OpSet opset;
+ if (!opset_is_initialized)
+ {
+ std::lock_guard<std::mutex> guard(init_mutex);
+ if (!opset_is_initialized)
+ {
+#define NGRAPH_OP(NAME, NAMESPACE) opset.insert<NAMESPACE::NAME>();
+#include "ngraph/opsets/opset5_tbl.hpp"
+#undef NGRAPH_OP
+ opset_is_initialized = true;
+ }
+ }
+ return opset;
+}
\ No newline at end of file
#include "ngraph/opsets/opset1.hpp"
#include "ngraph/opsets/opset3.hpp"
#include "ngraph/opsets/opset4.hpp"
+#include "ngraph/opsets/opset5.hpp"
#include "util/visitor.hpp"
TEST(attributes, lstm_sequence_op)
{
- FactoryRegistry<Node>::get().register_factory<op::v5::LSTMSequence>();
+ FactoryRegistry<Node>::get().register_factory<opset5::LSTMSequence>();
const size_t batch_size = 4;
const size_t num_directions = 2;
const std::vector<std::string> activations = {"tanh", "sigmoid", "tanh"};
const float clip_threshold = 0.5f;
- const auto lstm_sequence = make_shared<op::v5::LSTMSequence>(X,
+ const auto lstm_sequence = make_shared<opset5::LSTMSequence>(X,
initial_hidden_state,
initial_cell_state,
sequence_lengths,
activations,
clip_threshold);
NodeBuilder builder(lstm_sequence);
- auto g_lstm_sequence = as_type_ptr<op::v5::LSTMSequence>(builder.create());
+ auto g_lstm_sequence = as_type_ptr<opset5::LSTMSequence>(builder.create());
EXPECT_EQ(g_lstm_sequence->get_hidden_size(), lstm_sequence->get_hidden_size());
EXPECT_EQ(g_lstm_sequence->get_activations(), lstm_sequence->get_activations());
#include "gtest/gtest.h"
#include "ngraph/ngraph.hpp"
-#include "ngraph/opsets/opset4.hpp"
+#include "ngraph/opsets/opset5.hpp"
#include "util/type_prop.hpp"
using namespace std;
const size_t hidden_size = 128;
const auto X =
- make_shared<opset4::Parameter>(element::f32, Shape{batch_size, seq_length, input_size});
- const auto initial_hidden_state = make_shared<opset4::Parameter>(
+ make_shared<opset5::Parameter>(element::f32, Shape{batch_size, seq_length, input_size});
+ const auto initial_hidden_state = make_shared<opset5::Parameter>(
element::f32, Shape{batch_size, num_directions, hidden_size});
const auto sequence_lengths = make_shared<op::Parameter>(element::i32, Shape{batch_size});
- const auto W = make_shared<opset4::Parameter>(
+ const auto W = make_shared<opset5::Parameter>(
element::f32, Shape{num_directions, 3 * hidden_size, input_size});
- const auto R = make_shared<opset4::Parameter>(
+ const auto R = make_shared<opset5::Parameter>(
element::f32, Shape{num_directions, 3 * hidden_size, hidden_size});
const auto B =
- make_shared<opset4::Parameter>(element::f32, Shape{num_directions, 3 * hidden_size});
+ make_shared<opset5::Parameter>(element::f32, Shape{num_directions, 3 * hidden_size});
const auto direction = op::RecurrentSequenceDirection::FORWARD;
- const auto sequence = make_shared<op::v5::GRUSequence>(
+ const auto sequence = make_shared<opset5::GRUSequence>(
X, initial_hidden_state, sequence_lengths, W, R, B, hidden_size, direction);
EXPECT_EQ(sequence->get_hidden_size(), hidden_size);
#include "gtest/gtest.h"
#include "ngraph/ngraph.hpp"
-#include "ngraph/opsets/opset4.hpp"
+#include "ngraph/opsets/opset5.hpp"
#include "util/type_prop.hpp"
// suppress FusedOp deprecation warnings
//
// Create and initialize default input test tensors.
//
-shared_ptr<op::v5::LSTMSequence>
+shared_ptr<opset5::LSTMSequence>
lstm_seq_tensor_initialization(const recurrent_sequence_parameters& param)
{
auto batch_size = param.batch_size;
auto et = param.et;
const auto X =
- make_shared<opset4::Parameter>(et, PartialShape{batch_size, seq_length, input_size});
+ make_shared<opset5::Parameter>(et, PartialShape{batch_size, seq_length, input_size});
const auto initial_hidden_state =
- make_shared<opset4::Parameter>(et, PartialShape{batch_size, num_directions, hidden_size});
+ make_shared<opset5::Parameter>(et, PartialShape{batch_size, num_directions, hidden_size});
const auto initial_cell_state =
- make_shared<opset4::Parameter>(et, PartialShape{batch_size, num_directions, hidden_size});
- const auto sequence_lengths = make_shared<opset4::Parameter>(et, PartialShape{batch_size});
- const auto W = make_shared<opset4::Parameter>(
+ make_shared<opset5::Parameter>(et, PartialShape{batch_size, num_directions, hidden_size});
+ const auto sequence_lengths = make_shared<opset5::Parameter>(et, PartialShape{batch_size});
+ const auto W = make_shared<opset5::Parameter>(
et, PartialShape{num_directions, hidden_size * 4, input_size});
- const auto R = make_shared<opset4::Parameter>(
+ const auto R = make_shared<opset5::Parameter>(
et, PartialShape{num_directions, hidden_size * 4, hidden_size});
const auto B =
- make_shared<opset4::Parameter>(et, PartialShape{num_directions, hidden_size * 4});
+ make_shared<opset5::Parameter>(et, PartialShape{num_directions, hidden_size * 4});
- const auto lstm_sequence = make_shared<op::v5::LSTMSequence>();
+ const auto lstm_sequence = make_shared<opset5::LSTMSequence>();
lstm_sequence->set_argument(0, X);
lstm_sequence->set_argument(1, initial_hidden_state);
const size_t hidden_size = 128;
const auto X =
- make_shared<opset4::Parameter>(element::f32, Shape{batch_size, seq_length, input_size});
- const auto initial_hidden_state = make_shared<opset4::Parameter>(
+ make_shared<opset5::Parameter>(element::f32, Shape{batch_size, seq_length, input_size});
+ const auto initial_hidden_state = make_shared<opset5::Parameter>(
element::f32, Shape{batch_size, num_directions, hidden_size});
- const auto initial_cell_state = make_shared<opset4::Parameter>(
+ const auto initial_cell_state = make_shared<opset5::Parameter>(
element::f32, Shape{batch_size, num_directions, hidden_size});
- const auto sequence_lengths = make_shared<opset4::Parameter>(element::i32, Shape{batch_size});
- const auto W = make_shared<opset4::Parameter>(
+ const auto sequence_lengths = make_shared<opset5::Parameter>(element::i32, Shape{batch_size});
+ const auto W = make_shared<opset5::Parameter>(
element::f32, Shape{num_directions, 4 * hidden_size, input_size});
- const auto R = make_shared<opset4::Parameter>(
+ const auto R = make_shared<opset5::Parameter>(
element::f32, Shape{num_directions, 4 * hidden_size, hidden_size});
const auto B =
- make_shared<opset4::Parameter>(element::f32, Shape{num_directions, 4 * hidden_size});
+ make_shared<opset5::Parameter>(element::f32, Shape{num_directions, 4 * hidden_size});
const auto lstm_direction = op::RecurrentSequenceDirection::FORWARD;
- const auto lstm_sequence = make_shared<op::v5::LSTMSequence>(X,
+ const auto lstm_sequence = make_shared<opset5::LSTMSequence>(X,
initial_hidden_state,
initial_cell_state,
sequence_lengths,
const size_t hidden_size = 256;
const auto X =
- make_shared<opset4::Parameter>(element::f32, Shape{batch_size, seq_length, input_size});
- const auto initial_hidden_state = make_shared<opset4::Parameter>(
+ make_shared<opset5::Parameter>(element::f32, Shape{batch_size, seq_length, input_size});
+ const auto initial_hidden_state = make_shared<opset5::Parameter>(
element::f32, Shape{batch_size, num_directions, hidden_size});
- const auto initial_cell_state = make_shared<opset4::Parameter>(
+ const auto initial_cell_state = make_shared<opset5::Parameter>(
element::f32, Shape{batch_size, num_directions, hidden_size});
- const auto sequence_lengths = make_shared<opset4::Parameter>(element::i32, Shape{batch_size});
- const auto W = make_shared<opset4::Parameter>(
+ const auto sequence_lengths = make_shared<opset5::Parameter>(element::i32, Shape{batch_size});
+ const auto W = make_shared<opset5::Parameter>(
element::f32, Shape{num_directions, 4 * hidden_size, input_size});
- const auto R = make_shared<opset4::Parameter>(
+ const auto R = make_shared<opset5::Parameter>(
element::f32, Shape{num_directions, 4 * hidden_size, hidden_size});
const auto B =
- make_shared<opset4::Parameter>(element::f32, Shape{num_directions, 4 * hidden_size});
+ make_shared<opset5::Parameter>(element::f32, Shape{num_directions, 4 * hidden_size});
- const auto lstm_direction = op::v5::LSTMSequence::direction::BIDIRECTIONAL;
+ const auto lstm_direction = opset5::LSTMSequence::direction::BIDIRECTIONAL;
const std::vector<float> activations_alpha = {2.7, 7.0, 32.367};
const std::vector<float> activations_beta = {0.0, 5.49, 6.0};
const std::vector<std::string> activations = {"tanh", "sigmoid", "sigmoid"};
- const auto lstm_sequence = make_shared<op::v5::LSTMSequence>(X,
+ const auto lstm_sequence = make_shared<opset5::LSTMSequence>(X,
initial_hidden_state,
initial_cell_state,
sequence_lengths,
activations_beta,
activations);
EXPECT_EQ(lstm_sequence->get_hidden_size(), hidden_size);
- EXPECT_EQ(lstm_sequence->get_direction(), op::v5::LSTMSequence::direction::BIDIRECTIONAL);
+ EXPECT_EQ(lstm_sequence->get_direction(), opset5::LSTMSequence::direction::BIDIRECTIONAL);
EXPECT_EQ(lstm_sequence->get_activations_alpha(), activations_alpha);
EXPECT_EQ(lstm_sequence->get_activations_beta(), activations_beta);
EXPECT_EQ(lstm_sequence->get_activations()[0], "tanh");
param.et = element::f32;
auto lstm_sequence = lstm_seq_tensor_initialization(param);
- auto invalid_rank0_tensor = make_shared<opset4::Parameter>(param.et, PartialShape{});
+ auto invalid_rank0_tensor = make_shared<opset5::Parameter>(param.et, PartialShape{});
// Validate invalid rank0 tensor for all inputs: X, initial_hidden_state, initial_cell_state W,
// R, B
param.hidden_size = 256;
param.et = element::f32;
- auto check_dynamic_lstm = [](const shared_ptr<op::v5::LSTMSequence>& lstm) -> bool {
+ auto check_dynamic_lstm = [](const shared_ptr<opset5::LSTMSequence>& lstm) -> bool {
return lstm->output(0).get_partial_shape() == PartialShape::dynamic() &&
lstm->output(1).get_partial_shape() == PartialShape::dynamic() &&
lstm->output(2).get_partial_shape() == PartialShape::dynamic() &&
auto lstm_sequence = lstm_seq_tensor_initialization(param);
auto invalid_dynamic_tensor =
- make_shared<opset4::Parameter>(param.et, PartialShape::dynamic(Rank::dynamic()));
+ make_shared<opset5::Parameter>(param.et, PartialShape::dynamic(Rank::dynamic()));
// Validate invalid dynamic tensor for all inputs: X, initial_hidden_state, initial_cell_state
// W, R, B
#include "gtest/gtest.h"
#include "ngraph/ngraph.hpp"
-#include "ngraph/opsets/opset4.hpp"
+#include "ngraph/opsets/opset5.hpp"
#include "util/type_prop.hpp"
using namespace std;
const size_t hidden_size = 128;
const auto X =
- make_shared<opset4::Parameter>(element::f32, Shape{batch_size, seq_length, input_size});
- const auto initial_hidden_state = make_shared<opset4::Parameter>(
+ make_shared<opset5::Parameter>(element::f32, Shape{batch_size, seq_length, input_size});
+ const auto initial_hidden_state = make_shared<opset5::Parameter>(
element::f32, Shape{batch_size, num_directions, hidden_size});
const auto sequence_lengths = make_shared<op::Parameter>(element::i32, Shape{batch_size});
- const auto W = make_shared<opset4::Parameter>(element::f32,
+ const auto W = make_shared<opset5::Parameter>(element::f32,
Shape{num_directions, hidden_size, input_size});
- const auto R = make_shared<opset4::Parameter>(element::f32,
+ const auto R = make_shared<opset5::Parameter>(element::f32,
Shape{num_directions, hidden_size, hidden_size});
- const auto B = make_shared<opset4::Parameter>(element::f32, Shape{num_directions, hidden_size});
+ const auto B = make_shared<opset5::Parameter>(element::f32, Shape{num_directions, hidden_size});
const auto direction = op::RecurrentSequenceDirection::FORWARD;
- const auto sequence = make_shared<op::v5::RNNSequence>(
+ const auto sequence = make_shared<opset5::RNNSequence>(
X, initial_hidden_state, sequence_lengths, W, R, B, hidden_size, direction);
EXPECT_EQ(sequence->get_hidden_size(), hidden_size);