Source code for torch_concepts.nn.modules.low.policy.random
import torch
from ..base.layer import BaseConceptLayer
[docs]
class RandomPolicy(BaseConceptLayer):
"""
Random intervention policy that generates random values for concept selection.
This policy generates random values scaled by a factor, useful for random
baseline comparisons in intervention experiments.
Attributes:
out_features (int): Number of output features.
scale (float): Scaling factor for random values.
Args:
out_features: Number of output concept features.
scale: Scaling factor for random values (default: 1.0).
Example:
>>> import torch
>>> from torch_concepts.nn import RandomPolicy
>>>
>>> # Create random policy
>>> policy = RandomPolicy(out_features=10, scale=2.0)
>>>
>>> # Generate random concept endogenous
>>> endogenous = torch.randn(4, 10) # batch_size=4, n_concepts=10
>>>
>>> # Apply policy to get random intervention scores
>>> scores = policy(endogenous)
>>> print(scores.shape) # torch.Size([4, 10])
>>> print(scores.min() >= 0.0) # True (absolute values)
>>> print(scores.max() <= 2.0) # True (scaled by 2.0)
>>>
>>> # Each call generates different random values
>>> scores2 = policy(endogenous)
>>> print(torch.equal(scores, scores2)) # False
"""
[docs]
def __init__(
self,
out_features: int,
scale: float = 1.0,
):
super().__init__(
out_features=out_features,
)
self.scale = scale
[docs]
def forward(
self,
endogenous: torch.Tensor
) -> torch.Tensor:
"""
Generate random intervention scores.
Args:
endogenous: Input concept endogenous of shape (batch_size, n_concepts).
Returns:
torch.Tensor: Random scores of same shape as input, scaled by self.scale.
"""
return torch.rand_like(endogenous).abs() * self.scale