Skip to content

dpctgan

DPCTGAN

Bases: DPMixin, CTGAN

A differentially private CTGAN. Accepts :class:CTGAN arguments as well as :class:DPMixin arguments.

DP is applied to the discriminator only, as it is the sole component that processes real training data.

Source code in src/nhssynth/modules/model/models/dpctgan.py
class DPCTGAN(DPMixin, CTGAN):
    """
    A differentially private CTGAN. Accepts :class:`CTGAN` arguments
    as well as :class:`DPMixin` arguments.

    DP is applied to the discriminator only, as it is the sole component
    that processes real training data.
    """

    def __init__(
        self,
        *args,
        target_epsilon: float = 3.0,
        target_delta: Optional[float] = None,
        max_grad_norm: float = 5.0,
        secure_mode: bool = False,
        **kwargs,
    ) -> None:
        super(DPCTGAN, self).__init__(
            *args,
            target_epsilon=target_epsilon,
            target_delta=target_delta,
            max_grad_norm=max_grad_norm,
            secure_mode=secure_mode,
            **kwargs,
        )

    def make_private(self, num_epochs: int) -> GradSampleModule:
        """
        Make the discriminator differentially private.

        Only the discriminator is privatised since only it processes real training data.

        Args:
            num_epochs: The number of epochs to train for.
        """
        self.discriminator = super().make_private(num_epochs, self.discriminator)

    @classmethod
    def get_args(cls) -> list[str]:
        return CTGAN.get_args() + DPMixin.get_args()

    @classmethod
    def get_metrics(cls) -> list[str]:
        return CTGAN.get_metrics() + DPMixin.get_metrics()

make_private(num_epochs)

Make the discriminator differentially private.

Only the discriminator is privatised since only it processes real training data.

Parameters:

Name Type Description Default
num_epochs int

The number of epochs to train for.

required
Source code in src/nhssynth/modules/model/models/dpctgan.py
def make_private(self, num_epochs: int) -> GradSampleModule:
    """
    Make the discriminator differentially private.

    Only the discriminator is privatised since only it processes real training data.

    Args:
        num_epochs: The number of epochs to train for.
    """
    self.discriminator = super().make_private(num_epochs, self.discriminator)