improve a calculation of feature probability
This commit is contained in:
parent
df6302c699
commit
b61b6dd21b
@ -17,9 +17,6 @@ HelpFlag help {
|
||||
parser, "help", "display this menu", {'h', "help"},
|
||||
};
|
||||
|
||||
ValueFlag<std::string> smap {
|
||||
parser, "path", "step map file path", {"smap"},
|
||||
};
|
||||
ValueFlag<std::string> fmap {
|
||||
parser, "path", "feature map file path", {"fmap"},
|
||||
};
|
||||
@ -41,13 +38,30 @@ static void Exec() {
|
||||
|
||||
for (size_t t = 0; t < aprobs.size(); ++t) {
|
||||
const auto tidx = t % fmap.size();
|
||||
const auto bnum = aprobs[t].size();
|
||||
for (size_t c = 0; c < fmap[tidx].size(); ++c) {
|
||||
double sum = 0;
|
||||
for (auto i : fmap[tidx][c]) {
|
||||
Enforce(i < aprobs[t].size(), "aprob has no enough columns");
|
||||
sum += aprobs[t][i];
|
||||
const auto& blocks = fmap[tidx][c];
|
||||
|
||||
double positive = 0, negative = 0;
|
||||
for (uint32_t b = 0; b < aprobs[t].size(); ++b) {
|
||||
if (blocks.end() != std::find(blocks.begin(), blocks.end(), b)) {
|
||||
positive += aprobs[t][b];
|
||||
} else {
|
||||
negative += aprobs[t][b];
|
||||
}
|
||||
std::cout << sum / fmap[tidx][c].size() << ' ';
|
||||
}
|
||||
if (blocks.size() > 0) {
|
||||
positive /= blocks.size();
|
||||
} else {
|
||||
positive = 1;
|
||||
}
|
||||
if (bnum > blocks.size()) {
|
||||
negative /= bnum - blocks.size();
|
||||
} else {
|
||||
negative = 0;
|
||||
}
|
||||
const auto prob = positive * (1-negative);
|
||||
std::cout << prob << ' ';
|
||||
}
|
||||
std::cout << '\n';
|
||||
}
|
||||
|
@ -42,6 +42,7 @@ auto ReadTensor3(std::istream& st) noexcept {
|
||||
std::istream_iterator<T> {});
|
||||
}
|
||||
}
|
||||
if (ret.back().empty()) ret.pop_back();
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -30,7 +30,7 @@ ValueFlag<uint32_t> fnum {
|
||||
|
||||
static void Exec() {
|
||||
const auto fnum = args::get(param::fnum);
|
||||
Enforce(fnum > 0, "fc-num must be greater than 0");
|
||||
Enforce(fnum > 0, "fnum must be greater than 0");
|
||||
|
||||
std::ifstream smap_st {args::get(param::smap)};
|
||||
Enforce(!!smap_st, "smap path is invalid");
|
||||
|
10
gen/smap.cc
10
gen/smap.cc
@ -20,8 +20,8 @@ HelpFlag help {
|
||||
ValueFlag<size_t> dur {
|
||||
parser, "100", "duration", {"dur"}, 100,
|
||||
};
|
||||
ValueFlag<size_t> fcnum {
|
||||
parser, "50", "number of feature code alphabet", {"fc-num"}, 50,
|
||||
ValueFlag<size_t> fnum {
|
||||
parser, "50", "number of feature code alphabet", {"fnum"}, 50,
|
||||
};
|
||||
ValueFlag<size_t> branch {
|
||||
parser, "2", "number of branch", {"branch"}, 2,
|
||||
@ -51,7 +51,7 @@ Flag inc_time {
|
||||
|
||||
|
||||
size_t Step(size_t t, size_t c, size_t b) {
|
||||
const auto fcnum = args::get(param::fcnum);
|
||||
const auto fnum = args::get(param::fnum);
|
||||
|
||||
size_t ret;
|
||||
switch (args::get(param::algo)) {
|
||||
@ -60,7 +60,7 @@ size_t Step(size_t t, size_t c, size_t b) {
|
||||
if (param::inc_time) {
|
||||
ret += t;
|
||||
}
|
||||
return ret%fcnum;
|
||||
return ret%fnum;
|
||||
|
||||
default:
|
||||
assert(false);
|
||||
@ -70,7 +70,7 @@ size_t Step(size_t t, size_t c, size_t b) {
|
||||
|
||||
void Exec() {
|
||||
for (size_t t = 0; t < args::get(param::dur); ++t) {
|
||||
for (size_t c = 0; c < args::get(param::fcnum); ++c) {
|
||||
for (size_t c = 0; c < args::get(param::fnum); ++c) {
|
||||
for (size_t b = 0; b < args::get(param::branch); ++b) {
|
||||
std::cout << Step(t, c, b) << ' ';
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user