之前实现的CNN是多层卷积池化最后加上一个判别层形成的,但是只有一个通道一个核。对于三个通道的图像这样显然是不够好的,不能利用颜色信息。所以就大改了一波,形成一个多通道的CNN。还是先展示测试代码:
#include "cnn.hpp"
int main(int argc, char** argv)
{
using cnn_type = cnn <
nadam, sigmoid, XavierGaussian // 判别层使用的更新方法、激活函数和初始化方法
, 3, 32, 32, 4 // 3通道、32*32图像、4输出的判别层
, nadam, ReLu, XavierGaussian // 卷积池化层使用的更新方法、激活函数和初始化方法
, 3 // 3卷积核
, 2, 2 // 卷积核尺寸
, 2, 2 // 卷积核步幅
, 2, 2 // 池化层尺寸
, 3 // 层输出(下一层通道数)
, 3 // 3卷积核
, 2, 2 // 卷积核尺寸
, 2, 2 // 卷积核步幅
, 2, 2 // 池化层尺寸
, 3 // 层输出(下一层通道数)
, 2 // 2卷积核
, 2, 2 // 卷积核尺寸
, 2, 2 // 卷积核步幅
, 2, 2 // 池化层尺寸
, 2 // 最终输出
> ;
cnn_type cnn_layer;
cnn_type::input_type mti(.4);
cnn_type::ret_type mto(.8);
weight_initilizer::cal(mti, 0., 1.);
weight_initilizer