卷积运算


#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();
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值