def check_disentangle(model, imgs, factors): model.eval() z_list = [] with torch.no_grad(): for i in range(0, len(imgs), 256): xb = torch.tensor(imgs[i:i + 256].reshape(-1, 768)) mu, _ = model.encode(xb) z_list.append(mu) z = torch.cat(z_list).numpy() names = ['宽高比', '红强度'] for j, name in enumerate(names): r1 = np.corrcoef(z[:, 0], factors[:, j])[0, 1] r2 = np.corrcoef(z[:, 1], factors[:, j])[0, 1] print('%s: 与z1相关性=%.2f, 与z2相关性=%.2f' % (name, r1, r2)) if name == 'main': imgs, factors = make_dataset() model = BetaVAE(z_dim=2) train(model, imgs) check_disentangle(model, imgs, factors) ```

岗位关联

代码用途:用合成数据训练一个极简 beta-VAE,并通过隐维度与真实语义因子的相关性检验,直观验证“宽高比”与“红色强度”是否被解耦到两个独立的潜在维度上。