我目前正在使用通过 SVGP 优化的共区域化线性模型(参见例如 alvarez notes https://arxiv.org/pdf/1106.6251.pdf )。
我注意到在运行 OOM 之前诱导点数量的上限大大减少(现在大约 5k 诱导点而不是不使用共区域化内核时的 8k)。据我了解,限制瓶颈应该是相同的(仍然是 MxM 内核矩阵),但它似乎发生了更多变化。
此外,我现在收到警告:
.../lib/python3.6/site-packages/tensorflow/python/ops/gradients_impl.py:112: UserWarning:
Converting sparse IndexedSlices to a dense Tensor of unknown shape. This may consume a large amount of memory.
内核矩阵的构造如下。我不使用大 Qs 或 Rs (Q=3, R=3)。
def coreg_k(Q, R, output_dim, active_dims):
# create Q different kernels with rank R
coreg = []
k_q = []
# lengthscales = np.logspace(-1, 3, 5)
lengthscales = [0.1, 1, 5]
for q in range(Q):
coreg_tmp = gpflow.kernels.Coregion(input_dim=1, output_dim=output_dim, rank=R, active_dims=active_dims)
coreg_tmp.W = np.random.randn(output_dim, R)
coreg.append(coreg_tmp)
k_tmp = []
k_tmp.append(Matern52(input_dim=len(kernel_idxs["coords"]), active_dims=kernel_idxs["coords"],
lengthscales=lengthscales[q], ARD=False))
k_tmp.append(RBF(input_dim=len(kernel_idxs["rest"]), active_dims=kernel_idxs["rest"],
ARD=True, lengthscales=lengthscales[q]))
k = k_tmp[0]
for i in range(1, len(k_tmp)):
k += k_tmp[i]
k_q.append(k)
# combine all those kernels
kern_lcm = coreg[0] * k_q[0]
for q in range(1, Q):
kern_lcm += coreg[q] * k_q[q]
return kern_lcm
是什么占用了这么多内存?来自额外内核的更多参数不应该改变那么多。
谢谢。