| 44 | } |
| 45 | |
| 46 | TensorDescriptor PoolingLayerNode::compute_output_descriptor(const TensorDescriptor &input_descriptor, |
| 47 | PoolingLayerInfo info) |
| 48 | { |
| 49 | unsigned int pooled_width = 0; |
| 50 | unsigned int pooled_height = 0; |
| 51 | |
| 52 | const unsigned int input_width = get_dimension_size(input_descriptor, DataLayoutDimension::WIDTH); |
| 53 | const unsigned int input_height = get_dimension_size(input_descriptor, DataLayoutDimension::HEIGHT); |
| 54 | const unsigned int pool_size_x = info.is_global_pooling ? input_width : info.pool_size.width; |
| 55 | const unsigned int pool_size_y = info.is_global_pooling ? input_height : info.pool_size.height; |
| 56 | |
| 57 | std::tie(pooled_width, pooled_height) = |
| 58 | scaled_dimensions(input_width, input_height, pool_size_x, pool_size_y, info.pad_stride_info); |
| 59 | |
| 60 | const DataLayout data_layout = input_descriptor.layout; |
| 61 | TensorDescriptor output_descriptor = input_descriptor; |
| 62 | output_descriptor.shape.set(get_dimension_idx(data_layout, DataLayoutDimension::WIDTH), pooled_width); |
| 63 | output_descriptor.shape.set(get_dimension_idx(data_layout, DataLayoutDimension::HEIGHT), pooled_height); |
| 64 | |
| 65 | return output_descriptor; |
| 66 | } |
| 67 | |
| 68 | bool PoolingLayerNode::forward_descriptors() |
| 69 | { |
nothing calls this directly
no test coverage detected