MCPcopy Create free account
hub / github.com/DeepGraphLearning/graphvite / LINE

Class LINE

include/instance/model/graph.h:34–86  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

32 */
33template<class _Vector>
34class LINE {
35public:
36 static const size_t dim = _Vector::dim;
37 typedef _Vector Vector;
38 typedef typename _Vector::Float Float;
39
40 __host__ __device__ static void forward(const Vector &vertex, const Vector &context, Float &output) {
41 output = 0;
42 FOR(i, dim)
43 output += vertex[i] * context[i];
44 output = SUM(output);
45 }
46
47 template<OptimizerType optimizer_type>
48 __host__ __device__
49 static void backward(Vector &vertex, Vector &context,
50 Float gradient, const Optimizer &optimizer, Float weight = 1) {
51 auto update = get_update_function < Float, optimizer_type>();
52 FOR(i, dim) {
53 Float v = vertex[i];
54 Float c = context[i];
55 vertex[i] -= (optimizer.*update)(v, gradient * c, weight);
56 context[i] -= (optimizer.*update)(c, gradient * v, weight);
57 }
58 }
59
60 template<OptimizerType optimizer_type>
61 __host__ __device__
62 static void backward(Vector &vertex, Vector &context, Vector &vertex_moment1, Vector &context_moment1,
63 Float gradient, const Optimizer &optimizer, Float weight = 1) {
64 auto update = get_update_function_1_moment < Float, optimizer_type>();
65 FOR(i, dim) {
66 Float v = vertex[i];
67 Float c = context[i];
68 vertex[i] -= (optimizer.*update)(v, gradient * c, vertex_moment1[i], weight);
69 context[i] -= (optimizer.*update)(c, gradient * v, context_moment1[i], weight);
70 }
71 }
72
73 template<OptimizerType optimizer_type>
74 __host__ __device__
75 static void backward(Vector &vertex, Vector &context, Vector &vertex_moment1, Vector &context_moment1,
76 Vector &vertex_moment2, Vector &context_moment2,
77 Float gradient, const Optimizer &optimizer, Float weight = 1) {
78 auto update = get_update_function_2_moment < Float, optimizer_type>();
79 FOR(i, dim) {
80 Float v = vertex[i];
81 Float c = context[i];
82 vertex[i] -= (optimizer.*update)(v, gradient * c, vertex_moment1[i], vertex_moment2[i], weight);
83 context[i] -= (optimizer.*update)(c, gradient * v, context_moment1[i], context_moment2[i], weight);
84 }
85 }
86};
87
88/**
89 * @brief DeepWalk model

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected