@@ -235,29 +235,17 @@ struct PairWiseDistanceOp {
235
235
236
236
kernel::construct_distance_pairs_kernel<<<
237
237
dim3 (GpuInfo::ins().blocks(32 ), div_roundup(_centroids.rows(), 16)),
238
- dim3(16 , 16 )>>>(
238
+ dim3(16 , 16 )>>>( // FIXME: Tune this.
239
239
distance_pairs_.k_param(),
240
240
data_dot_.k_param(),
241
241
centroids_dot_.k_param());
242
242
243
243
CUDA_CHECK (cudaGetLastError());
244
- std::cout << std::endl;
245
- std::cout << " in distance op" << std::endl;
246
- std::cout << distance_pairs_ << std::endl;
247
244
248
245
cublasHandle_t handle = GpuInfo::ins().cublas_handle();
249
246
250
247
T alpha = -2.0 ;
251
248
T beta = 1.0 ;
252
- std::cout << " data.shape: " << _data.rows() << " , " << _data.cols() <<
253
- " \t centroids.shape: " << _centroids.rows() << " , " << _centroids.cols() <<
254
- " \t dp.shape: " << distance_pairs_.rows() << " , " << distance_pairs_.cols() <<
255
- std::endl;
256
-
257
- std::cout << _data << std::endl;
258
- std::cout << _centroids << std::endl;
259
-
260
- std::cout << _centroids.dev_ptr() << std::endl;
261
249
262
250
Blas::gemm (
263
251
handle,
@@ -270,12 +258,11 @@ struct PairWiseDistanceOp {
270
258
&beta,
271
259
distance_pairs_.dev_ptr(), distance_pairs_.rows());
272
260
273
- std::cout << distance_pairs_ << std::endl;
274
- std::cout << " return" << std::endl;
275
261
return distance_pairs_;
276
262
}
277
263
};
278
264
265
+
279
266
template <typename T>
280
267
KmMatrix<T> KmeansLlInit<T>::probability(
281
268
KmMatrix<T>& _data, KmMatrix<T>& _centroids) {
@@ -301,13 +288,20 @@ KmMatrix<T> KmeansLlInit<T>::probability(
301
288
302
289
CUDA_CHECK (cudaGetLastError ());
303
290
291
+ std::cout << min_distances << std::endl;
292
+
304
293
T cost = SumOp<T>().sum (min_distances);
294
+ std::cout << " cost: " << cost << std::endl;
305
295
306
296
// Re-use min_distances to store prob
307
297
MulOp<T> mul_op;
308
- mul_op.mul (min_distances, min_distances, 1 / cost * over_sample_ * k_);
309
298
310
- return min_distances;
299
+ KmMatrix<T> prob (min_distances.rows (), 1 );
300
+ mul_op.mul (prob, min_distances, (over_sample_ * k_ * 1 ) / cost);
301
+
302
+ std::cout << prob << std::endl;
303
+
304
+ return prob;
311
305
}
312
306
313
307
@@ -357,19 +351,19 @@ KmMatrix<T> KmeansLlInit<T>::sample_centroids(KmMatrix<T>& _data, KmMatrix<T>& _
357
351
T prob_x = prob_ptr[idx];
358
352
return prob_x > thresh;
359
353
});
360
-
354
+ std::cout << std::endl;
361
355
return new_centroids;
362
356
}
363
357
364
358
template <typename T>
365
359
KmMatrix<T>
366
- KmeansLlInit<T>::operator ()(KmMatrix<T>& _data, size_t k ) {
360
+ KmeansLlInit<T>::operator ()(KmMatrix<T>& _data, size_t _k ) {
367
361
368
362
if (seed_ < 0 ) {
369
363
std::random_device rd;
370
364
seed_ = rd ();
371
365
}
372
- k_ = k ;
366
+ k_ = _k ;
373
367
374
368
std::mt19937 generator (0 );
375
369
@@ -386,14 +380,15 @@ KmeansLlInit<T>::operator()(KmMatrix<T>& _data, size_t k) {
386
380
KmMatrix<T> prob = probability (_data, centroids);
387
381
388
382
T cost = SumOp<T>().sum (prob);
389
- // FIXME
390
- // for (size_t i = 0; i < std::log(cost); ++i) {
391
- for (size_t i = 0 ; i < 1 ; ++i) {
392
- std::cout << " looping" << std::endl;
393
- KmMatrix<T> new_centroids = sample_centroids (_data, centroids);
394
- centroids = stack (centroids, new_centroids, KmMatrixDim::ROW);
383
+
384
+ for (size_t i = 0 ; i < std::log (cost); ++i) {
395
385
prob = probability (_data, centroids);
386
+ KmMatrix<T> new_centroids = sample_centroids (_data, prob);
387
+ new_centroids.set_name (" new centroids" );
388
+ std::cout << new_centroids << std::endl;
396
389
centroids = stack (centroids, new_centroids, KmMatrixDim::ROW);
390
+ centroids.set_name (" centroids" );
391
+ std::cout << centroids << std::endl;
397
392
}
398
393
399
394
if (centroids.rows () < k_) {
@@ -407,7 +402,7 @@ KmeansLlInit<T>::operator()(KmMatrix<T>& _data, size_t k) {
407
402
408
403
#define INSTANTIATE (T ) \
409
404
template KmMatrix<T> KmeansLlInit<T>::operator ()( \
410
- KmMatrix<T>& data , size_t k); \
405
+ KmMatrix<T>& _data , size_t _k); \
411
406
template KmMatrix<T> KmeansLlInit<T>::probability(KmMatrix<T>& data, \
412
407
KmMatrix<T>& centroids); \
413
408
template KmMatrix<T> KmeansLlInit<T>::sample_centroids( \
0 commit comments