tiny-classifier.print.hpp

Created 2025-08-23T04:17:01.041Z, last edited 2025-08-24T06:13:56.729Z

 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#pragma once


#include "print.hpp"


template<std::size_t Weights>
std::ostream &operator<<(std::ostream &os, neuron<Weights> const &n) {
    return os << "{" << n.bias << " [" << n.weights << "]}";
}


auto city_name(std::size_t const city_index) {
    return std::get<0>(cities[city_index]);
}


template<std::size_t Inputs, std::size_t Cities>
std::ostream &
        operator<<(std::ostream &os, ::result<Inputs, Cities> const &result) {
    if (result.example.city_index == result.answer) {
        os << "✅ ";
    } else {
        os << "X  ";
    }
    return os << city_name(result.example.city_index) << " -> "
              << city_name(result.answer) << " at "
              << (100 * result.probabilities[result.answer])
              << "%\nProbabilities [" << result.probabilities << "] Loss "
              << result.loss << '\n';
}


template<std::size_t Weights, std::size_t Cities>
std::ostream &operator<<(std::ostream &os, ::model<Weights, Cities> const &m) {
    os << "Generation " << m.generation << "\nCorrectness: ";
    ::print(os, m.success_rate, '/') << "\nLosses: ";
    ::print(os, m.losses, '/') << '\n';
    return os << m.network << '\n';
}