Build the ONNX graph input tensor specifications.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(network_type), | intent(in) | :: | network |
Instance of the network |
||
| integer, | intent(in) | :: | ifmt |
Export format selector |
||
| type(onnx_tensor_type), | intent(inout) | :: | graph_inputs(:) |
Graph input tensor specifications |
||
| integer, | intent(inout) | :: | num_inputs |
Number of graph inputs |
subroutine build_graph_inputs(network, ifmt, graph_inputs, num_inputs) !! Build the ONNX graph input tensor specifications. implicit none ! Arguments class(network_type), intent(in) :: network !! Instance of the network integer, intent(in) :: ifmt !! Export format selector type(onnx_tensor_type), intent(inout) :: graph_inputs(:) !! Graph input tensor specifications integer, intent(inout) :: num_inputs !! Number of graph inputs ! Local variables integer :: i, j, layer_id !! Loop indices and current layer identifier if(ifmt .eq. 2)then do i = 1, network%auto_graph%num_vertices layer_id = network%auto_graph%vertex(network%vertex_order(i))%id if(trim(network%model(layer_id)%layer%type) .ne. 'inpt') cycle num_inputs = 1 graph_inputs(1)%name = 'input' graph_inputs(1)%elem_type = 1 allocate(graph_inputs(1)%dims(2)) graph_inputs(1)%dims = [ & 1, network%model(layer_id)%layer%input_shape(1)] return end do return end if do i = 1, size(network%root_vertices, dim=1) layer_id = network%auto_graph%vertex(network%root_vertices(i))%id if(network%model(layer_id)%layer%use_graph_output)then num_inputs = num_inputs + 1 write(graph_inputs(num_inputs)%name, '("input_",I0,"_vertex")') & network%model(layer_id)%layer%id graph_inputs(num_inputs)%elem_type = 1 allocate(graph_inputs(num_inputs)%dims(2)) allocate(graph_inputs(num_inputs)%dim_params(2)) graph_inputs(num_inputs)%dim_params(1) = 'num_nodes' graph_inputs(num_inputs)%dims(1) = -1 graph_inputs(num_inputs)%dim_params(2) = '' graph_inputs(num_inputs)%dims(2) = & network%model(layer_id)%layer%input_shape(1) if(network%model(layer_id)%layer%input_shape(2) .gt. 0)then num_inputs = num_inputs + 1 write(graph_inputs(num_inputs)%name, '("input_",I0,"_edge")') & network%model(layer_id)%layer%id graph_inputs(num_inputs)%elem_type = 1 allocate(graph_inputs(num_inputs)%dims(2)) allocate(graph_inputs(num_inputs)%dim_params(2)) graph_inputs(num_inputs)%dim_params(1) = 'num_edges' graph_inputs(num_inputs)%dims(1) = -1 graph_inputs(num_inputs)%dim_params(2) = '' graph_inputs(num_inputs)%dims(2) = & network%model(layer_id)%layer%input_shape(2) end if num_inputs = num_inputs + 1 write(graph_inputs(num_inputs)%name, & '("input_",I0,"_edge_index")') & network%model(layer_id)%layer%id graph_inputs(num_inputs)%elem_type = 7 allocate(graph_inputs(num_inputs)%dims(2)) allocate(graph_inputs(num_inputs)%dim_params(2)) graph_inputs(num_inputs)%dim_params(1) = '' graph_inputs(num_inputs)%dims(1) = 3 graph_inputs(num_inputs)%dim_params(2) = 'num_csr_entries' graph_inputs(num_inputs)%dims(2) = -1 num_inputs = num_inputs + 1 write(graph_inputs(num_inputs)%name, '("input_",I0,"_degree")') & network%model(layer_id)%layer%id graph_inputs(num_inputs)%elem_type = 7 allocate(graph_inputs(num_inputs)%dims(1)) allocate(graph_inputs(num_inputs)%dim_params(1)) graph_inputs(num_inputs)%dim_params(1) = 'num_nodes' graph_inputs(num_inputs)%dims(1) = -1 else num_inputs = num_inputs + 1 write(graph_inputs(num_inputs)%name, '("input_",I0)') & network%model(layer_id)%layer%id graph_inputs(num_inputs)%elem_type = 1 allocate(graph_inputs(num_inputs)%dims( & size(network%model(layer_id)%layer%input_shape) + 1)) allocate(graph_inputs(num_inputs)%dim_params( & size(network%model(layer_id)%layer%input_shape) + 1)) graph_inputs(num_inputs)%dim_params(1) = 'batch_size' graph_inputs(num_inputs)%dims(1) = -1 do j = 1, size(network%model(layer_id)%layer%input_shape) graph_inputs(num_inputs)%dim_params(j+1) = '' graph_inputs(num_inputs)%dims(j+1) = & network%model(layer_id)%layer%input_shape(j) end do end if end do end subroutine build_graph_inputs