def get_mlp(input_size, output_size, shape_raw=None, activation='cart_relu', dropout=0.5, output_activation='softmax_real_with_abs', optimizer='sgd', name='complex_network'):
    if (shape_raw is None):
        shape_raw = [100, 50]
    shape = [layers.ComplexInput(input_shape=input_size)]
    if (len(shape_raw) == 0):
        shape.append(ComplexDense(units=output_size, activation=output_activation, input_dtype=np.complex64))
    else:
        for s in shape_raw:
            shape.append(ComplexDense(units=s, activation=activation))
            if (dropout is not None):
                shape.append(ComplexDropout(rate=dropout))
        shape.append(ComplexDense(units=output_size, activation=output_activation))
    complex_network = tf.keras.Sequential(shape, name=name)
    complex_network.compile(optimizer=optimizer, loss=tf.keras.losses.CategoricalCrossentropy(), metrics=['accuracy'])
    return complex_network
def get_mlp(input_size, output_size, shape_raw=None, activation='cart_relu', dropout=0.5, output_activation='softmax_real_with_abs', optimizer='sgd', name='complex_network'):
    if (shape_raw is None):
        shape_raw = [100, 50]
    shape = [layers.ComplexInput(input_shape=input_size)]
    if (len(shape_raw) == 0):
        shape.append(ComplexDense(units=output_size, activation=output_activation, input_dtype=np.complex64))
    else:
        for s in shape_raw:
            shape.append(ComplexDense(units=s, activation=activation))
            if (dropout is not None):
                shape.append(ComplexDropout(rate=dropout))
        shape.append(ComplexDense(units=output_size, activation=output_activation))
    complex_network = tf.keras.Sequential(shape, name=name)
    complex_network.compile(optimizer=optimizer, loss=tf.keras.losses.CategoricalCrossentropy(), metrics=['accuracy'])
    return complex_network