3#include <cereal/access.hpp>
4#include <cereal/archives/binary.hpp>
5#include <cereal/archives/portable_binary.hpp>
6#include <cereal/cereal.hpp>
7#include <cereal/types/base_class.hpp>
8#include <cereal/types/polymorphic.hpp>
12#include "utils/Functions.hpp"
13#include "utils/Serialize.hpp"
27 :
Layer(inputShape), inputShape(inputShape) {
28 type = LayerType::FLATTEN;
34 std::string
getSlug()
const override {
return slug; }
43 std::vector<std::vector<std::vector<double>>> inputs) {
44 int rows = std::get<0>(inputShape);
45 int cols = std::get<1>(inputShape);
48 std::vector<double> flatInputs;
49 for (
const std::vector<std::vector<double>> &input : inputs) {
50 std::vector<double> flattenedInput = flatten2DVector(input, rows, cols);
51 flatInputs.insert(flatInputs.end(), flattenedInput.begin(),
52 flattenedInput.end());
55 const int numRows = inputs.size();
56 const int numCols = rows * cols;
58 Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>>(
59 flatInputs.data(), numRows, numCols);
62 void feedInputs(std::vector<std::vector<std::vector<double>>> inputs,
63 bool training)
override {
64 Eigen::MatrixXd flattenedInputs =
flatten(inputs);
68 Eigen::MatrixXd
feedInputs(Eigen::MatrixXd inputs,
bool training)
override {
77 friend class cereal::access;
79 std::tuple<int, int> inputShape;
80 std::string slug =
"fltn";
82 template <
class Archive>
83 void serialize(Archive &ar) {
84 ar(cereal::base_class<Layer>(
this), inputShape);
87 Eigen::MatrixXd computeOutputs(Eigen::MatrixXd inputs,
88 bool training)
override {
97template <
class Archive>
98struct specialize<Archive, NeuralNet::Flatten,
99 cereal::specialization::member_serialize> {};
Definition Flatten.hpp:16
Flatten(std::tuple< int, int > inputShape)
Construct a new Flatten object.
Definition Flatten.hpp:26
Eigen::MatrixXd flatten(std::vector< std::vector< std::vector< double > > > inputs)
This method flattens a 3D vector into a 2D Eigen::MatrixXd.
Definition Flatten.hpp:42
Eigen::MatrixXd feedInputs(Eigen::MatrixXd inputs, bool training) override
This method is used to feed the inputs to the layer.
Definition Flatten.hpp:68
void feedInputs(std::vector< std::vector< std::vector< double > > > inputs, bool training) override
This method is used to feed the inputs to the layer.
Definition Flatten.hpp:62
std::string getSlug() const override
Flatten layer's slug.
Definition Flatten.hpp:34
void setOutputs(Eigen::MatrixXd outputs)
Definition Layer.hpp:143