def ranking(types, model, distfn): lt = th.from_numpy(model.embedding()) embedding = Variable(lt, requires_grad=True) with torch.no_grad(): ranks = [] ap_scores = [] for s, s_types in types.items(): s_e = Variable(lt[s].expand_as(embedding), requires_grad=True) with torch.no_grad(): _dists = model.dist()(s_e, embedding).data.cpu().numpy().flatten() _dists[s] = 1e+12 _labels = np.zeros(embedding.size(0)) _dists_masked = _dists.copy() _ranks = [] for o in s_types: _dists_masked[o] = np.Inf _labels[o] = 1 ap_scores.append(average_precision_score(_labels, -_dists)) for o in s_types: d = _dists_masked.copy() d[o] = _dists[o] r = np.argsort(d) _ranks.append(np.where(r == o)[0][0] + 1) ranks += _ranks return np.mean(ranks), np.mean(ap_scores)
return tf.contrib.learn.InputFnOps(features, None, feature_placeholders) predictor = from_contrib_estimator(estimator=estimator, prediction_input_fn=prediction_input_fn, output_alternative_key="g_dvec") sess = tf.Session() print(predictor.fetch_tensors) wvec = [[[1, 2, 3], [4, 5, 6]]] dvec = [[[2, 3, 4], [5, 6, 7]]] i = 0 g_wvec = [ [ model.dist(wvec[i][0], wvec[i][1]), model.dist(dvec[i][0], dvec[i][1]) ], ] g_dvec = [ [ model.dist_r(wvec[i][0], wvec[i][1], dvec[i][0], dvec[i][1]), model.dist_r(wvec[i][0], dvec[i][1], wvec[i][0], dvec[i][1]) ], ] features = { 'wvec': wvec, 'dvec': dvec, } print(predictor(features))