diff --git a/src/include/color.hpp b/src/include/color.hpp new file mode 100644 index 0000000..39dff2d --- /dev/null +++ b/src/include/color.hpp @@ -0,0 +1,57 @@ +#ifndef SANAE_COLOR_HPP +#define SANAE_COLOR_HPP + +#include +#include +#include + +class FontColor { +public: + static constexpr const char* CLEAR = "\033[39m"; + static constexpr const char* BLACK = "\033[30m"; + static constexpr const char* RED = "\033[31m"; + static constexpr const char* GREEN = "\033[32m"; + static constexpr const char* YELLOW = "\033[33m"; + static constexpr const char* BLUE = "\033[34m"; + static constexpr const char* PURPLE = "\033[35m"; + static constexpr const char* CYAN = "\033[36m"; + static constexpr const char* WHITE = "\033[37m"; + + static std::string RGB(uint8_t R, uint8_t G, uint8_t B){ + std::stringstream buf; + buf << "\033[38;2;" << std::to_string(R) << ";" << std::to_string(G) << ";" << std::to_string(B) << "m"; + + return buf.str(); + } +}; + +class BgColor { +public: + static constexpr const char* CLEAR = "\033[49m"; + static constexpr const char* BLACK = "\033[40m"; + static constexpr const char* RED = "\033[41m"; + static constexpr const char* GREEN = "\033[42m"; + static constexpr const char* YELLOW = "\033[43m"; + static constexpr const char* BLUE = "\033[44m"; + static constexpr const char* PURPLE = "\033[45m"; + static constexpr const char* CYAN = "\033[46m"; + static constexpr const char* WHITE = "\033[47m"; + + static std::string RGB(uint8_t R, uint8_t G, uint8_t B){ + std::stringstream buf; + buf << "\033[48;2;" << std::to_string(R) << ";" << std::to_string(G) << ";" << std::to_string(B) << "m"; + + return buf.str(); + } +}; + +template +requires std::same_as || std::same_as +static std::string highlight(ColorType color, std::string text){ + std::stringstream buf; + buf << color << text << FontColor::CLEAR << BgColor::CLEAR; + + return buf.str(); +} + +#endif // SANAE_COLOR_HPP \ No newline at end of file diff --git a/src/include/neuralnetwork/layers/Convolution.hpp b/src/include/neuralnetwork/layers/Convolution.hpp new file mode 100644 index 0000000..205a378 --- /dev/null +++ b/src/include/neuralnetwork/layers/Convolution.hpp @@ -0,0 +1,74 @@ +#ifndef SANAE_NEURALNETWORK_CONVOLUTION_HPP +#define SANAE_NEURALNETWORK_CONVOLUTION_HPP + +#include +#include +#include +#include +#include "layerbase.hpp" +#include "../../matrix/matrix" // MatrixクラスとStdExecPolicyコンセプト + +// 畳み込みレイヤー +template +requires StdExecPolicy +class Convolution : public LayerBase { +private: + using Kernel = std::vector>; + + const size_t _kernel_width; + const size_t _kernel_height; + + const size_t _in_channel_size; + const size_t _out_channel_size; + + Kernel kernel; + +public: + static constexpr std::string_view name() { return "Convolution"; } + + Convolution(size_t kernel_width, size_t kernel_height, size_t in_channel_size, size_t out_channel_size) + : _kernel_width(kernel_width), + _kernel_height(kernel_height), + _in_channel_size(in_channel_size), + _out_channel_size(out_channel_size) + { + for(size_t i = 0; i < ){ + + } + } + + /** + * 前向き伝播 + * @param in 入力 + * @return 出力 + * @note out = 1 / (1 + exp(-in)) + */ + Matrix forward(const Matrix& in) override{ + try{ + + + } + catch(const std::exception& e){ + std::cerr << "Error in Convolution forward: " << e.what() << std::endl; + throw; + } + } + /** + * 逆伝播 + * @param dout 出力の勾配 + * @return 入力の勾配 + * @note dx = dout ⊙ (out ⊙ (1 - out)) + */ + Matrix backward(const Matrix& dout) override{ + try{ + + + } + catch(const std::exception& e){ + std::cerr << "Error in Convolution backward: " << e.what() << std::endl; + throw; + } + } +}; + +#endif //SANAE_NEURALNETWORK_CONVOLUTION_HPP \ No newline at end of file