手动实现
# DeepFM: FM(二阶显式交互) + DNN(高阶非线性),共享 embedding
# 任务:二分类(如 CTR 预估)。示例用合成数据即可跑通。
import math
import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import Dataset, DataLoader
# -----------------------------
# 1) 合成一个“推荐场景”式数据集
# - 有多个离散域(user_id, item_id, city_id...)
# - 也有少量数值特征(age, price_norm...)
# -----------------------------
class ToyDataset(Dataset):
def __init__(self, n_samples=10_000,
# 各离散域基数(每个域里ID的取值范围大小)
field_cardinalities=(1000, 5000, 50), # 例如: user 1k(用户id枚举值), item 5k, city 50
n_numeric=2, # 数值特征个数
seed=42):
g = torch.Generator().manual_seed(seed)
self.fields = []
for c in fie