{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://schema.rtemis.org/hyperparameters/tabnet/v1/schema.json",
  "title": "rtemis TabNetHyperparameters",
  "description": "TabNet neural network. See `setup_TabNet`.",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "batch_size": {
      "oneOf": [
        {
          "type": "integer",
          "minimum": 1
        },
        {
          "type": "array",
          "items": {
            "type": "integer",
            "minimum": 1
          },
          "minItems": 1,
          "description": "Tuning search values."
        }
      ],
      "default": 1048576,
      "description": "Batch size."
    },
    "penalty": {
      "oneOf": [
        {
          "type": "number",
          "minimum": 0
        },
        {
          "type": "array",
          "items": {
            "type": "number",
            "minimum": 0
          },
          "minItems": 1,
          "description": "Tuning search values."
        }
      ],
      "default": 0.001,
      "description": "Sparsity regularization penalty."
    },
    "clip_value": {
      "oneOf": [
        {
          "type": "null"
        },
        {
          "type": "number"
        },
        {
          "type": "array",
          "items": {
            "type": "number"
          },
          "minItems": 1,
          "description": "Tuning search values."
        }
      ],
      "default": null,
      "description": "Gradient clip value."
    },
    "loss": {
      "oneOf": [
        {
          "type": "string"
        },
        {
          "type": "array",
          "items": {
            "type": "string"
          },
          "minItems": 1,
          "description": "Tuning search values."
        }
      ],
      "default": "auto",
      "description": "Loss function. auto = set from outcome type."
    },
    "epochs": {
      "oneOf": [
        {
          "type": "integer",
          "minimum": 1
        },
        {
          "type": "array",
          "items": {
            "type": "integer",
            "minimum": 1
          },
          "minItems": 1,
          "description": "Tuning search values."
        }
      ],
      "default": 50,
      "description": "Number of training epochs."
    },
    "drop_last": {
      "oneOf": [
        {
          "type": "boolean"
        },
        {
          "type": "array",
          "items": {
            "type": "boolean"
          },
          "minItems": 1,
          "description": "Tuning search values."
        }
      ],
      "default": false,
      "description": "Drop the last incomplete batch."
    },
    "decision_width": {
      "oneOf": [
        {
          "type": "null"
        },
        {
          "type": "integer",
          "minimum": 1
        },
        {
          "type": "array",
          "items": {
            "type": "integer",
            "minimum": 1
          },
          "minItems": 1,
          "description": "Tuning search values."
        }
      ],
      "default": null,
      "description": "Decision prediction layer width."
    },
    "attention_width": {
      "oneOf": [
        {
          "type": "null"
        },
        {
          "type": "integer",
          "minimum": 1
        },
        {
          "type": "array",
          "items": {
            "type": "integer",
            "minimum": 1
          },
          "minItems": 1,
          "description": "Tuning search values."
        }
      ],
      "default": null,
      "description": "Attention embedding width."
    },
    "num_steps": {
      "oneOf": [
        {
          "type": "integer",
          "minimum": 1
        },
        {
          "type": "array",
          "items": {
            "type": "integer",
            "minimum": 1
          },
          "minItems": 1,
          "description": "Tuning search values."
        }
      ],
      "default": 3,
      "description": "Number of decision steps."
    },
    "feature_reusage": {
      "oneOf": [
        {
          "type": "number",
          "minimum": 0
        },
        {
          "type": "array",
          "items": {
            "type": "number",
            "minimum": 0
          },
          "minItems": 1,
          "description": "Tuning search values."
        }
      ],
      "default": 1.3,
      "description": "Feature reusage coefficient."
    },
    "mask_type": {
      "oneOf": [
        {
          "type": "string",
          "enum": ["sparsemax", "entmax"]
        },
        {
          "type": "array",
          "items": {
            "type": "string",
            "enum": ["sparsemax", "entmax"]
          },
          "minItems": 1,
          "description": "Tuning search values."
        }
      ],
      "default": "sparsemax",
      "description": "Masking function."
    },
    "virtual_batch_size": {
      "oneOf": [
        {
          "type": "integer",
          "minimum": 1
        },
        {
          "type": "array",
          "items": {
            "type": "integer",
            "minimum": 1
          },
          "minItems": 1,
          "description": "Tuning search values."
        }
      ],
      "default": 65536,
      "description": "Virtual batch size (ghost batch normalization)."
    },
    "valid_split": {
      "oneOf": [
        {
          "type": "number",
          "minimum": 0,
          "exclusiveMaximum": 1
        },
        {
          "type": "array",
          "items": {
            "type": "number",
            "minimum": 0,
            "exclusiveMaximum": 1
          },
          "minItems": 1,
          "description": "Tuning search values."
        }
      ],
      "default": 0,
      "description": "Fraction of data used for (tabnet-internal) validation."
    },
    "learn_rate": {
      "oneOf": [
        {
          "type": "number",
          "exclusiveMinimum": 0
        },
        {
          "type": "array",
          "items": {
            "type": "number",
            "exclusiveMinimum": 0
          },
          "minItems": 1,
          "description": "Tuning search values."
        }
      ],
      "default": 0.02,
      "description": "Learning rate."
    },
    "lr_decay": {
      "oneOf": [
        {
          "type": "number",
          "minimum": 0,
          "maximum": 1
        },
        {
          "type": "array",
          "items": {
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "minItems": 1,
          "description": "Tuning search values."
        }
      ],
      "default": 0.1,
      "description": "Learning rate decay."
    },
    "step_size": {
      "oneOf": [
        {
          "type": "integer",
          "minimum": 1
        },
        {
          "type": "array",
          "items": {
            "type": "integer",
            "minimum": 1
          },
          "minItems": 1,
          "description": "Tuning search values."
        }
      ],
      "default": 30,
      "description": "Learning rate scheduler step size."
    },
    "checkpoint_epochs": {
      "oneOf": [
        {
          "type": "integer",
          "minimum": 1
        },
        {
          "type": "array",
          "items": {
            "type": "integer",
            "minimum": 1
          },
          "minItems": 1,
          "description": "Tuning search values."
        }
      ],
      "default": 10,
      "description": "Checkpoint interval in epochs."
    },
    "cat_emb_dim": {
      "oneOf": [
        {
          "type": "integer",
          "minimum": 1
        },
        {
          "type": "array",
          "items": {
            "type": "integer",
            "minimum": 1
          },
          "minItems": 1,
          "description": "Tuning search values."
        }
      ],
      "default": 1,
      "description": "Categorical embedding dimension."
    },
    "num_independent": {
      "oneOf": [
        {
          "type": "integer",
          "minimum": 1
        },
        {
          "type": "array",
          "items": {
            "type": "integer",
            "minimum": 1
          },
          "minItems": 1,
          "description": "Tuning search values."
        }
      ],
      "default": 2,
      "description": "Number of independent GLU layers at each encoder step."
    },
    "num_shared": {
      "oneOf": [
        {
          "type": "integer",
          "minimum": 1
        },
        {
          "type": "array",
          "items": {
            "type": "integer",
            "minimum": 1
          },
          "minItems": 1,
          "description": "Tuning search values."
        }
      ],
      "default": 2,
      "description": "Number of shared GLU layers at each encoder step."
    },
    "num_independent_decoder": {
      "oneOf": [
        {
          "type": "integer",
          "minimum": 1
        },
        {
          "type": "array",
          "items": {
            "type": "integer",
            "minimum": 1
          },
          "minItems": 1,
          "description": "Tuning search values."
        }
      ],
      "default": 1,
      "description": "Number of independent GLU layers for pretraining."
    },
    "num_shared_decoder": {
      "oneOf": [
        {
          "type": "integer",
          "minimum": 1
        },
        {
          "type": "array",
          "items": {
            "type": "integer",
            "minimum": 1
          },
          "minItems": 1,
          "description": "Tuning search values."
        }
      ],
      "default": 1,
      "description": "Number of shared GLU layers for pretraining."
    },
    "momentum": {
      "oneOf": [
        {
          "type": "number",
          "minimum": 0
        },
        {
          "type": "array",
          "items": {
            "type": "number",
            "minimum": 0
          },
          "minItems": 1,
          "description": "Tuning search values."
        }
      ],
      "default": 0.02,
      "description": "Momentum for batch normalization."
    },
    "pretraining_ratio": {
      "oneOf": [
        {
          "type": "number",
          "minimum": 0,
          "maximum": 1
        },
        {
          "type": "array",
          "items": {
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "minItems": 1,
          "description": "Tuning search values."
        }
      ],
      "default": 0.5,
      "description": "Ratio of features to mask during pretraining."
    },
    "device": {
      "type": "string",
      "enum": ["auto", "cpu", "cuda"],
      "default": "auto",
      "description": "Compute device."
    },
    "importance_sample_size": {
      "oneOf": [
        {
          "type": "null"
        },
        {
          "type": "integer",
          "minimum": 1
        },
        {
          "type": "array",
          "items": {
            "type": "integer",
            "minimum": 1
          },
          "minItems": 1,
          "description": "Tuning search values."
        }
      ],
      "default": null,
      "description": "Sample size for importance calculation."
    },
    "early_stopping_monitor": {
      "oneOf": [
        {
          "type": "string",
          "enum": ["auto", "valid_loss", "train_loss"]
        },
        {
          "type": "array",
          "items": {
            "type": "string",
            "enum": ["auto", "valid_loss", "train_loss"]
          },
          "minItems": 1,
          "description": "Tuning search values."
        }
      ],
      "default": "auto",
      "description": "Metric monitored for early stopping."
    },
    "early_stopping_tolerance": {
      "oneOf": [
        {
          "type": "number",
          "minimum": 0
        },
        {
          "type": "array",
          "items": {
            "type": "number",
            "minimum": 0
          },
          "minItems": 1,
          "description": "Tuning search values."
        }
      ],
      "default": 0,
      "description": "Minimum relative improvement to reset the patience counter."
    },
    "early_stopping_patience": {
      "oneOf": [
        {
          "type": "integer",
          "minimum": 0
        },
        {
          "type": "array",
          "items": {
            "type": "integer",
            "minimum": 0
          },
          "minItems": 1,
          "description": "Tuning search values."
        }
      ],
      "default": 0,
      "description": "Number of epochs without improvement before stopping."
    },
    "num_workers": {
      "type": "integer",
      "minimum": 0,
      "default": 0,
      "description": "Number of subprocesses for data loading."
    },
    "skip_importance": {
      "type": "boolean",
      "default": false,
      "description": "Skip importance calculation."
    },
    "ifw": {
      "oneOf": [
        {
          "type": "boolean"
        },
        {
          "type": "array",
          "items": {
            "type": "boolean"
          },
          "minItems": 1,
          "description": "Tuning search values."
        }
      ],
      "default": false,
      "description": "Inverse Frequency Weighting in classification."
    },
    "optimizer": {
      "type": "string",
      "default": "adam",
      "$comment": "A torch optimizer function may also be supplied in R; only the string form is serializable.",
      "description": "Optimizer name (e.g. \"adam\")."
    },
    "lr_scheduler": {
      "oneOf": [
        {
          "type": "null"
        },
        {
          "type": "string",
          "enum": ["step", "reduce_on_plateau"]
        }
      ],
      "$comment": "A torch scheduler function may also be supplied in R; only the string form is serializable.",
      "description": "Learning-rate scheduler: \"step\" or \"reduce_on_plateau\". null = none."
    }
  }
}
