k-meansNet: When k-means Meets Differentiable Programming