| 94 | } |
| 95 | |
| 96 | static inline std::string get_objective_function(lbann::model* m) |
| 97 | { |
| 98 | std::stringstream stream; |
| 99 | stream << "Objective: "; |
| 100 | |
| 101 | auto terms = m->get_objective_function()->get_terms(); |
| 102 | bool first = true; |
| 103 | for (const auto& term : terms) { |
| 104 | // Only consider layer terms |
| 105 | auto lterm = dynamic_cast<lbann::layer_term*>(term); |
| 106 | if (!lterm) |
| 107 | continue; |
| 108 | lbann::Layer* layer = <erm->get_layer(); |
| 109 | |
| 110 | // Try as an EvalType evaluation layer |
| 111 | lbann::EvalType objective = lbann::EvalType(-999.0); |
| 112 | auto eval_layer = |
| 113 | dynamic_cast<lbann::abstract_evaluation_layer<lbann::EvalType>*>(layer); |
| 114 | // If not working, try as a DataType layer |
| 115 | if (!eval_layer) { |
| 116 | auto eval_layer_data = |
| 117 | dynamic_cast<lbann::abstract_evaluation_layer<lbann::DataType>*>(layer); |
| 118 | if (!eval_layer_data) |
| 119 | continue; |
| 120 | objective = static_cast<lbann::EvalType>(eval_layer_data->get_value()); |
| 121 | } |
| 122 | else { |
| 123 | objective = eval_layer->get_value(); |
| 124 | } |
| 125 | |
| 126 | if (!first) |
| 127 | stream << ", "; |
| 128 | stream << std::fixed << std::setprecision(4) << objective; |
| 129 | first = false; |
| 130 | } |
| 131 | |
| 132 | stream << " "; |
| 133 | return stream.str(); |
| 134 | } |
| 135 | |
| 136 | namespace lbann { |
| 137 | namespace callback { |
no test coverage detected