You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PyTorch在现有XOR种子数据邻近范围采样生成合成数据

PyTorch实现XOR合成数据生成

实现逻辑很清晰,按以下步骤来:

  • 提前定义4组满足x^y^z=1的离散种子样本
  • 遵循采样规则:原始值为0的特征从[0, 0.3]均匀采样,原始值为1的特征从[0.7, 1.0]均匀采样
  • 生成样本后使用连续异或公式计算第四列结果,连续异或的离散兼容公式为 a ^ b = a + b - 2*a*b

完整实现代码

import torch

def generate_xor_synthetic_data(num_samples: int) -> torch.Tensor:
    # 定义原始种子数据,前3列是x/y/z,第4列是离散异或结果
    seed_data = torch.tensor([
        [0, 0, 1, 1],
        [0, 1, 0, 1],
        [1, 0, 0, 1],
        [1, 1, 1, 1]
    ], dtype=torch.int8)
    # 定义采样范围
    low_0, high_0 = 0.0, 0.3
    low_1, high_1 = 0.7, 1.0

    # 随机选择num_samples个种子模板
    seed_indices = torch.randint(0, 4, size=(num_samples,))
    selected_seeds = seed_data[seed_indices][:, :3]  # 取x/y/z三列作为采样模板

    # 按规则生成连续值
    rand_mat = torch.rand_like(selected_seeds, dtype=torch.float32)
    samples = torch.where(
        selected_seeds == 0,
        low_0 + rand_mat * (high_0 - low_0),
        low_1 + rand_mat * (high_1 - low_1)
    )

    # 计算连续三变量异或结果作为第四列
    x, y, z = samples[:, 0], samples[:, 1], samples[:, 2]
    xor_xy = x + y - 2 * x * y
    xor_xyz = xor_xy + z - 2 * xor_xy * z
    xor_xyz = xor_xyz.unsqueeze(1)

    # 拼接得到完整样本
    full_data = torch.concat([samples, xor_xyz], dim=1)
    return full_data

# 测试:生成4个样本
if __name__ == "__main__":
    data = generate_xor_synthetic_data(4)
    # 保留两位小数打印,和示例格式对齐
    print(torch.round(data * 100) / 100)

输出示例(随机生成结果会有差异,符合规则即可)

tensor([[0.1200, 0.2700, 0.8900, 0.8600],
        [0.0300, 0.7400, 0.1800, 0.9100],
        [0.9500, 0.0700, 0.2200, 0.8200],
        [0.8100, 0.9300, 0.7600, 0.8700]])

内容的提问来源于stack exchange,提问作者Ravi Raja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 08:57:04