Skip to content

Commit c5ecdaa

Browse files
committed
Add Euclidean–Cosine Score (ECS)
1 parent 5bb2def commit c5ecdaa

File tree

1 file changed

+29
-16
lines changed

1 file changed

+29
-16
lines changed

tools/imatrix/imatrix.cpp

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include <regex>
1919
#include <thread>
2020
#include <unordered_map>
21+
#include <valarray>
2122
#include <vector>
2223

2324
#if defined(_MSC_VER)
@@ -1301,7 +1302,7 @@ static bool show_statistics(const common_params & params) {
13011302
std::map<int, layer_stats> ls;
13021303

13031304
LOG_INF("\nComputing tensor statistics for %s (%d tensors)\n", params.in_files[0].c_str(), static_cast<int>(ts.size()));
1304-
LOG_INF("\n%6s\t%18s\t%13s\t%8s\t%8s\t%7s\t%15s\t%13s\t%12s\t%s\t%5s\t%10s\n",
1305+
LOG_INF("\n%6s\t%18s\t%13s\t%8s\t%8s\t%7s\t%15s\t%13s\t%11s\t%8s\t%5s\t%10s\n",
13051306
"Layer",
13061307
"Tensor",
13071308
legacy_mode ? "Σ(Act²)" : "L₂ Norm",
@@ -1310,8 +1311,8 @@ static bool show_statistics(const common_params & params) {
13101311
"μ",
13111312
"σ",
13121313
"N",
1313-
"Entropy",
1314-
"E (norm)",
1314+
"H Norm",
1315+
legacy_mode ? "H" : "ECS",
13151316
"ZD",
13161317
"CosSim");
13171318
LOG_INF(
@@ -1328,17 +1329,17 @@ static bool show_statistics(const common_params & params) {
13281329
blk = -1; // not a block layer
13291330
}
13301331

1331-
LOG_INF("%5s\t%-20s\t%11.2f\t%10.4f\t%10.4f\t%8.2f\t%8.2f\t%7d\t%12.4f\t%7.2f%%\t%6.2f%%\t%10.4f\n",
1332+
LOG_INF("%5s\t%-20s\t%11.2f\t%10.4f\t%10.4f\t%8.2f\t%8.2f\t%7d\t%10.2f%%\t%10.4f\t%6.2f%%\t%10.4f\n",
13321333
layer.c_str(),
13331334
name.c_str(),
1334-
legacy_mode == 1 ? tstat.sum_values : tstat.l2_norm,
1335+
legacy_mode ? tstat.sum_values : tstat.l2_norm,
13351336
tstat.min_values,
13361337
tstat.max_values,
13371338
tstat.mean_values,
13381339
tstat.std_deviation,
13391340
tstat.elements,
1340-
tstat.entropy,
13411341
100.0f * (tstat.entropy / std::log2(tstat.elements)),
1342+
legacy_mode ? tstat.entropy : 100.0f * std::exp(-0.01f * tstat.l2_norm) * std::pow(fabs(tstat.cossim), 10.0f),
13421343
100.0f * tstat.zd_score,
13431344
tstat.cossim);
13441345

@@ -1363,25 +1364,37 @@ static bool show_statistics(const common_params & params) {
13631364

13641365
const auto layers = std::count_if(ls.begin(), ls.end(), [](const auto & kv) { return kv.first >= 0; });
13651366
LOG_INF("\nComputing layer statistics (%ld layers)\n", layers);
1366-
LOG_INF("\n%6s\t%13s\t%5s\t%10s\n",
1367+
LOG_INF("\n%6s\t%13s\t%6s\t%11s\t%6s\n",
13671368
"Layer",
13681369
legacy_mode ? "Σ(Act²)" : "L₂ Norm",
13691370
"ZD",
1370-
"CosSim");
1371-
LOG_INF("============================================\n");
1371+
"CosSim",
1372+
legacy_mode ? "" : "ECS");
1373+
if (legacy_mode) {
1374+
LOG_INF("============================================\n");
1375+
} else {
1376+
LOG_INF("=========================================================\n");
1377+
}
13721378
for (const auto & [layer, stats] : ls) {
13731379
if (layer < 0 || stats.n == 0) continue;
1374-
const float lyr_sum = stats.lyr_sum;
1375-
const float lyr_zd = stats.lyr_zd / stats.n;
13761380
const auto lcs = lyr_cossim.find(layer);
1377-
const float lyr_cs = (lcs != lyr_cossim.end()) ? lcs->second : 0.0f;
1381+
const float lyr_cs = lcs != lyr_cossim.end() ? lcs->second : 0.0f;
13781382
const auto ll2n = lyr_l2_norm.find(layer);
1379-
const float l2_norm = (ll2n != lyr_l2_norm.end()) ? ll2n->second : 0.0f;
1380-
LOG_INF("%5d\t%11.2f\t%6.2f%%\t%10.4f\n",
1383+
const float lyr_l2n = ll2n != lyr_l2_norm.end() ? ll2n->second : 0.0f;
1384+
if (legacy_mode) {
1385+
LOG_INF("%5d\t%11.2f\t%6.2f%%\t%11.4f\n",
13811386
layer,
1382-
legacy_mode ? lyr_sum : l2_norm,
1383-
100.0f * lyr_zd,
1387+
stats.lyr_sum,
1388+
100.0f * stats.lyr_zd / stats.n,
13841389
lyr_cs);
1390+
} else {
1391+
LOG_INF("%5d\t%11.2f\t%6.2f%%\t%11.4f\t%8.4f\n",
1392+
layer,
1393+
lyr_l2n,
1394+
100.0f * stats.lyr_zd / stats.n,
1395+
lyr_cs,
1396+
100.0f * std::exp(-0.01f * lyr_l2n) * std::pow(fabs(lyr_cs), 10.0f));
1397+
}
13851398
}
13861399
LOG_INF("\n");
13871400

0 commit comments

Comments
 (0)