@@ -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,19 @@ 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
- // Re-use min_distances to store prob
307
296
MulOp<T> mul_op;
308
- mul_op.mul (min_distances, min_distances, 1 / cost * over_sample_ * k_);
309
297
310
- return min_distances;
298
+ KmMatrix<T> prob (min_distances.rows (), 1 );
299
+ mul_op.mul (prob, min_distances, (over_sample_ * k_ * 1 ) / cost);
300
+
301
+ std::cout << prob << std::endl;
302
+
303
+ return prob;
311
304
}
312
305
313
306
@@ -316,11 +309,7 @@ KmMatrix<T> KmeansLlInit<T>::sample_centroids(KmMatrix<T>& _data, KmMatrix<T>& _
316
309
317
310
KmMatrix<T> distances (1 , _data.rows ());
318
311
319
- T potential = SumOp<T>().sum (_prob);
320
-
321
- MulOp<T>().mul (_prob, _prob, 1 / potential);
322
-
323
-
312
+ // FIXME: Keep generator out.
324
313
Generator<T> uniform_dist (_data.rows ());
325
314
KmMatrix<T> thresholds = uniform_dist.generate ();
326
315
@@ -357,19 +346,19 @@ KmMatrix<T> KmeansLlInit<T>::sample_centroids(KmMatrix<T>& _data, KmMatrix<T>& _
357
346
T prob_x = prob_ptr[idx];
358
347
return prob_x > thresh;
359
348
});
360
-
349
+ std::cout << std::endl;
361
350
return new_centroids;
362
351
}
363
352
364
353
template <typename T>
365
354
KmMatrix<T>
366
- KmeansLlInit<T>::operator ()(KmMatrix<T>& _data, size_t k ) {
355
+ KmeansLlInit<T>::operator ()(KmMatrix<T>& _data, size_t _k ) {
367
356
368
357
if (seed_ < 0 ) {
369
358
std::random_device rd;
370
359
seed_ = rd ();
371
360
}
372
- k_ = k ;
361
+ k_ = _k ;
373
362
374
363
std::mt19937 generator (0 );
375
364
@@ -386,14 +375,15 @@ KmeansLlInit<T>::operator()(KmMatrix<T>& _data, size_t k) {
386
375
KmMatrix<T> prob = probability (_data, centroids);
387
376
388
377
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);
378
+
379
+ for (size_t i = 0 ; i < std::log (cost); ++i) {
395
380
prob = probability (_data, centroids);
381
+ KmMatrix<T> new_centroids = sample_centroids (_data, prob);
382
+ new_centroids.set_name (" new centroids" );
383
+ std::cout << new_centroids << std::endl;
396
384
centroids = stack (centroids, new_centroids, KmMatrixDim::ROW);
385
+ centroids.set_name (" centroids" );
386
+ std::cout << centroids << std::endl;
397
387
}
398
388
399
389
if (centroids.rows () < k_) {
@@ -407,7 +397,7 @@ KmeansLlInit<T>::operator()(KmMatrix<T>& _data, size_t k) {
407
397
408
398
#define INSTANTIATE (T ) \
409
399
template KmMatrix<T> KmeansLlInit<T>::operator ()( \
410
- KmMatrix<T>& data , size_t k); \
400
+ KmMatrix<T>& _data , size_t _k); \
411
401
template KmMatrix<T> KmeansLlInit<T>::probability(KmMatrix<T>& data, \
412
402
KmMatrix<T>& centroids); \
413
403
template KmMatrix<T> KmeansLlInit<T>::sample_centroids( \
0 commit comments