使用QuCumber训练4量子位RBM时遇complex256不兼容numpy linalg错误
解决QuCumber 4量子位密度矩阵重构的complex256类型错误
直接转成complex128类型即可
numpy的linalg模块确实不支持complex256这种扩展精度类型,把目标密度矩阵转成标准的complex128就能解决问题:
要么加载数据时直接指定类型:real_data = np.loadtxt("GHZ_state_real.txt", dtype=np.float64) imag_data = np.loadtxt("GHZ_state_imag.txt", dtype=np.float64) target_rho = real_data + 1j * imag_data要么用
data.load_data_DM加载后再转换:target_rho = target_rho.astype(np.complex128)同步模型内部张量的类型
4量子位场景下模型自身的张量可能也默认用了complex256,得同步转成complex128避免类型不匹配:nn_state.rho = nn_state.rho.type(torch.complex128)先转类型再做reshape操作
你之前用torch.reshape没用是因为reshape只改变形状不修改数据类型,正确顺序是先转类型再调整形状:target_rho = target_rho.type(torch.complex128).reshape(16, 16)
补充:complex128是双精度复数,完全满足4量子位密度矩阵的计算需求,不会损失精度,同时也是numpy和PyTorch支持最完善的复数类型。
内容的提问来源于stack exchange,提问作者Silvio sjsj
相关产品推荐
相关产品推荐

