@@ -34,7 +34,6 @@ void CosSimForward<DEVICE_TYPE_CPU>(CpuMatrix* out_mat,
34
34
CHECK (in2_mat->getHeight () == 1LU || in2_mat->getHeight () == num_samples);
35
35
size_t inc = (in2_mat->getHeight () == 1LU) ? 0 : dim;
36
36
for (size_t i = 0 ; i < num_samples; ++i, x += dim, y += inc) {
37
- // / for each row, todo(tianbing), use TensorExpression square2 ?
38
37
real square_sum_x = 0 ;
39
38
real square_sum_y = 0 ;
40
39
real xy = 0 ;
@@ -147,12 +146,15 @@ void CosSimBackward<DEVICE_TYPE_CPU>(const CpuMatrix* out_grad,
147
146
}
148
147
149
148
/* *
150
- * \param inputs[0] output value 1, size: nSamples * 1.
151
- * \param inputs[1] input value 1, size: nSamples * dim.
152
- * \param inputs[2] input value 2, size: n2 * dim (n2 == 1 or n2 == nSamples).
153
- * \param inputs[3] input grad 1, size: nSamples * dim.
154
- * \param inputs[4] input grad 2, size: n2 * dim (n2 == 1 or n2 == nSamples).
155
- * \param outputs[0] output grad, size : nSamples * 1.
149
+ * \param inouts[0] forward input grad 1, size: nSamples * dim.
150
+ * \param inouts[1] forward input grad 2,
151
+ * size: n2 * dim (n2 == 1 or n2 == nSamples).
152
+ *
153
+ * \param inputs[0] backward loss output grad, size : nSamples * 1.
154
+ * \param inputs[1] forward output value, size: nSamples * 1.
155
+ * \param inputs[2] forward input value 1, size: nSamples * dim.
156
+ * \param inputs[3] forward input value 2,
157
+ * size: n2 * dim (n2 == 1 or n2 == nSamples).
156
158
*/
157
159
template <DeviceType Device>
158
160
class CosSimBackwardFunc : public FunctionBase {
@@ -163,35 +165,35 @@ class CosSimBackwardFunc : public FunctionBase {
163
165
void calc (const Arguments& inputs,
164
166
const Arguments& outputs,
165
167
const Arguments& inouts) override {
166
- CHECK_EQ (inputs.size (), 5 );
167
- CHECK_EQ (outputs.size (), 1 );
168
- CHECK_EQ (inouts.size (), 0 );
168
+ CHECK_EQ (inputs.size (), 4 );
169
+ CHECK_EQ (outputs.size (), 0 );
170
+ CHECK_EQ (inouts.size (), 2 );
169
171
// / dim of out_grad and out_val == 1, column vector
170
- CHECK_EQ (outputs[0 ].dims_ [1 ], 1UL );
171
172
CHECK_EQ (inputs[0 ].dims_ [1 ], 1UL );
173
+ CHECK_EQ (inputs[1 ].dims_ [1 ], 1UL );
172
174
// / nSamples of out_grad == out_val == in_val1 == in_grad1
173
- CHECK_EQ (inputs[0 ].dims_ [0 ], outputs [0 ].dims_ [0 ]);
174
- CHECK_EQ (inputs[1 ].dims_ [0 ], outputs [0 ].dims_ [0 ]);
175
- CHECK_EQ (inputs[ 3 ].dims_ [0 ], outputs [0 ].dims_ [0 ]);
175
+ CHECK_EQ (inputs[1 ].dims_ [0 ], inputs [0 ].dims_ [0 ]);
176
+ CHECK_EQ (inputs[0 ].dims_ [0 ], inputs [0 ].dims_ [0 ]);
177
+ CHECK_EQ (inouts[ 0 ].dims_ [0 ], inputs [0 ].dims_ [0 ]);
176
178
// / dim of in1_val1 == in_val2 == in_grad1 == in_grad2
177
- CHECK_EQ (inputs[2 ].dims_ [1 ], inputs[1 ].dims_ [1 ]);
178
- CHECK_EQ (inputs[ 3 ].dims_ [1 ], inputs[1 ].dims_ [1 ]);
179
- CHECK_EQ (inputs[ 4 ].dims_ [1 ], inputs[1 ].dims_ [1 ]);
179
+ CHECK_EQ (inputs[3 ].dims_ [1 ], inputs[2 ].dims_ [1 ]);
180
+ CHECK_EQ (inouts[ 0 ].dims_ [1 ], inputs[2 ].dims_ [1 ]);
181
+ CHECK_EQ (inouts[ 1 ].dims_ [1 ], inputs[2 ].dims_ [1 ]);
180
182
181
- CHECK (outputs [0 ].getData () && inputs[0 ].getData () && inputs[1 ].getData () &&
182
- inputs[2 ].getData () && inputs[ 3 ].getData () && inputs[ 4 ].getData ());
183
+ CHECK (inputs [0 ].getData () && inputs[1 ].getData () && inputs[2 ].getData () &&
184
+ inputs[3 ].getData () && inouts[ 0 ].getData () && inouts[ 1 ].getData ());
183
185
const auto out_grad = std::make_shared<typename MatrixT<Device>::type>(
184
- outputs[0 ].getData (), outputs[0 ].dims_ [0 ], outputs[0 ].dims_ [1 ]);
185
- const auto out_val = std::make_shared<typename MatrixT<Device>::type>(
186
186
inputs[0 ].getData (), inputs[0 ].dims_ [0 ], inputs[0 ].dims_ [1 ]);
187
- const auto in1_val = std::make_shared<typename MatrixT<Device>::type>(
187
+ const auto out_val = std::make_shared<typename MatrixT<Device>::type>(
188
188
inputs[1 ].getData (), inputs[1 ].dims_ [0 ], inputs[1 ].dims_ [1 ]);
189
- const auto in2_val = std::make_shared<typename MatrixT<Device>::type>(
189
+ const auto in1_val = std::make_shared<typename MatrixT<Device>::type>(
190
190
inputs[2 ].getData (), inputs[2 ].dims_ [0 ], inputs[2 ].dims_ [1 ]);
191
- auto in1_grad = std::make_shared<typename MatrixT<Device>::type>(
191
+ const auto in2_val = std::make_shared<typename MatrixT<Device>::type>(
192
192
inputs[3 ].getData (), inputs[3 ].dims_ [0 ], inputs[3 ].dims_ [1 ]);
193
+ auto in1_grad = std::make_shared<typename MatrixT<Device>::type>(
194
+ inouts[0 ].getData (), inouts[0 ].dims_ [0 ], inouts[0 ].dims_ [1 ]);
193
195
auto in2_grad = std::make_shared<typename MatrixT<Device>::type>(
194
- inputs[ 4 ].getData (), inputs[ 4 ].dims_ [0 ], inputs[ 4 ].dims_ [1 ]);
196
+ inouts[ 1 ].getData (), inouts[ 1 ].dims_ [0 ], inouts[ 1 ].dims_ [1 ]);
195
197
196
198
CosSimBackward<Device>(out_grad.get (),
197
199
out_val.get (),
0 commit comments