| 216 | } |
| 217 | |
| 218 | const vector<Tensor> FeedForwardNet::Backward(int flag, const Tensor& grad) { |
| 219 | vector<Tensor> param_grads; |
| 220 | std::stack<Tensor> buf; |
| 221 | Tensor tmp = grad; |
| 222 | for (int i = (int)layers_.size() - 1; i >= 0; i--) { |
| 223 | // LOG(INFO) << layers_.at(i)->name() << " : " << tmp.L1(); |
| 224 | auto ret = layers_.at(i)->Backward(flag, tmp); |
| 225 | tmp = ret.first; |
| 226 | if (ret.second.size()) { |
| 227 | for (int k = (int)ret.second.size() - 1; k >= 0; k--) { |
| 228 | buf.push(ret.second[k]); |
| 229 | // LOG(INFO) << " " << buf.top().L1(); |
| 230 | } |
| 231 | } |
| 232 | } |
| 233 | while (!buf.empty()) { |
| 234 | param_grads.push_back(buf.top()); |
| 235 | buf.pop(); |
| 236 | } |
| 237 | return param_grads; |
| 238 | } |
| 239 | |
| 240 | std::pair<Tensor, Tensor> FeedForwardNet::Evaluate(const Tensor& x, |
| 241 | const Tensor& y, |
no test coverage detected