code: def convert_flatten(builder, layer, input_names, output_names, keras_layer):
      
      input_name, output_name = (input_names[0], output_names[0])
  
      # blob_order == 0 if the input blob needs not be rearranged
      # blob_order == 1 if the input blob needs to be rearranged
      blob_order = 0
  
      # using keras_layer.input.shape have a "?" (Dimension[None] at the front),
      # making a 3D tensor with unknown batch size 4D
  
      try:
          in_shape = keras_layer.input_shape
          if len(in_shape) == 4:
              blob_order = 1
          if len(in_shape) == 3 and in_shape[0] is None:
              # handling Keras rank-3 tensor (Batch, Sequence, Channels)
              permute_output_name = output_name + '__permute__'
              builder.add_permute(name=layer+'__permute__', dim=(2,1,0,3),
                  input_name=input_name, output_name=permute_output_name)
              builder.add_flatten(name=layer, mode=1,
                  input_name=permute_output_name, output_name=output_name)
          else:
              builder.add_flatten(name=layer, mode=blob_order, input_name=input_name,
                      output_name=output_name)
      except:
          builder.add_flatten(name=layer, mode=1, input_name=input_name, output_name=output_name)
docs: Convert a flatten layer from keras to coreml.
      ----------
      Parameters
      keras_layer: layer
          A keras layer object.
  
      builder: NeuralNetworkBuilder
          A neural network builder object.