Publishing 2019 R1 content
[platform/upstream/dldt.git] / inference-engine / thirdparty / clDNN / api / C / one_hot.h
1 // Copyright (c) 2019 Intel Corporation
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //      http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 ///////////////////////////////////////////////////////////////////////////////////////////////////
16 #ifndef ONE_HOT_H
17 #define ONE_HOT_H
18
19 #include "cldnn.h"
20 /// @addtogroup c_api C API
21 /// @{
22 /// @addtogroup c_topology Network Topology
23 /// @{
24 /// @addtogroup c_primitives Primitives
25 /// @{
26
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
30
31     /// @brief Creates a one-hot encoding of the input.
32     /// @details Creates a one-hot encoding of the input, putting the new one-hot axis in the position
33     /// @n       specified by the @p one_hot_axis input, using the @p shape tensor as size reference.
34     /// @n       The size of @p shape must be appropriate for adding a one-hot axis to input. For example,
35     /// @n      <tt>input_sizes = (1, in_f, in_y, in_x)</tt> 
36     /// @n expanded with 
37     /// @n      <tt>one_hot_axis = 2</tt> 
38     /// @n would insert the one-hot axis in the Y dimension, requiring
39     /// @n      <tt>shape = (in_f, in_y, one-hot_limit, in_x)</tt> 
40     /// @n The output values would then be determined by input as
41     /// @n      <tt>output[f, y, i, x] = (input[0, f, y, x] == i) ? 1 : 0;</tt>
42     /// @n Since determining whether the input is appropriate (that the one-hot axis
43     /// @n has enough space to fully encode all inputs) requires scanning the whole
44     /// @n input, the primitive doesn't check for that, instead producing all-zeros
45     /// @n output axes for inputs below 0 and greater than the limit set by
46     /// @n @p shape.
47     /// @n
48     /// @n\b Requirements
49     /// @n - @p one_hot_axis must be within (inclusive) range 0 - 3.
50     /// @n - @p shape must fit input sizes (see example above).
51     /// @n - input batch size must be equal to 1.
52     /// @n
53     /// @n Breaking any of this conditions will cause exception throw.
54     CLDNN_BEGIN_PRIMITIVE_DESC(one_hot)
55     /// @brief Output size reference.
56     cldnn_tensor shape;
57     /// @brief One-hot axis position in output shape (0-based, from left to right).
58     uint16_t one_hot_axis;
59     CLDNN_END_PRIMITIVE_DESC(one_hot)
60
61         CLDNN_DECLARE_PRIMITIVE_TYPE_ID(one_hot);
62
63 #ifdef __cplusplus
64 }
65 #endif
66
67 /// @}
68 /// @}
69 /// @}
70 #endif /* ONE_HOT_H */
71