#define __WINDOWS__ 1
#include "libidx.h"
#include "libeblearn.h"
#include "libeblearntools.h"
//#include "netconf.h"
#include <iostream>
using namespace std;
using namespace ebl;
uint dump_count = 0;
void test_convolution_layer_fprop();
int main(int argc,char** argv)
{
test_convolution_layer_fprop();
return 0;
}
void test_convolution_layer_fprop()
{
intg ini = 3;//原矩阵的行
intg inj = 3;//原矩阵的列
idxdim ker(2,2);//定义核的维数
idxdim stride(1,1);//定义卷积窗口的步长
intg si = 1 + ini - ker.dim(0);//卷积后的矩阵行,因为定义stride(1,1),所以是1+...
intg sj = 1 + inj - ker.dim(1);//卷积后的矩阵列
state<double> in(1, ini, inj);//in为输入矩阵
state<double> out(1, si, sj);//out为输出矩阵
in.pretty();//显示in的维数
in.printElems();//显示in中的数据
out.pretty();//同上
out.printElems();
idx<intg> table(1, 2);
table.printElems();
idx_clear(table);
table.printElems();
idx<intg> tableout = table.select(1, 1);
tableout.printElems();
ddparameter<double> prm(10000);
convolution_layer<double> c(&prm, ker, stride, table);
double fact = 0.05;
in.set(1, 0, 0, 0);
in.set(2, 0, 0, 1);
in.set(3, 0, 0, 2);
in.set(4, 0, 1, 0);
in.set(5, 0, 1, 1);
in.set(6, 0, 1, 2);
in.set(7, 0, 2, 0);
in.set(8, 0, 2, 1);
in.set(9, 0, 2, 2);
c.convol.kernel.set(1 * fact, 0, 0, 0);
c.convol.kernel.set(2 * fact, 0, 0, 1);
c.convol.kernel.set(3 * fact, 0, 1, 0);
c.convol.kernel.set(4 * fact, 0, 1, 1);
c.convol.kernel.printElems();//输出卷积核中的元素
c.fprop(in, out);
out.printElems();
c.adder.bias.set(-2.85, 0);
c.fprop(in, out);
out.printElems();
}