| #pragma once |
| #include "../layers/layer.hpp" |
| #include "../layers/dense.hpp" |
| #include <vector> |
| #include <memory> |
|
|
| namespace newnet { |
|
|
| class Sequential { |
| public: |
| std::vector<std::unique_ptr<Layer>> layers; |
| |
| |
| void add(Layer* layer) { |
| layers.emplace_back(layer); |
| } |
| |
| |
| |
| Tensor forward(const Tensor& input) { |
| Tensor current = input; |
| for (auto& layer : layers) { |
| current = layer->forward(current); |
| } |
| return current; |
| } |
| |
| |
| |
| void backward(const Tensor& grad_output) { |
| Tensor current_grad = grad_output; |
| for (int i = (int)layers.size() - 1; i >= 0; i--) { |
| current_grad = layers[i]->backward(current_grad); |
| } |
| } |
| |
| |
| std::vector<Tensor*> parameters() { |
| std::vector<Tensor*> params; |
| for (auto& layer : layers) { |
| auto layer_params = layer->parameters(); |
| params.insert(params.end(), layer_params.begin(), layer_params.end()); |
| } |
| return params; |
| } |
| }; |
|
|
| } |
|
|