相关的代码:
182-203行
def tensor_ttv(core, Ui_list, remove_k=None):
'''
Tensor times vector product (use sktensor library)
-----------
core = core tensor
Ui_list = list of U_i to be multiplied
remove_k = do not multiply in k-th mode
return a scalar or np.array
'''
dt_core = sktensor.dtensor(core)
assert (dt_core.ndim == len(Ui_list)), "tensor_ttv: core and U must be tha same dimension."
#
modes = range(len(Ui_list))
if remove_k is not None:
modes.remove(remove_k)
#
out_core = dt_core.ttv(tuple(Ui_list), modes)
#
if len(out_core) == 1: # out_core is a scaler
return (out_core[0])
else:
return (np.array(out_core))
137-141行
for k in range(ndims):
step = lr * reg * U[k][ind[k]].copy()
step += lr * e_ijk * tensor_ttv(core, Ui_list, k)
U[k][ind[k]] -= step
Ui_list = [U[k][ind[k]] for k in range(ndims)]
294-304行
core, U = TPTF(X, Xtest, dims, rank, args.reg, args.regS, args.lr, args.lrS, args.maxEpo)
save_model(args, core, U)
# Evaluation
pred = pred(Xtest[0], core, U)
rmse = RMSE(Xtest[1], pred)
save_result(args, rmse)
end_time = time.time()
logger.info('RMSE: {:.4f}'.format(rmse))
logger.info('Total Time: {:.1f}s'.format(end_time - start_time))
请问一下这个问题应该怎么解决?