Module monk.tf_keras_1.models.layers
Expand source code
from tf_keras_1.models.imports import *
from system.imports import *
from tf_keras_1.models.initializers import get_initializer
def get_layer(network_layer, inp):
'''
Get layer for appending it to transfer learning base model
Args:
network_layer (dict): Dictionary conatining all params relating to the layer
inp (keras placeholder): Placeholder input for the layer
Returns:
Keras placeholder: Placeholder output from the layer
'''
layer_name = network_layer["name"];
layer_params = network_layer["params"];
if(layer_name == "linear"):
out = krl.Dense(layer_params["out_features"])(inp)
elif(layer_name == "dropout"):
out = krl.Dropout(rate=1-layer_params["p"])(inp)
elif(layer_name == "globalaveragepooling"):
out = krl.GlobalAveragePooling2D()(inp);
elif(layer_name == "flatten"):
out = krl.Flatten()(inp);
elif(layer_name == "elu"):
out = krl.ELU(alpha=layer_params["alpha"])(inp);
elif(layer_name == "leakyrelu"):
out = krl.LeakyReLU(alpha=layer_params["alpha"])(inp);
elif(layer_name == "prelu"):
init = kri.Constant(value=layer_params["init"])
out = krl.PReLU(alpha_initializer=init)(inp);
elif(layer_name == "relu"):
out = krl.ReLU()(inp);
elif(layer_name == "selu"):
out = krl.selu(inp);
elif(layer_name == "sigmoid"):
out = krl.sigmoid(inp);
elif(layer_name == "softplus"):
out = krl.softplus(inp);
elif(layer_name == "softsign"):
out = krl.softsign(inp);
elif(layer_name == "tanh"):
out = krl.tanh(inp);
elif(layer_name == "threshold"):
out = krl.ThresholdedReLU(theta=layer_params["threshold"])(inp);
elif(layer_name == "softmax"):
out = krl.Softmax()(inp);
return out;
def layer_linear(system_dict, num_neurons=512, final_layer=False):
'''
Append dense (fully connected) layer to base network in transfer learning
Args:
system_dict (dict): System dictionary storing experiment state and set variables
num_neurons (int): Number of neurons in the dense layer
final_layer (bool): If True, then number of neurons are directly set as number of classes in dataset for single label type classification
Returns:
dict: updated system dict
'''
tmp = {};
tmp["name"] = "linear";
tmp["params"] = {};
tmp["params"]["out_features"] = num_neurons;
system_dict["model"]["custom_network"].append(tmp);
system_dict["model"]["final_layer"] = final_layer;
return system_dict;
def layer_dropout(system_dict, probability=0.5, final_layer=False):
'''
Append dropout layer to base network in transfer learning
Args:
system_dict (dict): System dictionary storing experiment state and set variables
probability (float): Droping probability of neurons in next layer
final_layer (bool): Indicator that this layer marks the end of network.
Returns:
dict: updated system dict
'''
tmp = {};
tmp["name"] = "dropout";
tmp["params"] = {};
tmp["params"]["p"] = probability;
system_dict["model"]["custom_network"].append(tmp);
system_dict["model"]["final_layer"] = final_layer;
return system_dict;
def layer_globalaveragepooling(system_dict, final_layer=False):
'''
Append global average pooling layer to base network in transfer learning
Args:
system_dict (dict): System dictionary storing experiment state and set variables
final_layer (bool): Indicator that this layer marks the end of network.
Returns:
dict: updated system dict
'''
tmp = {};
tmp["name"] = "globalaveragepooling";
tmp["params"] = {};
system_dict["model"]["custom_network"].append(tmp);
system_dict["model"]["final_layer"] = final_layer;
return system_dict;
def layer_flatten(system_dict, final_layer=False):
'''
Append flatten layer to base network in transfer learning
Args:
system_dict (dict): System dictionary storing experiment state and set variables
final_layer (bool): Indicator that this layer marks the end of network.
Returns:
dict: updated system dict
'''
tmp = {};
tmp["name"] = "flatten";
tmp["params"] = {};
system_dict["model"]["custom_network"].append(tmp);
system_dict["model"]["final_layer"] = final_layer;
return system_dict;
def activation_leakyrelu(system_dict, negative_slope=0.01, final_layer=False):
'''
Append Leaky - ReLU activation to base network in transfer learning
Args:
system_dict (dict): System dictionary storing experiment state and set variables
negative_slope (float): Multiplicatve factor towards negative spectrum of real numbers.
final_layer (bool): Indicator that this layer marks the end of network.
Returns:
dict: updated system dict
'''
tmp = {};
tmp["name"] = "leakyrelu";
tmp["params"] = {};
tmp["params"]["negative_slope"] = negative_slope;
system_dict["model"]["custom_network"].append(tmp);
system_dict["model"]["final_layer"] = final_layer;
return system_dict;
def activation_prelu(system_dict, num_parameters=1, init=0.25, final_layer=False):
'''
Append Learnable parameterized rectified linear unit activation to base network in transfer learning
Args:
system_dict (dict): System dictionary storing experiment state and set variables
init (float): Initialization value for multiplicatve factor towards negative spectrum of real numbers.
final_layer (bool): Indicator that this layer marks the end of network.
Returns:
dict: updated system dict
'''
tmp = {};
tmp["name"] = "prelu";
tmp["params"] = {};
tmp["params"]["num_parameters"] = num_parameters;
tmp["params"]["init"] = init;
system_dict["model"]["custom_network"].append(tmp);
system_dict["model"]["final_layer"] = final_layer;
return system_dict;
def activation_elu(system_dict, alpha=1.0, final_layer=False):
'''
Append exponential linear unit activation to base network in transfer learning
Args:
system_dict (dict): System dictionary storing experiment state and set variables
alpha (float): Multiplicatve factor.
final_layer (bool): Indicator that this layer marks the end of network.
Returns:
dict: updated system dict
'''
tmp = {};
tmp["name"] = "elu";
tmp["params"] = {};
tmp["params"]["alpha"] = alpha;
system_dict["model"]["custom_network"].append(tmp);
system_dict["model"]["final_layer"] = final_layer;
return system_dict;
def activation_threshold(system_dict, threshold, value, final_layer=False):
'''
Append threshold activation to base network in transfer learning
Args:
system_dict (dict): System dictionary storing experiment state and set variables
threshold (float): thereshold limit value
value (float): replacement value if input is off-limits
final_layer (bool): Indicator that this layer marks the end of network.
Returns:
dict: updated system dict
'''
tmp = {};
tmp["name"] = "threshold";
tmp["params"] = {};
tmp["params"]["value"] = value;
tmp["params"]["threshold"] = threshold;
system_dict["model"]["custom_network"].append(tmp);
system_dict["model"]["final_layer"] = final_layer;
return system_dict;
def activation_softmax(system_dict, final_layer=False):
'''
Append softmax activation to base network in transfer learning
Args:
system_dict (dict): System dictionary storing experiment state and set variables
final_layer (bool): Indicator that this layer marks the end of network.
Returns:
dict: updated system dict
'''
tmp = {};
tmp["name"] = "softmax";
tmp["params"] = {};
system_dict["model"]["custom_network"].append(tmp);
system_dict["model"]["final_layer"] = final_layer;
return system_dict;
def activation_relu(system_dict, final_layer=False):
'''
Append rectified linear unit activation to base network in transfer learning
Args:
system_dict (dict): System dictionary storing experiment state and set variables
final_layer (bool): Indicator that this layer marks the end of network.
Returns:
dict: updated system dict
'''
tmp = {};
tmp["name"] = "relu";
tmp["params"] = {};
system_dict["model"]["custom_network"].append(tmp);
system_dict["model"]["final_layer"] = final_layer;
return system_dict;
def activation_selu(system_dict, final_layer=False):
'''
Append scaled exponential linear unit activation to base network in transfer learning
Args:
system_dict (dict): System dictionary storing experiment state and set variables
final_layer (bool): Indicator that this layer marks the end of network.
Returns:
dict: updated system dict
'''
tmp = {};
tmp["name"] = "selu";
tmp["params"] = {};
system_dict["model"]["custom_network"].append(tmp);
system_dict["model"]["final_layer"] = final_layer;
return system_dict;
def activation_softplus(system_dict, beta=1, threshold=20, final_layer=False):
'''
Append softplus activation to base network in transfer learning
Args:
system_dict (dict): System dictionary storing experiment state and set variables
beta (int): Multiplicative factor
threshold (int): softplus (thresholded relu) limit
final_layer (bool): Indicator that this layer marks the end of network.
Returns:
dict: updated system dict
'''
tmp = {};
tmp["name"] = "softplus";
tmp["params"] = {};
tmp["params"]["beta"] = beta;
tmp["params"]["threshold"] = threshold;
system_dict["model"]["custom_network"].append(tmp);
system_dict["model"]["final_layer"] = final_layer;
return system_dict;
def activation_softsign(system_dict, final_layer=False):
'''
Append softsign activation to base network in transfer learning
Args:
system_dict (dict): System dictionary storing experiment state and set variables
final_layer (bool): Indicator that this layer marks the end of network.
Returns:
dict: updated system dict
'''
tmp = {};
tmp["name"] = "softsign";
tmp["params"] = {};
system_dict["model"]["custom_network"].append(tmp);
system_dict["model"]["final_layer"] = final_layer;
return system_dict;
def activation_tanh(system_dict, final_layer=False):
'''
Append tanh activation to base network in transfer learning
Args:
system_dict (dict): System dictionary storing experiment state and set variables
final_layer (bool): Indicator that this layer marks the end of network.
Returns:
dict: updated system dict
'''
tmp = {};
tmp["name"] = "tanh";
tmp["params"] = {};
system_dict["model"]["custom_network"].append(tmp);
system_dict["model"]["final_layer"] = final_layer;
return system_dict;
def activation_sigmoid(system_dict, final_layer=False):
'''
Append sigmoid activation to base network in transfer learning
Args:
system_dict (dict): System dictionary storing experiment state and set variables
final_layer (bool): Indicator that this layer marks the end of network.
Returns:
dict: updated system dict
'''
tmp = {};
tmp["name"] = "sigmoid";
tmp["params"] = {};
system_dict["model"]["custom_network"].append(tmp);
system_dict["model"]["final_layer"] = final_layer;
return system_dict;
def custom_model_get_layer(network_layer, network_initializer):
'''
Get layer for custom network design
Args:
network_layer (dict): Network layer as dict
network_initializer (initialization param): Initializer for the layer
Returns:
neural network layer: Actual layer in native backend library
'''
layer_name = network_layer["name"];
layer_params = network_layer["params"];
if(layer_name == "convolution1d"):
return custom_model_layer_convolution1d(layer_params, network_initializer);
elif(layer_name == "convolution2d"):
return custom_model_layer_convolution2d(layer_params, network_initializer);
elif(layer_name == "convolution3d"):
return custom_model_layer_convolution3d(layer_params, network_initializer);
elif(layer_name == "transposed_convolution2d"):
return custom_model_layer_transposed_convolution2d(layer_params, network_initializer);
elif(layer_name == "transposed_convolution3d"):
return custom_model_layer_transposed_convolution3d(layer_params, network_initializer);
elif(layer_name == "max_pooling1d"):
return custom_model_layer_max_pooling1d(layer_params);
elif(layer_name == "max_pooling2d"):
return custom_model_layer_max_pooling2d(layer_params);
elif(layer_name == "max_pooling3d"):
return custom_model_layer_max_pooling3d(layer_params);
elif(layer_name == "average_pooling1d"):
return custom_model_layer_average_pooling1d(layer_params);
elif(layer_name == "average_pooling2d"):
return custom_model_layer_average_pooling2d(layer_params);
elif(layer_name == "average_pooling3d"):
return custom_model_layer_average_pooling3d(layer_params);
elif(layer_name == "global_max_pooling1d"):
return custom_model_layer_global_max_pooling1d(layer_params);
elif(layer_name == "global_max_pooling2d"):
return custom_model_layer_global_max_pooling2d(layer_params);
elif(layer_name == "global_max_pooling3d"):
return custom_model_layer_global_max_pooling3d(layer_params);
elif(layer_name == "global_average_pooling1d"):
return custom_model_layer_global_average_pooling1d(layer_params);
elif(layer_name == "global_average_pooling2d"):
return custom_model_layer_global_average_pooling2d(layer_params);
elif(layer_name == "global_average_pooling3d"):
return custom_model_layer_global_average_pooling3d(layer_params);
elif(layer_name == "flatten"):
return custom_model_layer_flatten(layer_params);
elif(layer_name == "fully_connected"):
return custom_model_layer_fully_connected(layer_params, network_initializer);
elif(layer_name == "dropout"):
return custom_model_layer_dropout(layer_params);
elif(layer_name == "identity"):
return custom_model_layer_identity(layer_params);
elif(layer_name == "batch_normalization"):
return custom_model_layer_batch_normalization(layer_params);
elif(layer_name == "relu"):
return custom_model_activation_relu(layer_params);
elif(layer_name == "softmax"):
return custom_model_activation_softmax(layer_params);
elif(layer_name == "thresholded_relu"):
return custom_model_activation_thresholded_relu(layer_params);
elif(layer_name == "elu"):
return custom_model_activation_elu(layer_params);
elif(layer_name == "prelu"):
return custom_model_activation_prelu(layer_params);
elif(layer_name == "leaky_relu"):
return custom_model_activation_leaky_relu(layer_params);
elif(layer_name == "selu"):
return custom_model_activation_selu(layer_params);
elif(layer_name == "softplus"):
return custom_model_activation_softplus(layer_params);
elif(layer_name == "softsign"):
return custom_model_activation_softsign(layer_params);
elif(layer_name == "tanh"):
return custom_model_activation_tanh(layer_params);
elif(layer_name == "sigmoid"):
return custom_model_activation_sigmoid(layer_params);
elif(layer_name == "hard_sigmoid"):
return custom_model_activation_hard_sigmoid(layer_params);
def custom_model_layer_convolution1d(params, network_initializer):
'''
Append 1d-convolution to custom network
Args:
params (dict): All layer parameters
Returns:
neural network layer: 1d-convolution layer
'''
out_channels = params["output_channels"];
kernel_size=params["kernel_size"];
strides=params["stride"];
if(params["padding"] == "in_eq_out"):
padding = "same";
elif(params["padding"] == 0):
padding = "valid";
else:
padding = "same"; #causal
if(params["layout"][-1] == "C"):
data_format='channels_last';
else:
data_format='channels_first';
dilation_rate=params["dilation"];
activation=None;
use_bias = params["use_bias"];
kernel_initializer=get_initializer(network_initializer)
bias_initializer='zeros';
kernel_regularizer=None;
bias_regularizer=None;
activity_regularizer=None;
kernel_constraint=None;
bias_constraint=None;
layer = keras.layers.Conv1D(out_channels, kernel_size, strides=strides,
padding=padding, data_format=data_format,
dilation_rate=dilation_rate, activation=activation, use_bias=use_bias,
kernel_initializer=kernel_initializer, bias_initializer=bias_initializer,
kernel_regularizer=kernel_regularizer, bias_regularizer=bias_regularizer,
activity_regularizer=activity_regularizer, kernel_constraint=kernel_constraint,
bias_constraint=bias_constraint)
return layer
def custom_model_layer_convolution2d(params, network_initializer):
'''
Append 2d-convolution to custom network
Args:
params (dict): All layer parameters
Returns:
neural network layer: 2d-convolution layer
'''
out_channels = params["output_channels"];
kernel_size=params["kernel_size"];
strides=params["stride"];
if(params["padding"] == "in_eq_out"):
padding = "same";
elif(params["padding"] == 0):
padding = "valid";
else:
padding = "causal"; #causal
if(params["layout"][-1] == "C"):
data_format='channels_last';
else:
data_format='channels_first';
dilation_rate=params["dilation"];
activation=None;
use_bias = params["use_bias"];
kernel_initializer=get_initializer(network_initializer);
bias_initializer='zeros';
kernel_regularizer=None;
bias_regularizer=None;
activity_regularizer=None;
kernel_constraint=None;
bias_constraint=None;
layer = keras.layers.Conv2D(out_channels, kernel_size, strides=strides,
padding=padding, data_format=data_format,
dilation_rate=dilation_rate, activation=activation, use_bias=use_bias,
kernel_initializer=kernel_initializer, bias_initializer=bias_initializer,
kernel_regularizer=kernel_regularizer, bias_regularizer=bias_regularizer,
activity_regularizer=activity_regularizer, kernel_constraint=kernel_constraint,
bias_constraint=bias_constraint)
return layer
def custom_model_layer_convolution3d(params, network_initializer):
'''
Append 3d-convolution to custom network
Args:
params (dict): All layer parameters
Returns:
neural network layer: 3d-convolution layer
'''
out_channels = params["output_channels"];
kernel_size=params["kernel_size"];
strides=params["stride"];
if(params["padding"] == "in_eq_out"):
padding = "same";
elif(params["padding"] == 0):
padding = "valid";
else:
padding = "same"; #causal
if(params["layout"][-1] == "C"):
data_format='channels_last';
else:
data_format='channels_first';
dilation_rate=params["dilation"];
activation=None;
use_bias = params["use_bias"];
kernel_initializer=get_initializer(network_initializer);
bias_initializer='zeros';
kernel_regularizer=None;
bias_regularizer=None;
activity_regularizer=None;
kernel_constraint=None;
bias_constraint=None;
layer = keras.layers.Conv3D(out_channels, kernel_size, strides=strides,
padding=padding, data_format=data_format,
dilation_rate=dilation_rate, activation=activation, use_bias=use_bias,
kernel_initializer=kernel_initializer, bias_initializer=bias_initializer,
kernel_regularizer=kernel_regularizer, bias_regularizer=bias_regularizer,
activity_regularizer=activity_regularizer, kernel_constraint=kernel_constraint,
bias_constraint=bias_constraint)
return layer
def custom_model_layer_transposed_convolution2d(params, network_initializer):
'''
Append 2d-transposed-convolution to custom network
Args:
params (dict): All layer parameters
Returns:
neural network layer: 2d-transposed-convolution layer
'''
out_channels = params["output_channels"];
kernel_size=params["kernel_size"];
strides=params["stride"];
if(params["padding"] == "in_eq_out"):
padding = "same";
elif(params["padding"] == 0):
padding = "valid";
else:
padding = "causal";
if(params["layout"][-1] == "C"):
data_format='channels_last';
else:
data_format='channels_first';
dilation_rate=params["dilation"];
activation=None;
use_bias = params["use_bias"];
kernel_initializer=get_initializer(network_initializer);
bias_initializer='zeros';
kernel_regularizer=None;
bias_regularizer=None;
activity_regularizer=None;
kernel_constraint=None;
bias_constraint=None;
layer = keras.layers.Conv2DTranspose(out_channels, kernel_size, strides=strides,
padding=padding, data_format=data_format,
dilation_rate=dilation_rate, activation=activation, use_bias=use_bias,
kernel_initializer=kernel_initializer, bias_initializer=bias_initializer,
kernel_regularizer=kernel_regularizer, bias_regularizer=bias_regularizer,
activity_regularizer=activity_regularizer, kernel_constraint=kernel_constraint,
bias_constraint=bias_constraint)
return layer
def custom_model_layer_transposed_convolution3d(params, network_initializer):
'''
Append 3d-transposed-convolution to custom network
Args:
params (dict): All layer parameters
Returns:
neural network layer: 3d-transposed-convolution layer
'''
out_channels = params["output_channels"];
kernel_size=params["kernel_size"];
strides=params["stride"];
if(params["padding"] == "in_eq_out"):
padding = "same";
elif(params["padding"] == 0):
padding = "valid";
else:
padding = "causal";
if(params["layout"][-1] == "C"):
data_format='channels_last';
else:
data_format='channels_first';
dilation_rate=params["dilation"];
activation=None;
use_bias = params["use_bias"];
kernel_initializer=get_initializer(network_initializer);
bias_initializer='zeros';
kernel_regularizer=None;
bias_regularizer=None;
activity_regularizer=None;
kernel_constraint=None;
bias_constraint=None;
layer = keras.layers.Conv3DTranspose(out_channels, kernel_size, strides=strides,
padding=padding, data_format=data_format,
dilation_rate=dilation_rate, activation=activation, use_bias=use_bias,
kernel_initializer=kernel_initializer, bias_initializer=bias_initializer,
kernel_regularizer=kernel_regularizer, bias_regularizer=bias_regularizer,
activity_regularizer=activity_regularizer, kernel_constraint=kernel_constraint,
bias_constraint=bias_constraint)
return layer
def custom_model_layer_max_pooling1d(params):
'''
Append 1d-max-pooling to custom network
Args:
params (dict): All layer parameters
Returns:
neural network layer: 1d-max-pooling layer
'''
pool_size=params["kernel_size"];
strides=params["stride"];
if(params["padding"] == "in_eq_out"):
padding = "same";
elif(params["padding"] == 0):
padding = "valid";
else:
padding = "causal";
if(params["layout"][-1] == "C"):
data_format='channels_last';
else:
data_format='channels_first';
layer = keras.layers.MaxPooling1D(pool_size=pool_size, strides=strides,
padding=padding, data_format=data_format)
return layer
def custom_model_layer_max_pooling2d(params):
'''
Append 2d-max-pooling to custom network
Args:
params (dict): All layer parameters
Returns:
neural network layer: 2d-max-pooling layer
'''
pool_size=params["kernel_size"];
strides=params["stride"];
if(params["padding"] == "in_eq_out"):
padding = "same";
elif(params["padding"] == 0):
padding = "valid";
else:
padding = "causal";
if(params["layout"][-1] == "C"):
data_format='channels_last';
else:
data_format='channels_first';
layer = keras.layers.MaxPooling2D(pool_size=pool_size, strides=strides,
padding=padding, data_format=data_format)
return layer
def custom_model_layer_max_pooling3d(params):
'''
Append 3d-max-pooling to custom network
Args:
params (dict): All layer parameters
Returns:
neural network layer: 3d-max-pooling layer
'''
pool_size=params["kernel_size"];
strides=params["stride"];
if(params["padding"] == "in_eq_out"):
padding = "same";
elif(params["padding"] == 0):
padding = "valid";
else:
padding = "causal";
if(params["layout"][-1] == "C"):
data_format='channels_last';
else:
data_format='channels_first';
layer = keras.layers.MaxPooling3D(pool_size=pool_size, strides=strides,
padding=padding, data_format=data_format)
return layer
def custom_model_layer_average_pooling1d(params):
'''
Append 1d-average-pooling to custom network
Args:
params (dict): All layer parameters
Returns:
neural network layer: 1d-average-pooling layer
'''
pool_size=params["kernel_size"];
strides=params["stride"];
if(params["padding"] == "in_eq_out"):
padding = "same";
elif(params["padding"] == 0):
padding = "valid";
else:
padding = "causal";
if(params["layout"][-1] == "C"):
data_format='channels_last';
else:
data_format='channels_first';
layer = keras.layers.AveragePooling1D(pool_size=pool_size, strides=strides,
padding=padding, data_format=data_format)
return layer
def custom_model_layer_average_pooling2d(params):
'''
Append 2d-average-pooling to custom network
Args:
params (dict): All layer parameters
Returns:
neural network layer: 2d-average-pooling layer
'''
pool_size=params["kernel_size"];
strides=params["stride"];
if(params["padding"] == "in_eq_out"):
padding = "same";
elif(params["padding"] == 0):
padding = "valid";
else:
padding = "causal";
if(params["layout"][-1] == "C"):
data_format='channels_last';
else:
data_format='channels_first';
layer = keras.layers.AveragePooling2D(pool_size=pool_size, strides=strides,
padding=padding, data_format=data_format)
return layer
def custom_model_layer_average_pooling3d(params):
'''
Append 3d-average-pooling to custom network
Args:
params (dict): All layer parameters
Returns:
neural network layer: 3d-average-pooling layer
'''
pool_size=params["kernel_size"];
strides=params["stride"];
if(params["padding"] == "in_eq_out"):
padding = "same";
elif(params["padding"] == 0):
padding = "valid";
else:
padding = "causal";
if(params["layout"][-1] == "C"):
data_format='channels_last';
else:
data_format='channels_first';
layer = keras.layers.AveragePooling3D(pool_size=pool_size, strides=strides,
padding=padding, data_format=data_format)
return layer
def custom_model_layer_global_max_pooling1d(params):
'''
Append 1d-global-max-pooling to custom network
Args:
params (dict): All layer parameters
Returns:
neural network layer: 1d-global-max-pooling layer
'''
if(params["layout"][-1] == "C"):
data_format='channels_last';
else:
data_format='channels_first';
layer = keras.layers.GlobalMaxPooling1D(data_format=data_format);
return layer
def custom_model_layer_global_max_pooling2d(params):
'''
Append 2d-global-max-pooling to custom network
Args:
params (dict): All layer parameters
Returns:
neural network layer: 2d-global-max-pooling layer
'''
if(params["layout"][-1] == "C"):
data_format='channels_last';
else:
data_format='channels_first';
layer = keras.layers.GlobalMaxPooling2D(data_format=data_format);
return layer
def custom_model_layer_global_max_pooling3d(params):
'''
Append 3d-global-max-pooling to custom network
Args:
params (dict): All layer parameters
Returns:
neural network layer: 3d-global-max-pooling layer
'''
if(params["layout"][-1] == "C"):
data_format='channels_last';
else:
data_format='channels_first';
layer = keras.layers.GlobalMaxPooling3D(data_format=data_format);
return layer
def custom_model_layer_global_average_pooling1d(params):
'''
Append 1d-global-average-pooling to custom network
Args:
params (dict): All layer parameters
Returns:
neural network layer: 1d-global-average-pooling layer
'''
if(params["layout"][-1] == "C"):
data_format='channels_last';
else:
data_format='channels_first';
layer = keras.layers.GlobalAveragePooling1D(data_format=data_format);
return layer
def custom_model_layer_global_average_pooling2d(params):
'''
Append 2d-global-average-pooling to custom network
Args:
params (dict): All layer parameters
Returns:
neural network layer: 2d-global-average-pooling layer
'''
if(params["layout"][-1] == "C"):
data_format='channels_last';
else:
data_format='channels_first';
layer = keras.layers.GlobalAveragePooling2D(data_format=data_format);
return layer
def custom_model_layer_global_average_pooling3d(params):
'''
Append 3d-global-average-pooling to custom network
Args:
params (dict): All layer parameters
Returns:
neural network layer: 3d-global-average-pooling layer
'''
if(params["layout"][-1] == "C"):
data_format='channels_last';
else:
data_format='channels_first';
layer = keras.layers.GlobalAveragePooling3D(data_format=data_format);
return layer
def custom_model_layer_flatten(params):
'''
Append flatten to custom network
Args:
params (dict): All layer parameters
Returns:
neural network layer: flatten layer
'''
if(params["layout"][-1] == "C"):
data_format='channels_last';
else:
data_format='channels_first';
layer = keras.layers.Flatten(data_format=data_format);
return layer;
def custom_model_layer_fully_connected(params, network_initializer):
'''
Append fc (dense) to custom network
Args:
params (dict): All layer parameters
Returns:
neural network layer: fc (dense) layer
'''
units=params["units"];
activation=None;
use_bias = params["use_bias"];
kernel_initializer=get_initializer(network_initializer);
bias_initializer='zeros';
kernel_regularizer=None;
bias_regularizer=None;
activity_regularizer=None;
kernel_constraint=None;
bias_constraint=None;
layer = keras.layers.Dense(units, activation=activation, use_bias=use_bias,
kernel_initializer=kernel_initializer, bias_initializer=bias_initializer,
kernel_regularizer=kernel_regularizer, bias_regularizer=bias_regularizer,
activity_regularizer=activity_regularizer, kernel_constraint=kernel_constraint,
bias_constraint=bias_constraint)
return layer
def custom_model_layer_dropout(params):
'''
Append dropout to custom network
Args:
params (dict): All layer parameters
Returns:
neural network layer: dropout layer
'''
rate=params["drop_probability"];
layer = keras.layers.Dropout(rate, noise_shape=None, seed=None);
return layer;
def custom_model_layer_identity(params):
'''
Append idenity to custom network
Args:
params (dict): All layer parameters
Returns:
neural network layer: idenity layer
'''
layer = keras.activations.linear;
return layer
def custom_model_layer_batch_normalization(params):
'''
Append batchnorm to custom network
Args:
params (dict): All layer parameters
Returns:
neural netwrk layer: batchnorm layer
'''
axis = -1;
momentum=params["moving_average_momentum"];
epsilon=params["epsilon"];
center=params["use_trainable_parameters"];
scale=params["use_trainable_parameters"];
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;
layer = keras.layers.BatchNormalization(axis=axis, momentum=momentum, epsilon=epsilon,
center=center, scale=scale, beta_initializer=beta_initializer,
gamma_initializer=gamma_initializer,
moving_mean_initializer=moving_mean_initializer,
moving_variance_initializer=moving_variance_initializer,
beta_regularizer=beta_regularizer, gamma_regularizer=gamma_regularizer,
beta_constraint=beta_constraint, gamma_constraint=gamma_constraint);
return layer;
def custom_model_activation_relu(params):
'''
Append relu to custom network
Args:
params (dict): All layer parameters
Returns:
neural network activation: relu activation
'''
layer = keras.layers.ReLU();
return layer
def custom_model_activation_softmax(params):
'''
Append sigmoid to custom network
Args:
params (dict): All layer parameters
Returns:
neural network activation: sigmoid activation
'''
axis = params["axis"];
layer = keras.layers.Softmax(axis=axis);
return layer
def custom_model_activation_thresholded_relu(params):
'''
Append thresholded-relu to custom network
Args:
params (dict): All layer parameters
Returns:
neural network activation: thresholded-reli activation
'''
threshold = params["threshold"];
layer = keras.layers.ThresholdedReLU(theta=threshold);
return layer
def custom_model_activation_elu(params):
'''
Append elu to custom network
Args:
params (dict): All layer parameters
Returns:
neural network activation: elu activation
'''
alpha = params["alpha"];
layer = keras.layers.ELU(alpha=alpha);
return layer
def custom_model_activation_prelu(params):
'''
Append prelu to custom network
Args:
params (dict): All layer parameters
Returns:
neural network activation: prelu activation
'''
layer = keras.layers.PReLU();
return layer
def custom_model_activation_leaky_relu(params):
'''
Append leaky-relu to custom network
Args:
params (dict): All layer parameters
Returns:
neural network activation: leaky-relu activation
'''
alpha = params["alpha"];
layer = keras.layers.LeakyReLU(alpha=alpha);
return layer
def custom_model_activation_selu(params):
'''
Append selu to custom network
Args:
params (dict): All layer parameters
Returns:
neural network activation: selu activation
'''
layer = keras.layers.Activation('selu');
return layer
def custom_model_activation_softplus(params):
'''
Append softplus to custom network
Args:
params (dict): All layer parameters
Returns:
neural network activation: softplus activation
'''
layer =keras.layers.Activation('softplus');
return layer
def custom_model_activation_softsign(params):
'''
Append softsign to custom network
Args:
params (dict): All layer parameters
Returns:
neural network activation: softsign activation
'''
layer = keras.layers.Activation('softsign');
return layer
def custom_model_activation_tanh(params):
'''
Append tanh to custom network
Args:
params (dict): All layer parameters
Returns:
neural network activation: tanh activation
'''
layer = keras.layers.Activation('tanh');
return layer
def custom_model_activation_sigmoid(params):
'''
Append sigmoid to custom network
Args:
params (dict): All layer parameters
Returns:
neural network activation: sigmoid activation
'''
layer = keras.layers.Activation('sigmoid');
return layer
def custom_model_activation_hard_sigmoid(params):
'''
Append hard-sigmoid to custom network
Args:
params (dict): All layer parameters
Returns:
neural network activation: hard-sigmoid activation
'''
layer = keras.layers.Activation('hard_sigmoid');
return layer
Functions
def activation_elu(system_dict, alpha=1.0, final_layer=False)
-
Append exponential linear unit activation to base network in transfer learning
Args
system_dict
:dict
- System dictionary storing experiment state and set variables
alpha
:float
- Multiplicatve factor.
final_layer
:bool
- Indicator that this layer marks the end of network.
Returns
dict
- updated system dict
Expand source code
def activation_elu(system_dict, alpha=1.0, final_layer=False): ''' Append exponential linear unit activation to base network in transfer learning Args: system_dict (dict): System dictionary storing experiment state and set variables alpha (float): Multiplicatve factor. final_layer (bool): Indicator that this layer marks the end of network. Returns: dict: updated system dict ''' tmp = {}; tmp["name"] = "elu"; tmp["params"] = {}; tmp["params"]["alpha"] = alpha; system_dict["model"]["custom_network"].append(tmp); system_dict["model"]["final_layer"] = final_layer; return system_dict;
def activation_leakyrelu(system_dict, negative_slope=0.01, final_layer=False)
-
Append Leaky - ReLU activation to base network in transfer learning
Args
system_dict
:dict
- System dictionary storing experiment state and set variables
negative_slope
:float
- Multiplicatve factor towards negative spectrum of real numbers.
final_layer
:bool
- Indicator that this layer marks the end of network.
Returns
dict
- updated system dict
Expand source code
def activation_leakyrelu(system_dict, negative_slope=0.01, final_layer=False): ''' Append Leaky - ReLU activation to base network in transfer learning Args: system_dict (dict): System dictionary storing experiment state and set variables negative_slope (float): Multiplicatve factor towards negative spectrum of real numbers. final_layer (bool): Indicator that this layer marks the end of network. Returns: dict: updated system dict ''' tmp = {}; tmp["name"] = "leakyrelu"; tmp["params"] = {}; tmp["params"]["negative_slope"] = negative_slope; system_dict["model"]["custom_network"].append(tmp); system_dict["model"]["final_layer"] = final_layer; return system_dict;
def activation_prelu(system_dict, num_parameters=1, init=0.25, final_layer=False)
-
Append Learnable parameterized rectified linear unit activation to base network in transfer learning
Args
system_dict
:dict
- System dictionary storing experiment state and set variables
init
:float
- Initialization value for multiplicatve factor towards negative spectrum of real numbers.
final_layer
:bool
- Indicator that this layer marks the end of network.
Returns
dict
- updated system dict
Expand source code
def activation_prelu(system_dict, num_parameters=1, init=0.25, final_layer=False): ''' Append Learnable parameterized rectified linear unit activation to base network in transfer learning Args: system_dict (dict): System dictionary storing experiment state and set variables init (float): Initialization value for multiplicatve factor towards negative spectrum of real numbers. final_layer (bool): Indicator that this layer marks the end of network. Returns: dict: updated system dict ''' tmp = {}; tmp["name"] = "prelu"; tmp["params"] = {}; tmp["params"]["num_parameters"] = num_parameters; tmp["params"]["init"] = init; system_dict["model"]["custom_network"].append(tmp); system_dict["model"]["final_layer"] = final_layer; return system_dict;
def activation_relu(system_dict, final_layer=False)
-
Append rectified linear unit activation to base network in transfer learning
Args
system_dict
:dict
- System dictionary storing experiment state and set variables
final_layer
:bool
- Indicator that this layer marks the end of network.
Returns
dict
- updated system dict
Expand source code
def activation_relu(system_dict, final_layer=False): ''' Append rectified linear unit activation to base network in transfer learning Args: system_dict (dict): System dictionary storing experiment state and set variables final_layer (bool): Indicator that this layer marks the end of network. Returns: dict: updated system dict ''' tmp = {}; tmp["name"] = "relu"; tmp["params"] = {}; system_dict["model"]["custom_network"].append(tmp); system_dict["model"]["final_layer"] = final_layer; return system_dict;
def activation_selu(system_dict, final_layer=False)
-
Append scaled exponential linear unit activation to base network in transfer learning
Args
system_dict
:dict
- System dictionary storing experiment state and set variables
final_layer
:bool
- Indicator that this layer marks the end of network.
Returns
dict
- updated system dict
Expand source code
def activation_selu(system_dict, final_layer=False): ''' Append scaled exponential linear unit activation to base network in transfer learning Args: system_dict (dict): System dictionary storing experiment state and set variables final_layer (bool): Indicator that this layer marks the end of network. Returns: dict: updated system dict ''' tmp = {}; tmp["name"] = "selu"; tmp["params"] = {}; system_dict["model"]["custom_network"].append(tmp); system_dict["model"]["final_layer"] = final_layer; return system_dict;
def activation_sigmoid(system_dict, final_layer=False)
-
Append sigmoid activation to base network in transfer learning
Args
system_dict
:dict
- System dictionary storing experiment state and set variables
final_layer
:bool
- Indicator that this layer marks the end of network.
Returns
dict
- updated system dict
Expand source code
def activation_sigmoid(system_dict, final_layer=False): ''' Append sigmoid activation to base network in transfer learning Args: system_dict (dict): System dictionary storing experiment state and set variables final_layer (bool): Indicator that this layer marks the end of network. Returns: dict: updated system dict ''' tmp = {}; tmp["name"] = "sigmoid"; tmp["params"] = {}; system_dict["model"]["custom_network"].append(tmp); system_dict["model"]["final_layer"] = final_layer; return system_dict;
def activation_softmax(system_dict, final_layer=False)
-
Append softmax activation to base network in transfer learning
Args
system_dict
:dict
- System dictionary storing experiment state and set variables
final_layer
:bool
- Indicator that this layer marks the end of network.
Returns
dict
- updated system dict
Expand source code
def activation_softmax(system_dict, final_layer=False): ''' Append softmax activation to base network in transfer learning Args: system_dict (dict): System dictionary storing experiment state and set variables final_layer (bool): Indicator that this layer marks the end of network. Returns: dict: updated system dict ''' tmp = {}; tmp["name"] = "softmax"; tmp["params"] = {}; system_dict["model"]["custom_network"].append(tmp); system_dict["model"]["final_layer"] = final_layer; return system_dict;
def activation_softplus(system_dict, beta=1, threshold=20, final_layer=False)
-
Append softplus activation to base network in transfer learning
Args
system_dict
:dict
- System dictionary storing experiment state and set variables
beta
:int
- Multiplicative factor
threshold
:int
- softplus (thresholded relu) limit
final_layer
:bool
- Indicator that this layer marks the end of network.
Returns
dict
- updated system dict
Expand source code
def activation_softplus(system_dict, beta=1, threshold=20, final_layer=False): ''' Append softplus activation to base network in transfer learning Args: system_dict (dict): System dictionary storing experiment state and set variables beta (int): Multiplicative factor threshold (int): softplus (thresholded relu) limit final_layer (bool): Indicator that this layer marks the end of network. Returns: dict: updated system dict ''' tmp = {}; tmp["name"] = "softplus"; tmp["params"] = {}; tmp["params"]["beta"] = beta; tmp["params"]["threshold"] = threshold; system_dict["model"]["custom_network"].append(tmp); system_dict["model"]["final_layer"] = final_layer; return system_dict;
def activation_softsign(system_dict, final_layer=False)
-
Append softsign activation to base network in transfer learning
Args
system_dict
:dict
- System dictionary storing experiment state and set variables
final_layer
:bool
- Indicator that this layer marks the end of network.
Returns
dict
- updated system dict
Expand source code
def activation_softsign(system_dict, final_layer=False): ''' Append softsign activation to base network in transfer learning Args: system_dict (dict): System dictionary storing experiment state and set variables final_layer (bool): Indicator that this layer marks the end of network. Returns: dict: updated system dict ''' tmp = {}; tmp["name"] = "softsign"; tmp["params"] = {}; system_dict["model"]["custom_network"].append(tmp); system_dict["model"]["final_layer"] = final_layer; return system_dict;
def activation_tanh(system_dict, final_layer=False)
-
Append tanh activation to base network in transfer learning
Args
system_dict
:dict
- System dictionary storing experiment state and set variables
final_layer
:bool
- Indicator that this layer marks the end of network.
Returns
dict
- updated system dict
Expand source code
def activation_tanh(system_dict, final_layer=False): ''' Append tanh activation to base network in transfer learning Args: system_dict (dict): System dictionary storing experiment state and set variables final_layer (bool): Indicator that this layer marks the end of network. Returns: dict: updated system dict ''' tmp = {}; tmp["name"] = "tanh"; tmp["params"] = {}; system_dict["model"]["custom_network"].append(tmp); system_dict["model"]["final_layer"] = final_layer; return system_dict;
def activation_threshold(system_dict, threshold, value, final_layer=False)
-
Append threshold activation to base network in transfer learning
Args
system_dict
:dict
- System dictionary storing experiment state and set variables
threshold
:float
- thereshold limit value
value
:float
- replacement value if input is off-limits
final_layer
:bool
- Indicator that this layer marks the end of network.
Returns
dict
- updated system dict
Expand source code
def activation_threshold(system_dict, threshold, value, final_layer=False): ''' Append threshold activation to base network in transfer learning Args: system_dict (dict): System dictionary storing experiment state and set variables threshold (float): thereshold limit value value (float): replacement value if input is off-limits final_layer (bool): Indicator that this layer marks the end of network. Returns: dict: updated system dict ''' tmp = {}; tmp["name"] = "threshold"; tmp["params"] = {}; tmp["params"]["value"] = value; tmp["params"]["threshold"] = threshold; system_dict["model"]["custom_network"].append(tmp); system_dict["model"]["final_layer"] = final_layer; return system_dict;
def custom_model_activation_elu(params)
-
Append elu to custom network
Args
params
:dict
- All layer parameters
Returns
neural
network
activation
:elu
activation
Expand source code
def custom_model_activation_elu(params): ''' Append elu to custom network Args: params (dict): All layer parameters Returns: neural network activation: elu activation ''' alpha = params["alpha"]; layer = keras.layers.ELU(alpha=alpha); return layer
def custom_model_activation_hard_sigmoid(params)
-
Append hard-sigmoid to custom network
Args
params
:dict
- All layer parameters
Returns
neural
network
activation
:hard
-sigmoid
activation
Expand source code
def custom_model_activation_hard_sigmoid(params): ''' Append hard-sigmoid to custom network Args: params (dict): All layer parameters Returns: neural network activation: hard-sigmoid activation ''' layer = keras.layers.Activation('hard_sigmoid'); return layer
def custom_model_activation_leaky_relu(params)
-
Append leaky-relu to custom network
Args
params
:dict
- All layer parameters
Returns
neural
network
activation
:leaky
-relu
activation
Expand source code
def custom_model_activation_leaky_relu(params): ''' Append leaky-relu to custom network Args: params (dict): All layer parameters Returns: neural network activation: leaky-relu activation ''' alpha = params["alpha"]; layer = keras.layers.LeakyReLU(alpha=alpha); return layer
def custom_model_activation_prelu(params)
-
Append prelu to custom network
Args
params
:dict
- All layer parameters
Returns
neural
network
activation
:prelu
activation
Expand source code
def custom_model_activation_prelu(params): ''' Append prelu to custom network Args: params (dict): All layer parameters Returns: neural network activation: prelu activation ''' layer = keras.layers.PReLU(); return layer
def custom_model_activation_relu(params)
-
Append relu to custom network
Args
params
:dict
- All layer parameters
Returns
neural
network
activation
:relu
activation
Expand source code
def custom_model_activation_relu(params): ''' Append relu to custom network Args: params (dict): All layer parameters Returns: neural network activation: relu activation ''' layer = keras.layers.ReLU(); return layer
def custom_model_activation_selu(params)
-
Append selu to custom network
Args
params
:dict
- All layer parameters
Returns
neural
network
activation
:selu
activation
Expand source code
def custom_model_activation_selu(params): ''' Append selu to custom network Args: params (dict): All layer parameters Returns: neural network activation: selu activation ''' layer = keras.layers.Activation('selu'); return layer
def custom_model_activation_sigmoid(params)
-
Append sigmoid to custom network
Args
params
:dict
- All layer parameters
Returns
neural
network
activation
:sigmoid
activation
Expand source code
def custom_model_activation_sigmoid(params): ''' Append sigmoid to custom network Args: params (dict): All layer parameters Returns: neural network activation: sigmoid activation ''' layer = keras.layers.Activation('sigmoid'); return layer
def custom_model_activation_softmax(params)
-
Append sigmoid to custom network
Args
params
:dict
- All layer parameters
Returns
neural
network
activation
:sigmoid
activation
Expand source code
def custom_model_activation_softmax(params): ''' Append sigmoid to custom network Args: params (dict): All layer parameters Returns: neural network activation: sigmoid activation ''' axis = params["axis"]; layer = keras.layers.Softmax(axis=axis); return layer
def custom_model_activation_softplus(params)
-
Append softplus to custom network
Args
params
:dict
- All layer parameters
Returns
neural
network
activation
:softplus
activation
Expand source code
def custom_model_activation_softplus(params): ''' Append softplus to custom network Args: params (dict): All layer parameters Returns: neural network activation: softplus activation ''' layer =keras.layers.Activation('softplus'); return layer
def custom_model_activation_softsign(params)
-
Append softsign to custom network
Args
params
:dict
- All layer parameters
Returns
neural
network
activation
:softsign
activation
Expand source code
def custom_model_activation_softsign(params): ''' Append softsign to custom network Args: params (dict): All layer parameters Returns: neural network activation: softsign activation ''' layer = keras.layers.Activation('softsign'); return layer
def custom_model_activation_tanh(params)
-
Append tanh to custom network
Args
params
:dict
- All layer parameters
Returns
neural
network
activation
:tanh
activation
Expand source code
def custom_model_activation_tanh(params): ''' Append tanh to custom network Args: params (dict): All layer parameters Returns: neural network activation: tanh activation ''' layer = keras.layers.Activation('tanh'); return layer
def custom_model_activation_thresholded_relu(params)
-
Append thresholded-relu to custom network
Args
params
:dict
- All layer parameters
Returns
neural
network
activation
:thresholded
-reli
activation
Expand source code
def custom_model_activation_thresholded_relu(params): ''' Append thresholded-relu to custom network Args: params (dict): All layer parameters Returns: neural network activation: thresholded-reli activation ''' threshold = params["threshold"]; layer = keras.layers.ThresholdedReLU(theta=threshold); return layer
def custom_model_get_layer(network_layer, network_initializer)
-
Get layer for custom network design
Args
network_layer
:dict
- Network layer as dict
network_initializer
:initialization
param
- Initializer for the layer
Returns
neural
network
layer
:Actual
layer
in
native
backend
library
Expand source code
def custom_model_get_layer(network_layer, network_initializer): ''' Get layer for custom network design Args: network_layer (dict): Network layer as dict network_initializer (initialization param): Initializer for the layer Returns: neural network layer: Actual layer in native backend library ''' layer_name = network_layer["name"]; layer_params = network_layer["params"]; if(layer_name == "convolution1d"): return custom_model_layer_convolution1d(layer_params, network_initializer); elif(layer_name == "convolution2d"): return custom_model_layer_convolution2d(layer_params, network_initializer); elif(layer_name == "convolution3d"): return custom_model_layer_convolution3d(layer_params, network_initializer); elif(layer_name == "transposed_convolution2d"): return custom_model_layer_transposed_convolution2d(layer_params, network_initializer); elif(layer_name == "transposed_convolution3d"): return custom_model_layer_transposed_convolution3d(layer_params, network_initializer); elif(layer_name == "max_pooling1d"): return custom_model_layer_max_pooling1d(layer_params); elif(layer_name == "max_pooling2d"): return custom_model_layer_max_pooling2d(layer_params); elif(layer_name == "max_pooling3d"): return custom_model_layer_max_pooling3d(layer_params); elif(layer_name == "average_pooling1d"): return custom_model_layer_average_pooling1d(layer_params); elif(layer_name == "average_pooling2d"): return custom_model_layer_average_pooling2d(layer_params); elif(layer_name == "average_pooling3d"): return custom_model_layer_average_pooling3d(layer_params); elif(layer_name == "global_max_pooling1d"): return custom_model_layer_global_max_pooling1d(layer_params); elif(layer_name == "global_max_pooling2d"): return custom_model_layer_global_max_pooling2d(layer_params); elif(layer_name == "global_max_pooling3d"): return custom_model_layer_global_max_pooling3d(layer_params); elif(layer_name == "global_average_pooling1d"): return custom_model_layer_global_average_pooling1d(layer_params); elif(layer_name == "global_average_pooling2d"): return custom_model_layer_global_average_pooling2d(layer_params); elif(layer_name == "global_average_pooling3d"): return custom_model_layer_global_average_pooling3d(layer_params); elif(layer_name == "flatten"): return custom_model_layer_flatten(layer_params); elif(layer_name == "fully_connected"): return custom_model_layer_fully_connected(layer_params, network_initializer); elif(layer_name == "dropout"): return custom_model_layer_dropout(layer_params); elif(layer_name == "identity"): return custom_model_layer_identity(layer_params); elif(layer_name == "batch_normalization"): return custom_model_layer_batch_normalization(layer_params); elif(layer_name == "relu"): return custom_model_activation_relu(layer_params); elif(layer_name == "softmax"): return custom_model_activation_softmax(layer_params); elif(layer_name == "thresholded_relu"): return custom_model_activation_thresholded_relu(layer_params); elif(layer_name == "elu"): return custom_model_activation_elu(layer_params); elif(layer_name == "prelu"): return custom_model_activation_prelu(layer_params); elif(layer_name == "leaky_relu"): return custom_model_activation_leaky_relu(layer_params); elif(layer_name == "selu"): return custom_model_activation_selu(layer_params); elif(layer_name == "softplus"): return custom_model_activation_softplus(layer_params); elif(layer_name == "softsign"): return custom_model_activation_softsign(layer_params); elif(layer_name == "tanh"): return custom_model_activation_tanh(layer_params); elif(layer_name == "sigmoid"): return custom_model_activation_sigmoid(layer_params); elif(layer_name == "hard_sigmoid"): return custom_model_activation_hard_sigmoid(layer_params);
def custom_model_layer_average_pooling1d(params)
-
Append 1d-average-pooling to custom network
Args
params
:dict
- All layer parameters
Returns
neural
network
layer
:1d
-average
-pooling
layer
Expand source code
def custom_model_layer_average_pooling1d(params): ''' Append 1d-average-pooling to custom network Args: params (dict): All layer parameters Returns: neural network layer: 1d-average-pooling layer ''' pool_size=params["kernel_size"]; strides=params["stride"]; if(params["padding"] == "in_eq_out"): padding = "same"; elif(params["padding"] == 0): padding = "valid"; else: padding = "causal"; if(params["layout"][-1] == "C"): data_format='channels_last'; else: data_format='channels_first'; layer = keras.layers.AveragePooling1D(pool_size=pool_size, strides=strides, padding=padding, data_format=data_format) return layer
def custom_model_layer_average_pooling2d(params)
-
Append 2d-average-pooling to custom network
Args
params
:dict
- All layer parameters
Returns
neural
network
layer
:2d
-average
-pooling
layer
Expand source code
def custom_model_layer_average_pooling2d(params): ''' Append 2d-average-pooling to custom network Args: params (dict): All layer parameters Returns: neural network layer: 2d-average-pooling layer ''' pool_size=params["kernel_size"]; strides=params["stride"]; if(params["padding"] == "in_eq_out"): padding = "same"; elif(params["padding"] == 0): padding = "valid"; else: padding = "causal"; if(params["layout"][-1] == "C"): data_format='channels_last'; else: data_format='channels_first'; layer = keras.layers.AveragePooling2D(pool_size=pool_size, strides=strides, padding=padding, data_format=data_format) return layer
def custom_model_layer_average_pooling3d(params)
-
Append 3d-average-pooling to custom network
Args
params
:dict
- All layer parameters
Returns
neural
network
layer
:3d
-average
-pooling
layer
Expand source code
def custom_model_layer_average_pooling3d(params): ''' Append 3d-average-pooling to custom network Args: params (dict): All layer parameters Returns: neural network layer: 3d-average-pooling layer ''' pool_size=params["kernel_size"]; strides=params["stride"]; if(params["padding"] == "in_eq_out"): padding = "same"; elif(params["padding"] == 0): padding = "valid"; else: padding = "causal"; if(params["layout"][-1] == "C"): data_format='channels_last'; else: data_format='channels_first'; layer = keras.layers.AveragePooling3D(pool_size=pool_size, strides=strides, padding=padding, data_format=data_format) return layer
def custom_model_layer_batch_normalization(params)
-
Append batchnorm to custom network
Args
params
:dict
- All layer parameters
Returns
neural
netwrk
layer
:batchnorm
layer
Expand source code
def custom_model_layer_batch_normalization(params): ''' Append batchnorm to custom network Args: params (dict): All layer parameters Returns: neural netwrk layer: batchnorm layer ''' axis = -1; momentum=params["moving_average_momentum"]; epsilon=params["epsilon"]; center=params["use_trainable_parameters"]; scale=params["use_trainable_parameters"]; 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; layer = keras.layers.BatchNormalization(axis=axis, momentum=momentum, epsilon=epsilon, center=center, scale=scale, beta_initializer=beta_initializer, gamma_initializer=gamma_initializer, moving_mean_initializer=moving_mean_initializer, moving_variance_initializer=moving_variance_initializer, beta_regularizer=beta_regularizer, gamma_regularizer=gamma_regularizer, beta_constraint=beta_constraint, gamma_constraint=gamma_constraint); return layer;
def custom_model_layer_convolution1d(params, network_initializer)
-
Append 1d-convolution to custom network
Args
params
:dict
- All layer parameters
Returns
neural
network
layer
:1d
-convolution
layer
Expand source code
def custom_model_layer_convolution1d(params, network_initializer): ''' Append 1d-convolution to custom network Args: params (dict): All layer parameters Returns: neural network layer: 1d-convolution layer ''' out_channels = params["output_channels"]; kernel_size=params["kernel_size"]; strides=params["stride"]; if(params["padding"] == "in_eq_out"): padding = "same"; elif(params["padding"] == 0): padding = "valid"; else: padding = "same"; #causal if(params["layout"][-1] == "C"): data_format='channels_last'; else: data_format='channels_first'; dilation_rate=params["dilation"]; activation=None; use_bias = params["use_bias"]; kernel_initializer=get_initializer(network_initializer) bias_initializer='zeros'; kernel_regularizer=None; bias_regularizer=None; activity_regularizer=None; kernel_constraint=None; bias_constraint=None; layer = keras.layers.Conv1D(out_channels, kernel_size, strides=strides, padding=padding, data_format=data_format, dilation_rate=dilation_rate, activation=activation, use_bias=use_bias, kernel_initializer=kernel_initializer, bias_initializer=bias_initializer, kernel_regularizer=kernel_regularizer, bias_regularizer=bias_regularizer, activity_regularizer=activity_regularizer, kernel_constraint=kernel_constraint, bias_constraint=bias_constraint) return layer
def custom_model_layer_convolution2d(params, network_initializer)
-
Append 2d-convolution to custom network
Args
params
:dict
- All layer parameters
Returns
neural
network
layer
:2d
-convolution
layer
Expand source code
def custom_model_layer_convolution2d(params, network_initializer): ''' Append 2d-convolution to custom network Args: params (dict): All layer parameters Returns: neural network layer: 2d-convolution layer ''' out_channels = params["output_channels"]; kernel_size=params["kernel_size"]; strides=params["stride"]; if(params["padding"] == "in_eq_out"): padding = "same"; elif(params["padding"] == 0): padding = "valid"; else: padding = "causal"; #causal if(params["layout"][-1] == "C"): data_format='channels_last'; else: data_format='channels_first'; dilation_rate=params["dilation"]; activation=None; use_bias = params["use_bias"]; kernel_initializer=get_initializer(network_initializer); bias_initializer='zeros'; kernel_regularizer=None; bias_regularizer=None; activity_regularizer=None; kernel_constraint=None; bias_constraint=None; layer = keras.layers.Conv2D(out_channels, kernel_size, strides=strides, padding=padding, data_format=data_format, dilation_rate=dilation_rate, activation=activation, use_bias=use_bias, kernel_initializer=kernel_initializer, bias_initializer=bias_initializer, kernel_regularizer=kernel_regularizer, bias_regularizer=bias_regularizer, activity_regularizer=activity_regularizer, kernel_constraint=kernel_constraint, bias_constraint=bias_constraint) return layer
def custom_model_layer_convolution3d(params, network_initializer)
-
Append 3d-convolution to custom network
Args
params
:dict
- All layer parameters
Returns
neural
network
layer
:3d
-convolution
layer
Expand source code
def custom_model_layer_convolution3d(params, network_initializer): ''' Append 3d-convolution to custom network Args: params (dict): All layer parameters Returns: neural network layer: 3d-convolution layer ''' out_channels = params["output_channels"]; kernel_size=params["kernel_size"]; strides=params["stride"]; if(params["padding"] == "in_eq_out"): padding = "same"; elif(params["padding"] == 0): padding = "valid"; else: padding = "same"; #causal if(params["layout"][-1] == "C"): data_format='channels_last'; else: data_format='channels_first'; dilation_rate=params["dilation"]; activation=None; use_bias = params["use_bias"]; kernel_initializer=get_initializer(network_initializer); bias_initializer='zeros'; kernel_regularizer=None; bias_regularizer=None; activity_regularizer=None; kernel_constraint=None; bias_constraint=None; layer = keras.layers.Conv3D(out_channels, kernel_size, strides=strides, padding=padding, data_format=data_format, dilation_rate=dilation_rate, activation=activation, use_bias=use_bias, kernel_initializer=kernel_initializer, bias_initializer=bias_initializer, kernel_regularizer=kernel_regularizer, bias_regularizer=bias_regularizer, activity_regularizer=activity_regularizer, kernel_constraint=kernel_constraint, bias_constraint=bias_constraint) return layer
def custom_model_layer_dropout(params)
-
Append dropout to custom network
Args
params
:dict
- All layer parameters
Returns
neural
network
layer
:dropout
layer
Expand source code
def custom_model_layer_dropout(params): ''' Append dropout to custom network Args: params (dict): All layer parameters Returns: neural network layer: dropout layer ''' rate=params["drop_probability"]; layer = keras.layers.Dropout(rate, noise_shape=None, seed=None); return layer;
def custom_model_layer_flatten(params)
-
Append flatten to custom network
Args
params
:dict
- All layer parameters
Returns
neural
network
layer
:flatten
layer
Expand source code
def custom_model_layer_flatten(params): ''' Append flatten to custom network Args: params (dict): All layer parameters Returns: neural network layer: flatten layer ''' if(params["layout"][-1] == "C"): data_format='channels_last'; else: data_format='channels_first'; layer = keras.layers.Flatten(data_format=data_format); return layer;
def custom_model_layer_fully_connected(params, network_initializer)
-
Append fc (dense) to custom network
Args
params
:dict
- All layer parameters
Returns
neural
network
layer
:fc
(dense
)layer
Expand source code
def custom_model_layer_fully_connected(params, network_initializer): ''' Append fc (dense) to custom network Args: params (dict): All layer parameters Returns: neural network layer: fc (dense) layer ''' units=params["units"]; activation=None; use_bias = params["use_bias"]; kernel_initializer=get_initializer(network_initializer); bias_initializer='zeros'; kernel_regularizer=None; bias_regularizer=None; activity_regularizer=None; kernel_constraint=None; bias_constraint=None; layer = keras.layers.Dense(units, activation=activation, use_bias=use_bias, kernel_initializer=kernel_initializer, bias_initializer=bias_initializer, kernel_regularizer=kernel_regularizer, bias_regularizer=bias_regularizer, activity_regularizer=activity_regularizer, kernel_constraint=kernel_constraint, bias_constraint=bias_constraint) return layer
def custom_model_layer_global_average_pooling1d(params)
-
Append 1d-global-average-pooling to custom network
Args
params
:dict
- All layer parameters
Returns
neural
network
layer
:1d
-global
-average
-pooling
layer
Expand source code
def custom_model_layer_global_average_pooling1d(params): ''' Append 1d-global-average-pooling to custom network Args: params (dict): All layer parameters Returns: neural network layer: 1d-global-average-pooling layer ''' if(params["layout"][-1] == "C"): data_format='channels_last'; else: data_format='channels_first'; layer = keras.layers.GlobalAveragePooling1D(data_format=data_format); return layer
def custom_model_layer_global_average_pooling2d(params)
-
Append 2d-global-average-pooling to custom network
Args
params
:dict
- All layer parameters
Returns
neural
network
layer
:2d
-global
-average
-pooling
layer
Expand source code
def custom_model_layer_global_average_pooling2d(params): ''' Append 2d-global-average-pooling to custom network Args: params (dict): All layer parameters Returns: neural network layer: 2d-global-average-pooling layer ''' if(params["layout"][-1] == "C"): data_format='channels_last'; else: data_format='channels_first'; layer = keras.layers.GlobalAveragePooling2D(data_format=data_format); return layer
def custom_model_layer_global_average_pooling3d(params)
-
Append 3d-global-average-pooling to custom network
Args
params
:dict
- All layer parameters
Returns
neural
network
layer
:3d
-global
-average
-pooling
layer
Expand source code
def custom_model_layer_global_average_pooling3d(params): ''' Append 3d-global-average-pooling to custom network Args: params (dict): All layer parameters Returns: neural network layer: 3d-global-average-pooling layer ''' if(params["layout"][-1] == "C"): data_format='channels_last'; else: data_format='channels_first'; layer = keras.layers.GlobalAveragePooling3D(data_format=data_format); return layer
def custom_model_layer_global_max_pooling1d(params)
-
Append 1d-global-max-pooling to custom network
Args
params
:dict
- All layer parameters
Returns
neural
network
layer
:1d
-global
-max
-pooling
layer
Expand source code
def custom_model_layer_global_max_pooling1d(params): ''' Append 1d-global-max-pooling to custom network Args: params (dict): All layer parameters Returns: neural network layer: 1d-global-max-pooling layer ''' if(params["layout"][-1] == "C"): data_format='channels_last'; else: data_format='channels_first'; layer = keras.layers.GlobalMaxPooling1D(data_format=data_format); return layer
def custom_model_layer_global_max_pooling2d(params)
-
Append 2d-global-max-pooling to custom network
Args
params
:dict
- All layer parameters
Returns
neural
network
layer
:2d
-global
-max
-pooling
layer
Expand source code
def custom_model_layer_global_max_pooling2d(params): ''' Append 2d-global-max-pooling to custom network Args: params (dict): All layer parameters Returns: neural network layer: 2d-global-max-pooling layer ''' if(params["layout"][-1] == "C"): data_format='channels_last'; else: data_format='channels_first'; layer = keras.layers.GlobalMaxPooling2D(data_format=data_format); return layer
def custom_model_layer_global_max_pooling3d(params)
-
Append 3d-global-max-pooling to custom network
Args
params
:dict
- All layer parameters
Returns
neural
network
layer
:3d
-global
-max
-pooling
layer
Expand source code
def custom_model_layer_global_max_pooling3d(params): ''' Append 3d-global-max-pooling to custom network Args: params (dict): All layer parameters Returns: neural network layer: 3d-global-max-pooling layer ''' if(params["layout"][-1] == "C"): data_format='channels_last'; else: data_format='channels_first'; layer = keras.layers.GlobalMaxPooling3D(data_format=data_format); return layer
def custom_model_layer_identity(params)
-
Append idenity to custom network
Args
params
:dict
- All layer parameters
Returns
neural
network
layer
:idenity
layer
Expand source code
def custom_model_layer_identity(params): ''' Append idenity to custom network Args: params (dict): All layer parameters Returns: neural network layer: idenity layer ''' layer = keras.activations.linear; return layer
def custom_model_layer_max_pooling1d(params)
-
Append 1d-max-pooling to custom network
Args
params
:dict
- All layer parameters
Returns
neural
network
layer
:1d
-max
-pooling
layer
Expand source code
def custom_model_layer_max_pooling1d(params): ''' Append 1d-max-pooling to custom network Args: params (dict): All layer parameters Returns: neural network layer: 1d-max-pooling layer ''' pool_size=params["kernel_size"]; strides=params["stride"]; if(params["padding"] == "in_eq_out"): padding = "same"; elif(params["padding"] == 0): padding = "valid"; else: padding = "causal"; if(params["layout"][-1] == "C"): data_format='channels_last'; else: data_format='channels_first'; layer = keras.layers.MaxPooling1D(pool_size=pool_size, strides=strides, padding=padding, data_format=data_format) return layer
def custom_model_layer_max_pooling2d(params)
-
Append 2d-max-pooling to custom network
Args
params
:dict
- All layer parameters
Returns
neural
network
layer
:2d
-max
-pooling
layer
Expand source code
def custom_model_layer_max_pooling2d(params): ''' Append 2d-max-pooling to custom network Args: params (dict): All layer parameters Returns: neural network layer: 2d-max-pooling layer ''' pool_size=params["kernel_size"]; strides=params["stride"]; if(params["padding"] == "in_eq_out"): padding = "same"; elif(params["padding"] == 0): padding = "valid"; else: padding = "causal"; if(params["layout"][-1] == "C"): data_format='channels_last'; else: data_format='channels_first'; layer = keras.layers.MaxPooling2D(pool_size=pool_size, strides=strides, padding=padding, data_format=data_format) return layer
def custom_model_layer_max_pooling3d(params)
-
Append 3d-max-pooling to custom network
Args
params
:dict
- All layer parameters
Returns
neural
network
layer
:3d
-max
-pooling
layer
Expand source code
def custom_model_layer_max_pooling3d(params): ''' Append 3d-max-pooling to custom network Args: params (dict): All layer parameters Returns: neural network layer: 3d-max-pooling layer ''' pool_size=params["kernel_size"]; strides=params["stride"]; if(params["padding"] == "in_eq_out"): padding = "same"; elif(params["padding"] == 0): padding = "valid"; else: padding = "causal"; if(params["layout"][-1] == "C"): data_format='channels_last'; else: data_format='channels_first'; layer = keras.layers.MaxPooling3D(pool_size=pool_size, strides=strides, padding=padding, data_format=data_format) return layer
def custom_model_layer_transposed_convolution2d(params, network_initializer)
-
Append 2d-transposed-convolution to custom network
Args
params
:dict
- All layer parameters
Returns
neural
network
layer
:2d
-transposed
-convolution
layer
Expand source code
def custom_model_layer_transposed_convolution2d(params, network_initializer): ''' Append 2d-transposed-convolution to custom network Args: params (dict): All layer parameters Returns: neural network layer: 2d-transposed-convolution layer ''' out_channels = params["output_channels"]; kernel_size=params["kernel_size"]; strides=params["stride"]; if(params["padding"] == "in_eq_out"): padding = "same"; elif(params["padding"] == 0): padding = "valid"; else: padding = "causal"; if(params["layout"][-1] == "C"): data_format='channels_last'; else: data_format='channels_first'; dilation_rate=params["dilation"]; activation=None; use_bias = params["use_bias"]; kernel_initializer=get_initializer(network_initializer); bias_initializer='zeros'; kernel_regularizer=None; bias_regularizer=None; activity_regularizer=None; kernel_constraint=None; bias_constraint=None; layer = keras.layers.Conv2DTranspose(out_channels, kernel_size, strides=strides, padding=padding, data_format=data_format, dilation_rate=dilation_rate, activation=activation, use_bias=use_bias, kernel_initializer=kernel_initializer, bias_initializer=bias_initializer, kernel_regularizer=kernel_regularizer, bias_regularizer=bias_regularizer, activity_regularizer=activity_regularizer, kernel_constraint=kernel_constraint, bias_constraint=bias_constraint) return layer
def custom_model_layer_transposed_convolution3d(params, network_initializer)
-
Append 3d-transposed-convolution to custom network
Args
params
:dict
- All layer parameters
Returns
neural
network
layer
:3d
-transposed
-convolution
layer
Expand source code
def custom_model_layer_transposed_convolution3d(params, network_initializer): ''' Append 3d-transposed-convolution to custom network Args: params (dict): All layer parameters Returns: neural network layer: 3d-transposed-convolution layer ''' out_channels = params["output_channels"]; kernel_size=params["kernel_size"]; strides=params["stride"]; if(params["padding"] == "in_eq_out"): padding = "same"; elif(params["padding"] == 0): padding = "valid"; else: padding = "causal"; if(params["layout"][-1] == "C"): data_format='channels_last'; else: data_format='channels_first'; dilation_rate=params["dilation"]; activation=None; use_bias = params["use_bias"]; kernel_initializer=get_initializer(network_initializer); bias_initializer='zeros'; kernel_regularizer=None; bias_regularizer=None; activity_regularizer=None; kernel_constraint=None; bias_constraint=None; layer = keras.layers.Conv3DTranspose(out_channels, kernel_size, strides=strides, padding=padding, data_format=data_format, dilation_rate=dilation_rate, activation=activation, use_bias=use_bias, kernel_initializer=kernel_initializer, bias_initializer=bias_initializer, kernel_regularizer=kernel_regularizer, bias_regularizer=bias_regularizer, activity_regularizer=activity_regularizer, kernel_constraint=kernel_constraint, bias_constraint=bias_constraint) return layer
def get_layer(network_layer, inp)
-
Get layer for appending it to transfer learning base model
Args
network_layer
:dict
- Dictionary conatining all params relating to the layer
inp
:keras
placeholder
- Placeholder input for the layer
Returns
Keras
placeholder
:Placeholder
output
from
the
layer
Expand source code
def get_layer(network_layer, inp): ''' Get layer for appending it to transfer learning base model Args: network_layer (dict): Dictionary conatining all params relating to the layer inp (keras placeholder): Placeholder input for the layer Returns: Keras placeholder: Placeholder output from the layer ''' layer_name = network_layer["name"]; layer_params = network_layer["params"]; if(layer_name == "linear"): out = krl.Dense(layer_params["out_features"])(inp) elif(layer_name == "dropout"): out = krl.Dropout(rate=1-layer_params["p"])(inp) elif(layer_name == "globalaveragepooling"): out = krl.GlobalAveragePooling2D()(inp); elif(layer_name == "flatten"): out = krl.Flatten()(inp); elif(layer_name == "elu"): out = krl.ELU(alpha=layer_params["alpha"])(inp); elif(layer_name == "leakyrelu"): out = krl.LeakyReLU(alpha=layer_params["alpha"])(inp); elif(layer_name == "prelu"): init = kri.Constant(value=layer_params["init"]) out = krl.PReLU(alpha_initializer=init)(inp); elif(layer_name == "relu"): out = krl.ReLU()(inp); elif(layer_name == "selu"): out = krl.selu(inp); elif(layer_name == "sigmoid"): out = krl.sigmoid(inp); elif(layer_name == "softplus"): out = krl.softplus(inp); elif(layer_name == "softsign"): out = krl.softsign(inp); elif(layer_name == "tanh"): out = krl.tanh(inp); elif(layer_name == "threshold"): out = krl.ThresholdedReLU(theta=layer_params["threshold"])(inp); elif(layer_name == "softmax"): out = krl.Softmax()(inp); return out;
def layer_dropout(system_dict, probability=0.5, final_layer=False)
-
Append dropout layer to base network in transfer learning
Args
system_dict
:dict
- System dictionary storing experiment state and set variables
probability
:float
- Droping probability of neurons in next layer
final_layer
:bool
- Indicator that this layer marks the end of network.
Returns
dict
- updated system dict
Expand source code
def layer_dropout(system_dict, probability=0.5, final_layer=False): ''' Append dropout layer to base network in transfer learning Args: system_dict (dict): System dictionary storing experiment state and set variables probability (float): Droping probability of neurons in next layer final_layer (bool): Indicator that this layer marks the end of network. Returns: dict: updated system dict ''' tmp = {}; tmp["name"] = "dropout"; tmp["params"] = {}; tmp["params"]["p"] = probability; system_dict["model"]["custom_network"].append(tmp); system_dict["model"]["final_layer"] = final_layer; return system_dict;
def layer_flatten(system_dict, final_layer=False)
-
Append flatten layer to base network in transfer learning
Args
system_dict
:dict
- System dictionary storing experiment state and set variables
final_layer
:bool
- Indicator that this layer marks the end of network.
Returns
dict
- updated system dict
Expand source code
def layer_flatten(system_dict, final_layer=False): ''' Append flatten layer to base network in transfer learning Args: system_dict (dict): System dictionary storing experiment state and set variables final_layer (bool): Indicator that this layer marks the end of network. Returns: dict: updated system dict ''' tmp = {}; tmp["name"] = "flatten"; tmp["params"] = {}; system_dict["model"]["custom_network"].append(tmp); system_dict["model"]["final_layer"] = final_layer; return system_dict;
def layer_globalaveragepooling(system_dict, final_layer=False)
-
Append global average pooling layer to base network in transfer learning
Args
system_dict
:dict
- System dictionary storing experiment state and set variables
final_layer
:bool
- Indicator that this layer marks the end of network.
Returns
dict
- updated system dict
Expand source code
def layer_globalaveragepooling(system_dict, final_layer=False): ''' Append global average pooling layer to base network in transfer learning Args: system_dict (dict): System dictionary storing experiment state and set variables final_layer (bool): Indicator that this layer marks the end of network. Returns: dict: updated system dict ''' tmp = {}; tmp["name"] = "globalaveragepooling"; tmp["params"] = {}; system_dict["model"]["custom_network"].append(tmp); system_dict["model"]["final_layer"] = final_layer; return system_dict;
def layer_linear(system_dict, num_neurons=512, final_layer=False)
-
Append dense (fully connected) layer to base network in transfer learning
Args
system_dict
:dict
- System dictionary storing experiment state and set variables
num_neurons
:int
- Number of neurons in the dense layer
final_layer
:bool
- If True, then number of neurons are directly set as number of classes in dataset for single label type classification
Returns
dict
- updated system dict
Expand source code
def layer_linear(system_dict, num_neurons=512, final_layer=False): ''' Append dense (fully connected) layer to base network in transfer learning Args: system_dict (dict): System dictionary storing experiment state and set variables num_neurons (int): Number of neurons in the dense layer final_layer (bool): If True, then number of neurons are directly set as number of classes in dataset for single label type classification Returns: dict: updated system dict ''' tmp = {}; tmp["name"] = "linear"; tmp["params"] = {}; tmp["params"]["out_features"] = num_neurons; system_dict["model"]["custom_network"].append(tmp); system_dict["model"]["final_layer"] = final_layer; return system_dict;