| #include "caffe2/core/logging.h" |
| #include "kl_minimization.h" |
| |
| #include <fstream> |
| #include <iostream> |
| #include <sstream> |
| |
| using namespace std; |
| using namespace dnnlowp; |
| |
| int main(int argc, const char* argv[]) { |
| if (argc < 3) { |
| cerr << "Usage: " << argv[0] << " in_file out_file [preserve_sparsity]" |
| << endl; |
| return -1; |
| } |
| |
| ifstream in(argv[1]); |
| ofstream out(argv[2]); |
| bool preserve_sparsity = argc >= 4 ? atoi(argv[3]) : false; |
| |
| string line; |
| while (getline(in, line)) { |
| istringstream ist(line); |
| |
| int op_index, output_index; |
| string op_type, tensor_name; |
| float min, max; |
| int nbins; |
| |
| ist >> op_index >> op_type >> output_index >> tensor_name >> min >> max >> |
| nbins; |
| |
| vector<uint64_t> bins; |
| for (int i = 0; i < nbins; ++i) { |
| uint64_t cnt; |
| ist >> cnt; |
| bins.push_back(cnt); |
| } |
| assert(bins.size() == nbins); |
| |
| Histogram hist = Histogram(min, max, bins); |
| TensorQuantizationParams qparams = |
| KLDivergenceMinimization().ChooseQuantizationParams( |
| hist, preserve_sparsity); |
| |
| out << op_index << " " << op_type << " " << output_index << " " |
| << tensor_name << " " << qparams.Min() << " " << qparams.Max() << endl; |
| } |
| |
| return 0; |
| } |