c++实现卷积过程
来源:互联网 发布:java开源网盘系统 编辑:程序博客网 时间:2024/06/11 18:19
直接上代码:
#include<iostream>#include<vector>using namespace std;int main(){ //定义被卷积的矩阵(其实是一个数组,数组元素的个数8*8) int const map = 8; float A[map*map] = { 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8 }; //定义卷积核矩阵(其实也是一个数组,数组元素的个数3*3) int const kernel = 3; float B[kernel*kernel] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }; //计算卷积输出矩阵的维数(其实是输出数组元素个数的开根号) 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++) { for (int j = 0; j < outm; j++) { int a = 0; int wh = i * outm * convAw + j * convAw; for (int m =0; m < convAw; m++) { a += A_convert[wh + m] * B[m] ; } C.push_back(a); //在C中添加数据a } } //输出被卷积矩阵 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; //输出卷积核矩阵 cout << "卷积核矩阵:" << endl; for (int i = 0; i < kernel; i++) { for (int j = 0; j < kernel; j++) { cout << B[i*kernel + j] << " "; } cout << endl; } cout << endl; //输出卷积后输出矩阵 cout << "卷积后输出矩阵:" << endl; for (int i = 0; i < outm; i++) { for (int j = 0; j < outm; j++) { cout << C[i*outm + j] << " "; } cout << endl; } system("pause"); return 0;}
阅读全文
0 0
- 卷积神经网络实现过程
- c++实现卷积过程
- 卷积C语言实现
- C语言实现序列卷积
- 一维卷积c实现
- tensorflow简单实现卷积前向过程
- 离散卷积的C语言实现
- C语言实现二维图像卷积
- python实现卷积层的前向后向传播过程
- 卷积实现
- 【算法+图像处理】2D卷积与快速卷积算法C语言实现
- 图像处理之C语言实现二维卷积
- 高斯卷积核如何生成 C语言实现
- 编写C语言版本的卷积神经网络CNN之三:CNN的误差反向传播过程
- 二维卷积c代码
- Faster rcnn test浮点运算次数(卷积实现过程,Faster rcnn总体结构和参数)
- 数字图像处理系列 卷积过程
- matlab实现循环卷积
- 搜索我文章的访问(csdn搜索自己博客的办法)
- 面试题
- 百度之星之路径交
- C++调用结构体
- LinearLayout权重布局
- c++实现卷积过程
- 剑指offer(4)—重建二叉树
- 如何快速的有序的对多层级结构的代码进行分类管理
- Qt for android 开机自启动、开机黑屏处理
- Java使用Interceptor+redis去实现请求重复频繁提交问题
- 优秀开源项目之四:CrashRptProbe,查询程序奔溃的利器
- 我最喜欢的10条编程语录
- 1020:排序问题2
- 迭代器失效总结