code: def get_blocked_cnn(
      num_blocks,
      num_conv_layers_per_block,
      num_fc_layers,
      num_conv_filters_in_layers=None,
      num_fc_nodes_in_layers=None,
      cnn_layer_labels=None,
  ):
      """Returns a blocked CNN.
      num_blocks: # blocks, i.e. the number of repeated convolutional layers.
      num_conv_layers_per_block: # convolutaional layers per block.
      num_fc_layers: # fully connected layers.
      num_conv_filters_in_layers: # filters in the layers for each block.
      num_fc_nodes_in_layers: sizes of the fc layers.
      cnn_layer_labels: Labels for all layer types in a CNN.
      """
      (
          layer_labels,
          conn_mat,
          num_filters_each_layer,
          cnn_layer_labels,
          strides,
      ) = _get_blocked_cnn_params(
          num_blocks,
          num_conv_layers_per_block,
          "conv3",
          num_fc_layers,
          num_conv_filters_in_layers,
          num_fc_nodes_in_layers,
          cnn_layer_labels,
      )
      return ConvNeuralNetwork(
          layer_labels,
          conn_mat,
          num_filters_each_layer,
          strides,
          cnn_layer_labels,
      )
  
imports: import numpy
  from scipy.sparse import dok_matrix
  from .neural_network import ConvNeuralNetwork, MultiLayerPerceptron, get_cnn_layer_labels, get_mlp_layer_labels, is_a_conv_layer_label
  from .nn_modifiers import NNModifier
  from ..utils.general_utils import get_dok_mat_with_set_coords
label_desc: Use image node_id 8 for calling a global function with example usage: get_blocked_cnn(num_blocks, num_conv_layers_per_block, num_fc_layers, num_conv_filters_in_layers, num_fc_nodes_in_layers, cnn_layer_labels) and returns: ConvNeuralNetwork