c++实现Pooling过程
来源:互联网 发布:linux 执行python脚本 编辑:程序博客网 时间:2024/05/21 01:32
直接上代码:
#include<iostream>#include<vector>using namespace std;int main(){ //定义被卷积的矩阵(其实是一个数组,数组元素的个数8*8) int const map = 8; float A[map*map] = { 8, 7, 6, 5, 4, 3, 2, 1, 1, 2, 3, 4, 5, 6, 7, 8, 8, 7, 6, 5, 4, 3, 2, 1, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 8, 7, 6, 5, 4, 3, 2, 1, 1, 2, 3, 4, 5, 6, 7, 8, }; //定义卷积核矩阵(其实也是一个数组,数组元素的个数3*3) int const kernel = 3; //计算卷积输出矩阵的维数(其实是输出数组元素个数的开根号) int const outm = map - kernel + 1; //被卷积矩阵的维数-卷积核的维数+1 即8-3+1=6 //计算卷积过程中的被卷积矩阵的宽和高(就是把宽拉成和卷积核的高一样,这样才好对应相乘) int const convAw = kernel*kernel;//3*3=9 int const convAh = map*map;//8*8=64 float A_convert[convAh*convAw] = { 0 };//定义一个卷积过程中的矩阵(也就是被拉长过后的矩阵) for (int i = 0; i < outm; i++) { for (int j = 0; j < outm; j++) { int wh = i * outm * convAw + j * convAw; int col1 = i * map + j; A_convert[wh] = A[col1]; //第一次循环时把A[0] 的值赋给 A_convert[0] A_convert[wh + 1] = A[col1 + 1];//第一次循环时把A[1] 的值赋给 A_convert[1] A_convert[wh + 2] = A[col1 + 2];//第一次循环时把A[2] 的值赋给 A_convert[2] int col2 = (i + 1) * map + j; A_convert[wh + 3] = A[col2]; //第一次循环时把A[8] 的值赋给 A_convert[3] A_convert[wh + 4] = A[col2 + 1];//第一次循环时把A[9] 的值赋给 A_convert[4] A_convert[wh + 5] = A[col2 + 2];//第一次循环时把A[10] 的值赋给 A_convert[5] int col3 = (i + 2) * map + j; A_convert[wh + 6] = A[col3]; //第一次循环时把A[16] 的值赋给 A_convert[6] A_convert[wh + 7] = A[col3 + 1]; //第一次循环时把A[17] 的值赋给 A_convert[7] A_convert[wh + 8] = A[col3 + 2]; //第一次循环时把A[18] 的值赋给 A_convert[8] } } vector<int> C; for (int i = 0; i < outm; i++) { int max; for (int j = 0; j < outm; j++) { int m = i * outm * convAw + j * convAw; int n; max = A_convert[m]; for (n = 0; n < convAw; n++) { if (A_convert[m + n] > max ) { max = A_convert[m + n]; } } C.push_back(max); } } //输出原始输入矩阵 cout << "原始输入矩阵:" << endl; for (int i = 0; i < map; i++) { for (int j = 0; j < map; j++) { cout << A[i*map+ j] << " "; } cout << endl; } cout << endl; //输出Pooling后矩阵 cout << "Pooling后矩阵:" << endl; for (int i = 0; i < outm; i++) { for (int j = 0; j <outm; j++) { cout << C[i*outm + j] << " "; } cout << endl; } cout << endl; system("pause"); return 0;}
阅读全文
0 0
- c++实现Pooling过程
- k-max pooling实现
- Pooling
- pooling
- 存储过程的简单实现[C#]
- c#+oracle存储过程实现分页
- c#+oracle存储过程实现分页
- "rpm -qa" C 接口的实现过程
- 用c实现俄罗斯方块游戏过程
- Connection Pooling
- max pooling
- 池化pooling
- max pooling
- Database Pooling
- Object Pooling
- RoI Pooling
- max pooling
- ROI Pooling
- clamAV 安装与测试
- 如何用一个Java工具类构建sql语句
- 关于set的自定义比较函数的使用及结构体的上下二分用法
- 卷积网络 步长&填充 大小 与输入输出大小的关系
- Maven详解(二)------ Maven的安装配置
- c++实现Pooling过程
- MySQL学习篇-CRUD之一
- 回声消除原理 此博文包含图片
- curl错误: curl: (1) Protocol 'http not supported or disabled in libcurl
- XlistviewDemo
- 织梦自定义表单添加地区联动显示数字解决办法(支持三级)
- asp.net mvc 过滤器
- Java9都快发布了,Java8的十大新特性你了解多少呢?
- 最小生成树