<macros>
  <token name="@KERAS_VERSION@">2.10.0</token>

  <xml name="macro_stdio">
    <stdio>
        <exit_code range="1:" level="fatal" description="Error occurred. Please check Tool Standard Error" />
    </stdio>
  </xml>

  <xml name="keras_optimizer_common" token_learning_rate="0.01">
    <section name="optimizer_options" title="Optimizer Advanced Options" expanded="false">
      <param argument="learning_rate" type="float" value="@LEARNING_RATE@" optional="true" label="Learning rate" help="float >= 0" />
      <yield />
      <!--param argument="clipnorm" type="float" value="" optional="true" label="clipnorm" help="float >= 0"/-->
      <!--param argument="clipvalue" type="float" value="" optional="true" label="clipvalue" help="float >= 0"/-->
    </section>
  </xml>

  <xml name="keras_optimizer_common_more" token_learning_rate="0.001">
    <expand macro="keras_optimizer_common" learning_rate="@LEARNING_RATE@">
      <param argument="beta_1" type="float" value="0.9" optional="true" label="beta_1" help="Float. The exponential decay rate for the 1st moment estimates." />
      <param argument="beta_2" type="float" value="0.999" optional="true" label="beta_2" help="Float. The exponential decay rate for the exponentially weighted infinity norm." />
      <param argument="epsilon" type="float" value="1e-7" label="epsilon" optional="true" help="A small constant for numerical stability." />
      <yield />
    </expand>
  </xml>

  <xml name="keras_activations" token_none="true" token_tanh="false">
    <param argument="activation" type="select" label="Activation function">
      <option value="linear" selected="@NONE@">None / linear (default)</option>
      <option value="softmax">softmax</option>
      <option value="elu">elu</option>
      <option value="selu">selu</option>
      <option value="softplus">softplus</option>
      <option value="softsign">softsign</option>
      <option value="relu">relu</option>
      <option value="tanh" selected="@TANH@">tanh</option>
      <option value="sigmoid">sigmoid</option>
      <option value="hard_sigmoid">hard_sigmoid</option>
      <option value="exponential">exponential</option>
    </param>
  </xml>

  <xml name="keras_initializers" token_argument="kernel_initializer" token_default_glorot_uniform="false" token_default_zeros="false" token_default_random_uniform="false" token_default_ones="false">
    <param argument="@ARGUMENT@" type="select" label="@ARGUMENT@">
      <option value="zeros" selected="@DEFAULT_ZEROS@">zero / zeros / Zeros</option>
      <option value="ones" selected="@DEFAULT_ONES@">one / ones / Ones</option>
      <option value="constant">constant / Constant</option>
      <option value="random_normal">normal / random_normal / RandomNormal</option>
      <option value="random_uniform" selected="@DEFAULT_RANDOM_UNIFORM@">uniform / random_uniform / RandomUniform</option>
      <option value="truncated_normal">truncated_normal / TruncatedNormal</option>
      <option value="orthogonal">orthogonal / Orthogonal</option>
      <option value="identity">identity / Identity</option>
      <option value="glorot_normal">glorot_normal</option>
      <option value="glorot_uniform" selected="@DEFAULT_GLOROT_UNIFORM@">glorot_uniform</option>
      <option value="he_normal">he_normal</option>
      <option value="he_uniform">he_uniform</option>
      <option value="lecun_normal">lecun_normal</option>
      <option value="lecun_uniform">lecun_uniform</option>
    </param>
  </xml>

  <xml name="keras_regularizers" token_argument="kernel_regularizer">
    <param argument="@ARGUMENT@" type="text" value="(0. , 0.)" optional="true" label="@ARGUMENT@"
            help="(l1, l2). l1/l2: float; L1/l2 regularization factor. (0., 0.) is equivalent to `None`" />
  </xml>

  <xml name="keras_constraints_options">
    <section name="constraint_options" title="Constraint Advanced Options" expanded="false">
      <yield />
      <param argument="axis" type="text" value="0" help="Integer or list of integers. axis along which to calculate weight norms">
        <sanitizer>
          <valid initial="default">
            <add value="[" />
            <add value="]" />
          </valid>
        </sanitizer>
      </param>
    </section>
  </xml>

  <xml name="keras_constraints" token_argument="kernel_constraint">
    <conditional name="@ARGUMENT@">
      <param argument="constraint_type" type="select" label="@ARGUMENT@">
        <option value="None" selected="true">None (default)</option>
        <option value="MaxNorm">maxnorm / max_norm / MaxNorm</option>
        <option value="NonNeg">nonneg / non_neg / NonNeg</option>
        <option value="UnitNorm">unitnorm / unit_norm / UnitNorm</option>
        <option value="MinMaxNorm">min_max_norm / MinMaxNorm</option>
      </param>
      <when value="None" />
      <when value="MaxNorm">
        <expand macro="keras_constraints_options">
          <param argument="max_value" type="float" value="2" help="the maximum norm for the incoming weights." />
        </expand>
      </when>
      <when value="NonNeg">
      </when>
      <when value="UnitNorm">
        <expand macro="keras_constraints_options" />
      </when>
      <when value="MinMaxNorm">
        <expand macro="keras_constraints_options">
          <param argument="min_value" type="float" value="0." help="the minimum norm for the incoming weights." />
          <param argument="max_value" type="float" value="1." help="the maximum norm for the incoming weights." />
          <param argument="rate_max_value" type="float" value="1." help="rate for enforcing the constraint." />
        </expand>
      </when>
    </conditional>
  </xml>

  <xml name="keras_layer_types_core">
    <option value="Dense">Core -- Dense</option>
    <option value="Activation">Core -- Activation</option>
    <option value="Dropout">Core -- Dropout</option>
    <option value="Flatten">Core -- Flatten</option>
    <option value="Reshape">Core -- Reshape</option>
    <option value="Permute">Core -- Permute</option>
    <option value="RepeatVector">Core -- RepeatVector</option>
    <!--option value="Lambda">Lambda - Not supported</option-->
    <option value="ActivityRegularization">Core -- ActivityRegularization</option>
    <option value="Masking">Core -- Masking</option>
    <option value="SpatialDropout1D">Core -- SpatialDropout1D</option>
    <option value="SpatialDropout2D">Core -- SpatialDropout2D</option>
    <option value="SpatialDropout3D">Core -- SpatialDropout3D</option>
  </xml>

  <xml name="keras_layer_types_Convolutional">
    <option value="Conv1D">Convolutional -- Conv1D</option>
    <option value="Conv2D">Convolutional -- Conv2D</option>
    <option value="SeparableConv1D">Convolutional -- SeparableConv1D</option>
    <option value="SeparableConv2D">Convolutional -- SeparableConv2D</option>
    <option value="DepthwiseConv2D">Convolutional -- DepthwiseConv2D</option>
    <option value="Conv2DTranspose">Convolutional -- Conv2DTranspose</option>
    <option value="Conv3D">Convolutional -- Conv3D</option>
    <option value="Conv3DTranspose">Convolutional -- Conv3DTranspose</option>
    <option value="Cropping1D">Convolutional -- Cropping1D</option>
    <option value="Cropping2D">Convolutional -- Cropping2D</option>
    <option value="Cropping3D">Convolutional -- Cropping3D</option>
    <option value="UpSampling1D">Convolutional -- UpSampling1D</option>
    <option value="UpSampling2D">Convolutional -- UpSampling2D</option>
    <option value="UpSampling3D">Convolutional -- UpSampling3D</option>
    <option value="ZeroPadding1D">Convolutional -- ZeroPadding1D</option>
    <option value="ZeroPadding2D">Convolutional -- ZeroPadding2D</option>
    <option value="ZeroPadding3D">Convolutional -- ZeroPadding3D</option>
  </xml>

  <xml name="keras_layer_types_Pooling">
    <option value="MaxPooling1D">Pooling -- MaxPooling1D</option>
    <option value="MaxPooling2D">Pooling -- MaxPooling2D</option>
    <option value="MaxPooling3D">Pooling -- MaxPooling3D</option>
    <option value="AveragePooling1D">Pooling -- AveragePooling1D</option>
    <option value="AveragePooling2D">Pooling -- AveragePooling2D</option>
    <option value="AveragePooling3D">Pooling -- AveragePooling3D</option>
    <option value="GlobalMaxPooling1D">Pooling -- GlobalMaxPooling1D</option>
    <option value="GlobalAveragePooling1D">Pooling -- GlobalAveragePooling1D</option>
    <option value="GlobalMaxPooling2D">Pooling -- GlobalMaxPooling2D</option>
    <option value="GlobalAveragePooling2D">Pooling -- GlobalAveragePooling2D</option>
    <option value="GlobalMaxPooling3D">Pooling -- GlobalMaxPooling3D</option>
    <option value="GlobalAveragePooling3D">Pooling -- GlobalAveragePooling3D</option>
  </xml>

  <xml name="keras_layer_types_locally_connected">
    <option value="LocallyConnected1D">Locally_connected -- LocallyConnected1D</option>
    <option value="LocallyConnected2D">Locally_connected -- LocallyConnected2D</option>
  </xml>

  <xml name="keras_layer_types_recurrent">
    <option value="SimpleRNN">Recurrent -- SimpleRNN</option>
    <option value="GRU">Recurrent -- GRU</option>
    <option value="LSTM">Recurrent -- LSTM</option>
    <option value="ConvLSTM2D">Recurrent -- ConvLSTM2D</option>
    <option value="ConvLSTM2DCell">Recurrent -- ConvLSTM2DCell</option>
    <option value="SimpleRNNCell">Recurrent -- SimpleRNNCell</option>
    <option value="GRUCell">Recurrent -- GRUCell</option>
    <option value="LSTMCell">Recurrent -- LSTMCell</option>
    <option value="CuDNNGRU">Recurrent -- CuDNNGRU</option>
    <option value="CuDNNLSTM">Recurrent -- CuDNNLSTM</option>
  </xml>

  <xml name="keras_layer_types_embedding">
    <option value="Embedding">Embedding -- Embedding</option>
  </xml>

  <xml name="keras_layer_types_advanced_activations">
    <option value="LeakyReLU">Advanced activations -- LeakyReLU</option>
    <option value="PReLU">Advanced activations -- PReLU</option>
    <option value="ELU">Advanced activations -- ELU</option>
    <option value="ThresholdedReLU">Advanced activations -- ThresholdedReLU</option>
    <option value="Softmax">Advanced activations -- Softmax</option>
    <option value="ReLU">Advanced activations -- ReLU</option>
  </xml>

  <xml name="keras_layer_types_normalization">
    <option value="BatchNormalization">Normalization -- BatchNormalization</option>
  </xml>

  <xml name="keras_layer_types_noise">
    <option value="GaussianNoise">Noise -- GaussianNoise</option>
    <option value="GaussianDropout">Noise -- GaussianDropout</option>
    <option value="AlphaDropout">Noise -- AlphaDropout</option>    
  </xml>

  <xml name="keras_layer_types_merge">
    <option value="Add">Merge -- Add</option>
    <option value="Subtract">Merge -- Subtract</option>
    <option value="Multiply">Merge -- Multiply</option>
    <option value="Average">Merge -- Average</option>
    <option value="Maximum">Merge -- Maximum</option>
    <option value="Minimum">Merge -- Minimum</option>
    <option value="Concatenate">Merge -- Concatenate</option>
    <option value="Dot">Merge -- Dot</option>
  </xml>

  <!--Core Layers-->

  <xml name="layer_Dense">
    <param argument="units" type="integer" value="" optional="false" label="units" help="Positive integer, dimensionality of the output space." />
    <expand macro="keras_activations" />
    <expand macro="simple_kwargs" help="For example: use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None. Leave blank for default." />
    <yield />
  </xml>

  <xml name="layer_Dropout">
    <param argument="rate" type="float" value="" min="0." max="1.0" help="Fraction of the input units to drop." />
    <expand macro="simple_kwargs" help="For example: noise_shape=None, seed=None. Leave blank for default." />
    <yield />
  </xml>

  <xml name="layer_Flatten">
    <param argument="data_format" type="select" help="The ordering of the dimensions in the inputs.">
      <option value="channels_last">channels_last</option>
      <option value="channels_first">channels_first</option>
    </param>
    <yield />
  </xml>

  <xml name="layer_Input">
    <param argument="shape" type="text" value="" help="A shape tuple (integer), not including the batch size.For instance, `shape=(32,)`" />
    <!--param argument="batch_shape" type="text" value="" optional="true" help="A shape tuple (integer), including the batch size.For instance, `batch_shape=(10, 32)`"/-->
    <param argument="name" type="text" value="" optional="true" help="An optional string name for the layer. Unique. autogenerated if it isn't provided." />
    <param argument="dtype" type="select" help="The data type expected by the input">
      <option value="float32" selected="true">float32</option>
      <option value="float64">float64</option>
      <option value="int32">int32</option>
      <option value="int64">int64</option>
      <!--TODO add more DTYPEs-->
    </param>
    <param argument="sparse" type="boolean" truevalue="booltrue" falsevalue="boolfalse" optional="true" checked="false" />
    <!--param argument="tensor" type="data" format="zip" help="Optional existing tensor to wrap into the `Input` layer."/ -->
    <yield />
  </xml>

  <xml name="layer_Reshape">
    <param argument="target_shape" type="text" value="" help="Tuple of integers. Does not include the batch axis." />
    <yield />
  </xml>

  <xml name="layer_Permute">
    <param argument="dims" type="text" value="" help="Tuple of integers. Permutation pattern, does not include the samples dimension. 
            Indexing starts at 1. For instance, (2, 1) permutes the first and second dimension of the input." />
    <yield />
  </xml>

  <xml name="layer_RepeatVector">
    <param argument="n" type="integer" value="" help="repetition factor" />
  </xml>

  <xml name="layer_Lambda">
    <param argument="function" type="text" value="lambda x: " help="The function to be evaluated. Only lambda function is supported!" />
    <yield />
  </xml>

  <xml name="layer_ActivityRegularization">
    <param argument="l1" type="float" value="0." min="0." help="L1 regularization factor (positive float)." />
    <param argument="l2" type="float" value="0." min="0." help="L2 regularization factor (positive float)." />
    <yield />
  </xml>

  <xml name="layer_Masking">
    <param argument="mask_value" type="float" value="0." help="Masks a sequence by using a mask value to skip timesteps." />
    <yield />
  </xml>

  <xml name="layer_SpatialDropout1D">
    <param argument="rate" type="float" value="" min="0." max="1." help="Fraction of the input units to drop." />
    <yield />
  </xml>

  <xml name="layer_SpatialDropout2D">
    <param argument="rate" type="float" value="" min="0." max="1." help="Fraction of the input units to drop." />
    <expand macro="simple_kwargs" help="For example: data_format=None. Leave blank for default." />
    <yield />
  </xml>

  <xml name="layer_SpatialDropout3D">
    <param argument="rate" type="float" value="" min="0." max="1." help="Fraction of the input units to drop." />
    <expand macro="simple_kwargs" help="For example: data_format=None. Leave blank for default." />
    <yield />
  </xml>

  <!--Convolutional Layers-->

  <xml name="layer_Conv1D">
    <param argument="filters" type="integer" value="" min="0" help="the dimensionality of the output space (i.e. the number of output filters in the convolution)." />
    <param argument="kernel_size" type="text" value="" help="An integer or tuple/list of a single integer, specifying the length of the 1D convolution window." />
    <expand macro="keras_activations" />
    <expand macro="simple_kwargs" help="For example: strides=1, padding='valid', data_format='channels_last', dilation_rate=1, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None. Leave blank for default." />
    <yield />
  </xml>

  <xml name="layer_Conv2D">
    <param argument="filters" type="integer" value="" min="0" help="the dimensionality of the output space (i.e. the number of output filters in the convolution)." />
    <param argument="kernel_size" type="text" value="" help="An integer or tuple/list of 2 integers, specifying the height and width of the 2D convolution window." />
    <expand macro="keras_activations" />
    <expand macro="simple_kwargs" help="For example: strides=(1, 1), padding='valid', data_format=None, dilation_rate=(1, 1), use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None. Leave blank for default." />
    <yield />
  </xml>

  <xml name="layer_SeparableConv1D">
    <param argument="filters" type="integer" value="" min="0" help="the dimensionality of the output space (i.e. the number of output filters in the convolution)." />
    <param argument="kernel_size" type="text" value="" help="An integer or tuple/list of a single integer, specifying the length of the 1D convolution window." />
    <expand macro="keras_activations" />
    <expand macro="simple_kwargs" help="For example: strides=1, padding='valid', data_format='channels_last', dilation_rate=1, depth_multiplier=1, use_bias=True, depthwise_initializer='glorot_uniform', pointwise_initializer='glorot_uniform', bias_initializer='zeros', depthwise_regularizer=None, pointwise_regularizer=None, bias_regularizer=None, activity_regularizer=None, depthwise_constraint=None, pointwise_constraint=None, bias_constraint=None. Leave blank for default." />
    <yield />
  </xml>

  <xml name="layer_SeparableConv2D">
    <param argument="filters" type="integer" value="" min="0" help="the dimensionality of the output space (i.e. the number of output filters in the convolution)." />
    <param argument="kernel_size" type="text" value="" help="An integer or tuple/list of 2 integers, specifying the height and width of the 2D convolution window." />
    <expand macro="keras_activations" />
    <expand macro="simple_kwargs" help="For example: strides=(1, 1), padding='valid', data_format=None, dilation_rate=(1, 1), depth_multiplier=1, use_bias=True, depthwise_initializer='glorot_uniform', pointwise_initializer='glorot_uniform', bias_initializer='zeros', depthwise_regularizer=None, pointwise_regularizer=None, bias_regularizer=None, activity_regularizer=None, depthwise_constraint=None, pointwise_constraint=None, bias_constraint=None. Leave blank for default." />
    <yield />
  </xml>

  <xml name="layer_DepthwiseConv2D">
    
    <param argument="kernel_size" type="text" value="" help="An integer or tuple/list of 2 integers, specifying the height and width of the 2D convolution window." />
    <expand macro="keras_activations" />
    <expand macro="simple_kwargs" help="For example: strides=(1, 1), padding='valid', depth_multiplier=1, data_format=None, use_bias=True, depthwise_initializer='glorot_uniform', bias_initializer='zeros', depthwise_regularizer=None, bias_regularizer=None, activity_regularizer=None, depthwise_constraint=None, bias_constraint=None. Leave blank for default." />
    <yield />
  </xml>

  <xml name="layer_Conv2DTranspose">
    <param argument="filters" type="integer" value="" min="0" help="the dimensionality of the output space (i.e. the number of output filters in the convolution)." />
    <param argument="kernel_size" type="text" value="" help="An integer or tuple/list of 2 integers, specifying the height and width of the 2D convolution window." />
    <expand macro="keras_activations" />
    <expand macro="simple_kwargs" help="For example: strides=(1, 1), padding='valid', output_padding=None, data_format=None, dilation_rate=(1, 1), use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None. Leave blank for default." />
    <yield />
  </xml>

  <xml name="layer_Conv3D">
    <param argument="filters" type="integer" value="" min="0" help="the dimensionality of the output space (i.e. the number of output filters in the convolution)." />
    <param argument="kernel_size" type="text" value="" help="An integer or tuple/list of 3 integers, specifying the depth, height and width of the 3D convolution window." />
    <expand macro="keras_activations" />
    <expand macro="simple_kwargs" help="For example: strides=(1, 1, 1), padding='valid', data_format=None, dilation_rate=(1, 1, 1), use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None. Leave blank for default." />
    <yield />
  </xml>

  <xml name="layer_Conv3DTranspose">
    <param argument="filters" type="integer" value="" min="0" help="the dimensionality of the output space (i.e. the number of output filters in the convolution)." />
    <param argument="kernel_size" type="text" value="" help="An integer or tuple/list of 3 integers, specifying the depth, height and width of the 3D convolution window." />
    <expand macro="keras_activations" />
    <expand macro="simple_kwargs" help="For example: strides=(1, 1, 1), padding='valid', output_padding=None, data_format=None, activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None. Leave blank for default." />
    <yield />
  </xml>

  <xml name="layer_Cropping1D">
    <param argument="cropping" type="text" value="(1, 1)" help="int or tuple of int (length 2) How many units should be trimmed off at the beginning and end of the cropping dimension (axis 1). If a single int is provided, the same value will be used for both." />
    <yield />
  </xml>

  <xml name="layer_Cropping2D">
    <param argument="cropping" type="text" value="((0, 0), (0, 0))" help="int, or tuple of 2 ints, or tuple of 2 tuples of 2 ints." />
    <expand macro="simple_kwargs" help="For example: data_format=None. Leave blank for default." />
    <yield />
  </xml>

  <xml name="layer_Cropping3D">
    <param argument="cropping" type="text" value="((1, 1), (1, 1), (1, 1))" help="int, or tuple of 3 ints, or tuple of 3 tuples of 2 ints." />
    <expand macro="simple_kwargs" help="For example: data_format=None. Leave blank for default." />
    <yield />
  </xml>

  <xml name="layer_UpSampling1D">
    <param argument="size" type="integer" value="2" min="0" help="integer. Upsampling factor." />
    <yield />
  </xml>

  <xml name="layer_UpSampling2D">
    <param argument="size" type="text" value="(2, 2)" help="int, or tuple of 2 integers. The upsampling factors for rows and columns." />
    <expand macro="simple_kwargs" help="For example: data_format=None, interpolation='nearest'. Leave blank for default." />
    <yield />
  </xml>

  <xml name="layer_UpSampling3D">
    <param argument="size" type="text" value="(2, 2, 2)" help="int, or tuple of 3 integers. The upsampling factors for dim1, dim2 and dim3." />
    <expand macro="simple_kwargs" help="For example: data_format=None, interpolation='nearest'. Leave blank for default." />
    <yield />
  </xml>

  <xml name="layer_ZeroPadding1D">
    <param argument="padding" type="text" value="1" help="int, or tuple of int (length 2)" />
    <yield />
  </xml>

  <xml name="layer_ZeroPadding2D">
    <param argument="padding" type="text" value="(1, 1)" help="int, or tuple of 2 ints, or tuple of 2 tuples of 2 ints." />
    <expand macro="simple_kwargs" help="For example: data_format=None. Leave blank for default." />
    <yield />
  </xml>

  <xml name="layer_ZeroPadding3D">
    <param argument="padding" type="text" value="(1, 1, 1)" help="int, or tuple of 3 ints, or tuple of 3 tuples of 2 ints." />
    <expand macro="simple_kwargs" help="For example: data_format=None. Leave blank for default." />
    <yield />
  </xml>

  <!--Pooling Layers-->

  <xml name="layer_MaxPooling1D">
    <param name="pool_size" type="integer" value="2" help="Integer, size of the max pooling windows." />
    <param name="strides" type="integer" value="" help="Integer, or None. Factor by which to downscale. E.g. 2 will halve the input. If None, it will default to pool_size." />
    <expand macro="simple_kwargs" help="For example: padding='valid', data_format='channels_last'. Leave blank for default." />
    <yield />
  </xml>

  <xml name="layer_MaxPooling2D">
    <param name="pool_size" type="text" value="(2, 2)" help="integer or tuple of 2 integers, factors by which to downscale (vertical, horizontal)" />
    <param name="strides" type="text" value="" help="Integer, tuple of 2 integers, or None. Strides values. If None, it will default to pool_size." />
    <expand macro="simple_kwargs" help="For example: padding='valid', data_format='channels_last'. Leave blank for default." />
    <yield />
  </xml>

  <xml name="layer_MaxPooling3D">
    <param name="pool_size" type="text" value="(2, 2, 2)" help="tuple of 3 integers, factors by which to downscale (dim1, dim2, dim3). 
                                                                (2, 2, 2) will halve the size of the 3D input in each dimension." />
    <param name="strides" type="text" value="" help="tuple of 3 integers, or None. If None, it will default to pool_size." />
    <expand macro="simple_kwargs" help="For example: padding='valid', data_format='channels_last'. Leave blank for default." />
    <yield />
  </xml>

  <xml name="layer_AveragePooling1D">
    <param name="pool_size" type="integer" value="2" help="Integer, size of the max pooling windows." />
    <param name="strides" type="integer" value="" help="Integer, or None. Factor by which to downscale. E.g. 2 will halve the input. If None, it will default to pool_size." />
    <expand macro="simple_kwargs" help="For example: padding='valid', data_format='channels_last'. Leave blank for default." />
    <yield />
  </xml>

  <xml name="layer_AveragePooling2D">
    <param name="pool_size" type="text" value="(2, 2)" help="integer or tuple of 2 integers, factors by which to downscale (vertical, horizontal)" />
    <param name="strides" type="text" value="" help=" Integer, tuple of 2 integers, or None. Strides values. If None, it will default to pool_size." />
    <expand macro="simple_kwargs" help="For example: padding='valid', data_format='channels_last'. Leave blank for default." />
    <yield />
  </xml>

  <xml name="layer_AveragePooling3D">
    <param name="pool_size" type="text" value="(2, 2, 2)" help="tuple of 3 integers, factors by which to downscale (dim1, dim2, dim3). 
                                                                (2, 2, 2) will halve the size of the 3D input in each dimension." />
    <param name="strides" type="text" value="" help="tuple of 3 integers, or None. If None, it will default to pool_size." />
    <expand macro="simple_kwargs" help="For example: padding='valid', data_format='channels_last'. Leave blank for default." />
    <yield />
  </xml>

  <xml name="layer_GlobalMaxPooling1D">
    <param argument="data_format" type="select" help="The ordering of the dimensions in the inputs.">
      <option value="channels_last" selected="true">channels_last - inputs with shape  (batch, steps, channels)</option>
      <option value="channels_first">channels_first - inputs with shape (batch, channels, steps)</option>
    </param>
    <yield />
  </xml>

  <xml name="layer_GlobalMaxPooling2D">
    <param argument="data_format" type="select" help="The ordering of the dimensions in the inputs.">
        <option value="channels_last" selected="true">channels_last - inputs with shape (batch, height, width, channels)</option>
        <option value="channels_first">channels_first - inputs with shape (batch, channels, height, width)</option>
    </param>
    <yield />
  </xml>

  <xml name="layer_GlobalMaxPooling3D">
    <param argument="data_format" type="select" help="The ordering of the dimensions in the inputs.">
      <option value="channels_last" selected="true">channels_last - inputs with shape (batch, spatial_dim1, spatial_dim2, spatial_dim3, channels)</option>
      <option value="channels_first">channels_first - inputs with shape (batch, channels, spatial_dim1, spatial_dim2, spatial_dim3)</option>
    </param>
    <yield />
  </xml>

  <xml name="layer_GlobalAveragePooling1D">
    <param argument="data_format" type="select" help="The ordering of the dimensions in the inputs.">
      <option value="channels_last" selected="true">channels_last - inputs with shape  (batch, steps, channels)</option>
      <option value="channels_first">channels_first - inputs with shape (batch, channels, steps)</option>
    </param>
    <yield />
  </xml>

  <xml name="layer_GlobalAveragePooling2D">
    <param argument="data_format" type="select" help="The ordering of the dimensions in the inputs.">
        <option value="channels_last" selected="true">channels_last - inputs with shape (batch, height, width, channels)</option>
        <option value="channels_first">channels_first - inputs with shape (batch, channels, height, width)</option>
    </param>
    <yield />
  </xml>

  <xml name="layer_GlobalAveragePooling3D">
    <param argument="data_format" type="select" help="The ordering of the dimensions in the inputs.">
      <option value="channels_last" selected="true">channels_last - inputs with shape (batch, spatial_dim1, spatial_dim2, spatial_dim3, channels)</option>
      <option value="channels_first">channels_first - inputs with shape (batch, channels, spatial_dim1, spatial_dim2, spatial_dim3)</option>
    </param>
    <yield />
  </xml>

  <!--Locally-connected Layers-->

  <xml name="layer_LocallyConnected1D">
    <param argument="filters" type="integer" value="" min="0" help="the dimensionality of the output space (i.e. the number of output filters in the convolution)." />
    <param argument="kernel_size" type="text" value="" help="An integer or tuple/list of a single integer, specifying the length of the 1D convolution window." />
    <expand macro="keras_activations" />
    <expand macro="simple_kwargs" help="For example: strides=1, padding='valid', data_format=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None. Leave blank for default." />
    <yield />
  </xml>

  <xml name="layer_LocallyConnected2D">
    <param argument="filters" type="integer" value="" min="0" help="the dimensionality of the output space (i.e. the number of output filters in the convolution)." />
    <param argument="kernel_size" type="text" value="" help="An integer or tuple/list of 2 integers, specifying the height and width of the 2D convolution window." />
    <expand macro="keras_activations" />
    <expand macro="simple_kwargs" help="For example: strides=(1, 1), padding='valid', data_format=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None. Leave blank for default." />
    <yield />
  </xml>

  <!--Recurrent Layers-->

  <xml name="layer_SimpleRNN">
    <param argument="units" type="integer" value="" min="1" help="Positive integer, dimensionality of the output space." />
    <expand macro="simple_kwargs" help="For example: activation='tanh', use_bias=True, kernel_initializer='glorot_uniform', recurrent_initializer='orthogonal', bias_initializer='zeros', kernel_regularizer=None, recurrent_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, recurrent_constraint=None, bias_constraint=None, dropout=0.0, recurrent_dropout=0.0, return_sequences=False, return_state=False, go_backwards=False, stateful=False, unroll=False. Leave blank for default." />
    <yield />
  </xml>

  <xml name="layer_GRU">
    <param argument="units" type="integer" value="" min="1" help="Positive integer, dimensionality of the output space." />
    <expand macro="simple_kwargs" help="For example: activation='tanh', recurrent_activation='hard_sigmoid', use_bias=True, kernel_initializer='glorot_uniform', recurrent_initializer='orthogonal', bias_initializer='zeros', kernel_regularizer=None, recurrent_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, recurrent_constraint=None, bias_constraint=None, dropout=0.0, recurrent_dropout=0.0, implementation=1, return_sequences=False, return_state=False, go_backwards=False, stateful=False, unroll=False, reset_after=False. Leave blank for default." />
    <yield />
  </xml>

  <xml name="layer_LSTM">
    <param argument="units" type="integer" value="" min="1" help="Positive integer, dimensionality of the output space." />
    <expand macro="simple_kwargs" help="For example: activation='tanh', recurrent_activation='hard_sigmoid', use_bias=True, kernel_initializer='glorot_uniform', recurrent_initializer='orthogonal', bias_initializer='zeros', unit_forget_bias=True, kernel_regularizer=None, recurrent_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, recurrent_constraint=None, bias_constraint=None, dropout=0.0, recurrent_dropout=0.0, implementation=1, return_sequences=False, return_state=False, go_backwards=False, stateful=False, unroll=False. Leave blank for default." />
    <yield />
  </xml>

  <xml name="layer_ConvLSTM2D">
    <param argument="filters" type="integer" value="" min="0" help="the dimensionality of the output space (i.e. the number of output filters in the convolution)." />
    <param argument="kernel_size" type="text" value="" help="An integer or tuple/list of n integers, specifying the dimensions of the convolution window." />
    <expand macro="simple_kwargs" help="For example: strides=(1, 1), padding='valid', data_format=None, dilation_rate=(1, 1), activation='tanh', recurrent_activation='hard_sigmoid', use_bias=True, kernel_initializer='glorot_uniform', recurrent_initializer='orthogonal', bias_initializer='zeros', unit_forget_bias=True, kernel_regularizer=None, recurrent_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, recurrent_constraint=None, bias_constraint=None, return_sequences=False, go_backwards=False, stateful=False, dropout=0.0, recurrent_dropout=0.0. Leave blank for default." />
    <yield />
  </xml>

  <xml name="layer_ConvLSTM2DCell">
    <param argument="filters" type="integer" value="" min="0" help="the dimensionality of the output space (i.e. the number of output filters in the convolution)." />
    <param argument="kernel_size" type="text" value="" help="An integer or tuple/list of n integers, specifying the dimensions of the convolution window." />
    <expand macro="simple_kwargs" help="For example: strides=(1, 1), padding='valid', data_format=None, dilation_rate=(1, 1), activation='tanh', recurrent_activation='hard_sigmoid', use_bias=True, kernel_initializer='glorot_uniform', recurrent_initializer='orthogonal', bias_initializer='zeros', unit_forget_bias=True, kernel_regularizer=None, recurrent_regularizer=None, bias_regularizer=None, kernel_constraint=None, recurrent_constraint=None, bias_constraint=None, dropout=0.0, recurrent_dropout=0.0. Leave blank for default." />
    <yield />
  </xml>

  <xml name="layer_SimpleRNNCell">
    <param argument="units" type="integer" value="" min="1" help="Positive integer, dimensionality of the output space." />
    <expand macro="simple_kwargs" help="For example: activation='tanh', use_bias=True, kernel_initializer='glorot_uniform', recurrent_initializer='orthogonal', bias_initializer='zeros', kernel_regularizer=None, recurrent_regularizer=None, bias_regularizer=None, kernel_constraint=None, recurrent_constraint=None, bias_constraint=None, dropout=0.0, recurrent_dropout=0.0. Leave blank for default." />
    <yield />
  </xml>

  <xml name="layer_GRUCell">
    <param argument="units" type="integer" value="" min="1" help="Positive integer, dimensionality of the output space." />
    <expand macro="simple_kwargs" help="For example: activation='tanh', recurrent_activation='hard_sigmoid', use_bias=True, kernel_initializer='glorot_uniform', recurrent_initializer='orthogonal', bias_initializer='zeros', kernel_regularizer=None, recurrent_regularizer=None, bias_regularizer=None, kernel_constraint=None, recurrent_constraint=None, bias_constraint=None, dropout=0.0, recurrent_dropout=0.0, implementation=1, reset_after=False. Leave blank for default." />
    <yield />
  </xml>

  <xml name="layer_LSTMCell">
    <param argument="units" type="integer" value="" min="1" help="Positive integer, dimensionality of the output space." />
    <expand macro="simple_kwargs" help="For example: activation='tanh', recurrent_activation='hard_sigmoid', use_bias=True, kernel_initializer='glorot_uniform', recurrent_initializer='orthogonal', bias_initializer='zeros', unit_forget_bias=True, kernel_regularizer=None, recurrent_regularizer=None, bias_regularizer=None, kernel_constraint=None, recurrent_constraint=None, bias_constraint=None, dropout=0.0, recurrent_dropout=0.0, implementation=1. Leave blank for default." />
    <yield />
  </xml>

  <xml name="layer_CuDNNGRU">
    <param argument="units" type="integer" value="" min="1" help="Positive integer, dimensionality of the output space." />
    <expand macro="simple_kwargs" help="For example: kernel_initializer='glorot_uniform', recurrent_initializer='orthogonal', bias_initializer='zeros', kernel_regularizer=None, recurrent_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, recurrent_constraint=None, bias_constraint=None, return_sequences=False, return_state=False, stateful=False. Leave blank for default." />
    <yield />
  </xml>

  <xml name="layer_CuDNNLSTM">
    <param argument="units" type="integer" value="" min="1" help="Positive integer, dimensionality of the output space." />
    <expand macro="simple_kwargs" help="For example: kernel_initializer='glorot_uniform', recurrent_initializer='orthogonal', bias_initializer='zeros', unit_forget_bias=True, kernel_regularizer=None, recurrent_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, recurrent_constraint=None, bias_constraint=None, return_sequences=False, return_state=False, stateful=False. Leave blank for default." />
    <yield />
  </xml>


  <!--Embedding Layers-->

  <xml name="layer_Embedding">
    <param argument="input_dim" type="integer" value="" min="0" help="int > 0. Size of the vocabulary, i.e. maximum integer index + 1." />
    <param argument="output_dim" type="integer" value="" min="0" help="int >= 0. Dimension of the dense embedding." />
    <expand macro="simple_kwargs" help="For example: embeddings_initializer='uniform', embeddings_regularizer=None, activity_regularizer=None, embeddings_constraint=None, mask_zero=False, input_length=None. Leave blank for default." />
    <yield />
  </xml>

  <!--Merge Layers-->

  <xml name="layer_merge">
    <param name="merging_layers" type="text" value="[ ]" label="Type the layer index numbers in a list" help="List of numbers">
      <sanitizer>
        <valid initial="default">
          <add value="[" />
          <add value="]" />
        </valid>
      </sanitizer>
    </param>
    <yield />
  </xml>

  <xml name="layer_Concatenate" token_type="integer" token_default_value="-1" token_help="Axis along which to concatenate.">
    <expand macro="layer_merge">
      <param argument="axis" type="@TYPE@" value="@DEFAULT_VALUE@" help="@HELP@" />
    </expand>
    <yield />
  </xml>

  <xml name="layer_Dot">
    <expand macro="layer_Concatenate" type="text" default_value="" help="Integer or tuple of integers, axis or axes along which to take the dot product.">
      <param argument="normalize" type="boolean" truevalue="booltrue" falsevalue="boolfalse" optional="true" checked="false" label="Whether to L2-normalize samples along the dot product axis before taking the dot product?" />
    </expand>
    <yield />
  </xml>

  <!--Advanced Activations Layers-->

  <xml name="layer_LeakyReLU">
    <param argument="alpha" type="float" value="0.3" min="0." help="float >= 0. Negative slope coefficient." />
    <yield />
  </xml>

  <xml name="layer_PReLU">
    <expand macro="keras_initializers" argument="alpha_initializer" default_zeros="true" />
    <expand macro="keras_regularizers" argument="alpha_regularizer" />
    <expand macro="keras_constraints" argument="alpha_constraint" />
    <param argument="shared_axes" type="text" value="" help="the axes along which to share learnable parameters for the activation function. E.g. [1, 2]">
      <sanitizer>
        <valid initial="default">
          <add value="[" />
          <add value="]" />
        </valid>
      </sanitizer>
    </param>
    <yield />
  </xml>

  <xml name="layer_ELU">
    <param argument="alpha" type="float" value="1.0" help="scale for the negative factor." />
    <yield />
  </xml>

  <xml name="layer_ThresholdedReLU">
    <param argument="theta" type="float" value="1.0" help="float >= 0. Threshold location of activation." />
    <yield />
  </xml>

  <xml name="layer_Softmax">
    <param argument="axis" type="integer" value="-1" help="Integer, axis along which the softmax normalization is applied." />
    <yield />
  </xml>

  <xml name="layer_ReLU">
    <param argument="max_value" type="float" value="" min="0." help="float >= 0. Maximum activation value." />
    <param argument="negative_slope" type="float" value="0." min="0." help="float >= 0. Negative slope coefficient." />
    <param argument="threshold_max_value" type="float" value="0." help="float. Threshold value for thresholded activation." />
    <yield />
  </xml>

  <!--Normalization Layers-->

  <xml name="layer_BatchNormalization">
    <expand macro="simple_kwargs" help="For example: axis=-1, momentum=0.99, epsilon=0.001, center=True, scale=True, beta_initializer='zeros', gamma_initializer='ones', moving_mean_initializer='zeros', moving_variance_initializer='ones', beta_regularizer=None, gamma_regularizer=None, beta_constraint=None, gamma_constraint=None. Leave blank for default." />
  </xml>

  <!--Noise layers-->

  <xml name="layer_GaussianNoise">
    <param argument="stddev" type="float" value="" help="float, standard deviation of the noise distribution." />
  </xml>

  <xml name="layer_GaussianDropout">
    <param argument="rate" type="float" value="" help="drop probability, (as with `Dropout`). The multiplicative noise will have standard deviation `sqrt(rate / (1 - rate))`" />
  </xml>

  <xml name="layer_AlphaDropout">
    <expand macro="layer_Dropout" />
  </xml>

  <xml name="inbound_nodes_index">
    <param name="inbound_nodes" type="integer" value="" label="Type the index number of input layer"
          help="Find the index number at the left top corner of layer configuration block" />
  </xml>

  <!--Simple key words text parameters, conbined to reduce UI latency-->

  <xml name="simple_kwargs" token_help="Leave blank for default.">
    <param argument="kwargs" type="text" value="" optional="true" label="Type in key words arguments if different from the default" help="@HELP@">
      <sanitizer>
        <valid initial="default">
          <add value="&apos;" />
        </valid>
      </sanitizer>
    </param>
  </xml>

  <!-- Keras CallBacks -->

  <xml name="keras_callbacks">
    <repeat name="callbacks" min="1" max="5" title="callback">
      <conditional name="callback_selection">
        <param name="callback_type" type="select" label="Choose a callback">
          <option value="None" selected="true">None</option>
          <option value="EarlyStopping">EarlyStopping -- Stop training when a monitored quantity has stopped improving</option>
          <!--option value="KerasTensorBoard">TensorBoard</option-->
          <!--option value="KerasLearningRateScheduler">LearningRateScheduler</option-->
          <!--option value="RemoteMonitor">RemoteMonitor - Stream events to a server</option> -->
          <!--option value="ModelCheckpoint">ModelCheckpoint - Save the model after every epoch</option>-->
          <option value="TerminateOnNaN">TerminateOnNaN -- Terminates training when a NaN loss is encountered.</option>
          <option value="ReduceLROnPlateau">ReduceLROnPlateau -- Reduce learning rate when a metric has stopped improving</option>
          <option value="CSVLogger">CSVLogger -- Streams epoch results to a csv file</option>
        </param>
        <when value="None" />
        <when value="EarlyStopping">
          <expand macro="keras_callback_common_options">
            <param argument="min_delta" type="float" value="0" optional="true" help="Minimum change in the monitored quantity to qualify as an improvement." />
            <param argument="patience" type="integer" value="0" min="0" help="Number of epochs with no improvement after which training will be stopped." />
            <param argument="baseline" type="float" value="" optional="true" help="Baseline value for the monitored quantity to reach. Training will stop if the model doesn't show improvement over the baseline." />
            <param argument="restore_best_weights" type="boolean" truevalue="booltrue" falsevalue="boolfalse" checked="false" help="Whether to restore model weights from the epoch with the best value of the monitored quantity" />
          </expand>
        </when>
        <!--when value="TensorBoard">
          <param argument="histogram_freq" />
          <param argument="batch_size" />
          <param argument="write_graph" />
          <param argument="write_grads" />
          <param argument="write_images" />
          <param argument="embeddings_layer_names" />
          <param argument="embeddings_metadata" />
          <param argument="embeddings_data" />
          <param argument="update_freq" />
        </when-->
        <!--when value="RemoteMonitor">
          <param argument="root" type="text" value="http://localhost:9000" help="Root url of the target server." />
          <param argument="path" type="text" value="/publish/epoch/end/" help="Path relative to root to which the events will be sent. E.g., root + '/publish/epoch/end/'" />
          <param argument="field" type="text" value="data" optional="true" help="JSON field under which the data will be stored. The field is used only if the payload is sent within a form (i.e. send_as_json is set to False)." />
          <param argument="headers" type="text" value="" optional="true" help="Dictionary; optional custom HTTP headers.">
            <sanitizer>
              <valid initial="default">
                <add value="{" />
                <add value="}" />
              </valid>
            </sanitizer>
          </param>
          <param argument="send_as_json" type="boolean" truevalue="booltrue" falsevalue="boolfalse" checked="false" help="Whether the request should be send as application/json." />
        </when>
        <when value="ModelCheckpoint">
          <expand macro="keras_callback_common_options">
            <param argument="save_best_only" type="boolean" truevalue="booltrue" falsevalue="boolfalse" checked="false" help="If True, the latest best model according to the quantity monitored will not be overwritten." />
            <param argument="save_weights_only" type="boolean" truevalue="booltrue" falsevalue="boolfalse" checked="true" help="If True, then only the model's weights will be saved, else the full model is saved." />
            <param argument="period" type="integer" value="1" min="1" help="Interval (number of epochs) between checkpoints." />
          </expand>
        </when>-->
        <when value="TerminateOnNaN" />
        <when value="ReduceLROnPlateau">
          <expand macro="keras_callback_common_options">
            <param argument="factor" type="float" value="0.1" help="Factor by which the learning rate will be reduced. new_learning_rate = learning_rate * factor" />
            <param argument="patience" type="integer" value="10" help="Number of epochs with no improvement after which learning rate will be reduced." />
            <param argument="min_delta" type="float" value="0.0001" help="Threshold for measuring the new optimum, to only focus on significant changes." />
            <param argument="cooldown" type="integer" value="0" help="Number of epochs to wait before resuming normal operation after learning_rate has been reduced." />
            <param argument="min_lr" type="float" value="0" help="Lower bound on the learning rate." />
          </expand>
        </when>
        <when value="CSVLogger" />
      </conditional>
    </repeat>
  </xml>

  <xml name="keras_callback_common_options">
    <param argument="monitor" type="select" help="Quantity to be monitored.">
      <option value="val_loss" selected="true">val_loss</option>
      <option value="loss">loss</option>
    </param>
    <param argument="mode" type="select">
      <option value="auto" selected="true">auto -- the direction is automatically inferred from the name of the monitored quantity</option>
      <option value="min">min -- training will stop when the quantity monitored has stopped decreasing</option>
      <option value="max">max -- training will stop when the quantity monitored has stopped increasing</option>
    </param>
    <yield />
  </xml>

  <!--Batch online data generators-->

  <xml name="params_fasta_dna_batch_generator">
    <param argument="seq_length" type="integer" value="1000" optional="true" help="Integer. Sequence length or number of bases." />
    <param argument="shuffle" type="boolean" truevalue="booltrue" falsevalue="boolfalse" optional="true" checked="true" help="Whether to shuffle the data between epochs." />
    <param argument="seed" type="integer" value="" optional="true" help="Integer, random seed for data shuffling" />
  </xml>

  <xml name="params_fasta_protein_batch_generator">
    <expand macro="params_fasta_dna_batch_generator" />
  </xml>

  <xml name="params_genomic_interval_batch_generator">
    <expand macro="params_fasta_dna_batch_generator" />
    <param argument="blacklist_regions" type="select" help="Tabix-indexed list of regions from which we should not output sequences">
      <option value="hg38" selected="true">hg38</option>
      <option value="hg19">hg19</option>
    </param>
    <param argument="center_bin_to_predict" type="integer" value="200" optional="true" help="Query the tabix-indexed file for a region of length." />
    <param argument="feature_thresholds" type="float" value="0.5"  optional="true" help="Threshold values to determine target value." />
    <param argument="random_state" type="integer" value="" optional="true" help="Random seed number, to control the sample position in each invertal." />
  </xml>

  <xml name="params_image_batch_generator">
  </xml>


  <!--composite params macro-->

  <xml name="keras_compile_params_section">
    <section name="compile_params" title="Compile Parameters" expanded="true">
      <param name="loss" type="select" label="Select a loss function">
        <option value="binary_crossentropy" selected="true">binary_crossentropy</option>
        <option value="mean_squared_error">mse / MSE/ mean_squared_error</option>
        <option value="mean_absolute_error">mae / MAE / mean_absolute_error</option>
        <option value="mean_absolute_percentage_error">mape / MAPE / mean_absolute_percentage_error</option>
        <option value="mean_squared_logarithmic_error">msle / MSLE / mean_squared_logarithmic_error</option>
        <option value="squared_hinge">squared_hinge</option>
        <option value="hinge">hinge</option>
        <option value="categorical_hinge">categorical_hinge</option>
        <option value="logcosh">logcosh</option>
        <option value="categorical_crossentropy">categorical_crossentropy</option>
        <option value="sparse_categorical_crossentropy">sparse_categorical_crossentropy</option>
        <option value="kullback_leibler_divergence">kld / KLD / kullback_leibler_divergence</option>
        <option value="poisson">poisson</option>
        <option value="cosine_proximity">cosine / cosine_proximity</option>
      </param>
      <conditional name="optimizer_selection">
        <param name="optimizer_type" type="select" label="Select an optimizer">
          <option value="RMSprop" selected="true">RMSprop - RMSProp optimizer </option>
          <option value="SGD">SGD - Stochastic gradient descent optimizer </option>
          <option value="Adagrad">Adagrad - Adagrad optimizer </option>
          <option value="Adadelta">Adadelta - Adadelta optimizer </option>
          <option value="Adam">Adam - Adam optimizer </option>
          <option value="Adamax">Adamax - A variant of Adam based on the infinity norm </option>
          <option value="Nadam">Nadam - Nesterov Adam optimizer </option>
          <option value="Ftrl">Ftrl - Ftrl optimizer </option>
        </param>
        <when value="RMSprop">
          <expand macro="keras_optimizer_common" learning_rate="0.001">
            <param argument="rho" type="float" value="0.9" optional="true" label="rho" help="Float. Discounting factor for the history/coming gradient." />
            <param argument="momentum" type="float" value="0" optional="true" label="momentum"
                help="Float." />
            <param argument="epsilon" type="float" value="1e-7" label="epsilon" optional="true" help="A small constant for numerical stability." />
            <param argument="centered" type="boolean" truevalue="booltrue" falsevalue="boolfalse" optional="true" checked="false" label="centered"
                help="If True, gradients are normalized by the estimated variance of the gradient; if False, by the uncentered second moment." />
          </expand>
        </when>
        <when value="SGD">
          <expand macro="keras_optimizer_common">
            <param argument="momentum" type="float" value="0" optional="true" label="Momentum"
                help="float >= 0. Parameter that accelerates SGD in the relevant direction and dampens oscillations." />
            <param argument="nesterov" type="boolean" truevalue="booltrue" falsevalue="boolfalse" optional="true" checked="false" label="Whether to apply Nesterov momentum" />
          </expand>
        </when>
        <when value="Adagrad">
          <expand macro="keras_optimizer_common" learning_rate="0.001">
            <param argument="initial_accumulator_value" type="float" value="0.1" optional="true" label="initial_accumulator_value" help="Float, &lt;= 0." />
            <param argument="epsilon" type="float" value="1e-7" label="epsilon" optional="true" help="A small constant for numerical stability." />
          </expand>
        </when>
        <when value="Adadelta">
          <expand macro="keras_optimizer_common" learning_rate="0.001">
            <param argument="rho" type="float" value="0.95" optional="true" label="rho" help="Float, &gt;= 0. The decay rate." />
            <param argument="epsilon" type="float" value="1e-7" label="epsilon" optional="true" help="A small constant for numerical stability." />
          </expand>
        </when>
        <when value="Adam">
          <expand macro="keras_optimizer_common_more" learning_rate="0.001">
            <param argument="amsgrad" type="boolean" truevalue="booltrue" falsevalue="boolfalse" optional="true" checked="false" label="Whether to apply the AMSGrad variant?" 
                help="Refer to paper `On the Convergence of Adam and Beyond`" />
          </expand>
        </when>
        <when value="Adamax">
          <expand macro="keras_optimizer_common_more" learning_rate="0.001" />
        </when>
        <when value="Nadam">
          <expand macro="keras_optimizer_common_more" learning_rate="0.001" />
        </when>
        <when value="Ftrl">
          <expand macro="keras_optimizer_common" learning_rate="0.001">
            <param argument="learning_rate_power" type="float" value="-0.5" optional="true" label="learning_rate_power" help="Float, &gt;= 0." />
            <param argument="initial_accumulator_value" type="float" value="0.1" optional="true" label="initial_accumulator_value" help="Float, &lt;= 0." />
            <param argument="l1_regularization_strength" type="float" value="0." optional="true" label="l1_regularization_strength" help="Float, &gt;= 0." />
            <param argument="l2_regularization_strength" type="float" value="0." optional="true" label="l2_regularization_strength" help="Float, &gt;= 0." />
            <param argument="l2_shrinkage_regularization_strength" type="float" value="0." optional="true" label="l2_shrinkage_regularization_strength" help="Float, &gt;= 0." />
            <param argument="beta" type="float" value="0." optional="true" label="beta" help="Float." />
          </expand>
        </when>
      </conditional>
      <param name="metrics" type="select" optional="true" multiple="true" label="Select metrics">
        <option value="acc" selected="true">acc / accruracy</option>
        <option value="binary_accuracy">binary_accuracy</option>
        <option value="categorical_accuracy">categorical_accuracy</option>
        <option value="sparse_categorical_accuracy">sparse_categorical_accuracy</option>
        <option value="mse">mse / MSE / mean_squared_error</option>
        <option value="mae">mae / MAE / mean_absolute_error</option>
        <option value="mape">mape / MAPE / mean_absolute_percentage_error</option>
        <option value="cosine_proximity">cosine_proximity</option>
        <option value="cosine">cosine</option>
        <option value="none">none</option>
      </param>
    </section>
  </xml>

  <xml name="keras_fit_params_section">
    <section name="fit_params" title="Fit Parameters" expanded="true">
      <param name="epochs" type="integer" value="1" min="1" label="epochs" />
      <param name="batch_size" type="integer" value="32" optional="true" label="batch_size" help="Integer or blank for 32" />
      <param name="steps_per_epoch" type="integer" value="" optional="true" label="steps_per_epoch" help="The number of steps (batches of samples) before declaring one epoch finished and starting the next epoch. The default None is equal to the number of samples in your dataset divided by the batch size, or 1 if that cannot be determined." />
      <yield />
      <param name="validation_steps" type="integer" value="" optional="true" label="validation_steps" help="Default None. Total number of steps (batches of samples) to validate before stopping." />
      <!--`validation_freq` will be available in next keras version-->
      <!--param name="validation_freq" type="integer" value="1" optional="true" label="validation_freq" help="Integer only at current moment. If an integer, specifies how many training epochs to run before a new validation run is performed."/-->
      <expand macro="keras_callbacks" />
      <param name="verbose" type="integer" value="1" optional="true" label="verbose" help="0, 1, or 2. Verbosity mode. 0 = silent, 1 = progress bar, 2 = one line per epoch." />
    </section>
  </xml>

 <!--Citation-->
  <xml name="keras_citation">
    <citation type="bibtex">
      @misc{chollet2015keras,
        title={Keras},
        url={https://keras.io},
        author={Chollet, Fran\c{c}ois and others},
        year={2015},
        howpublished={https://keras.io},
      }
    </citation>
  </xml>

  <xml name="tensorflow_citation">
    <citation type="bibtex">
      @misc{tensorflow2015-whitepaper,
        title={ {TensorFlow}: Large-Scale Machine Learning on Heterogeneous Systems},
        url={https://www.tensorflow.org/},
        note={Software available from tensorflow.org},
        author={
            Mart\'{\i}n~Abadi and
            Ashish~Agarwal and
            Paul~Barham and
            Eugene~Brevdo and
            Zhifeng~Chen and
            Craig~Citro and
            Greg~S.~Corrado and
            Andy~Davis and
            Jeffrey~Dean and
            Matthieu~Devin and
            Sanjay~Ghemawat and
            Ian~Goodfellow and
            Andrew~Harp and
            Geoffrey~Irving and
            Michael~Isard and
            Yangqing Jia and
            Rafal~Jozefowicz and
            Lukasz~Kaiser and
            Manjunath~Kudlur and
            Josh~Levenberg and
            Dandelion~Man\'{e} and
            Rajat~Monga and
            Sherry~Moore and
            Derek~Murray and
            Chris~Olah and
            Mike~Schuster and
            Jonathon~Shlens and
            Benoit~Steiner and
            Ilya~Sutskever and
            Kunal~Talwar and
            Paul~Tucker and
            Vincent~Vanhoucke and
            Vijay~Vasudevan and
            Fernanda~Vi\'{e}gas and
            Oriol~Vinyals and
            Pete~Warden and
            Martin~Wattenberg and
            Martin~Wicke and
            Yuan~Yu and
            Xiaoqiang~Zheng},
          year={2015},
      }
    </citation>
  </xml>

</macros>
