【无限停工中】在嵌入式平台实现CNN

单片机(Cortex-M内核,无操作系统)可以跑深度学习吗? 

                                                                                ——Read Air  2019.8.20


Xu_CNN框架

待处理:

  • 1.需要设计一个可读写的消息栈 ()
  • 2.函数的类型参数使用结构体传入 (已实现)
  • 3.动态开辟内存 (部分实现)
  • 4.加法函数使用一维方式遍历 ()
  • 5.错误检查函数可以设置统一关闭以提高运算速度()
  • 6.错误检查时先将指针内数据取出 ()
  • 7.卷积时对于乘法溢出做判断 ()
  • 8.对malloc申请的矩阵做特殊标记以便精准释放()
  • 9.对所有矩阵处理函数添加空指针检查 ()

1函数表

1.1训练部分

1.1.1 矩阵乘法函数 _ErrLog MatrixMulti(_Mat* MatA,_Mat* MatB,_Mat* MatR); //矩阵乘法 MatR = MatA * MatB;

解释:对MatR的尺寸也需要检验是因为MatR必须事先创建。

1.1.2 矩阵加法函数

1.1.3 单元素Sigmoid函数

1.1.4 矩阵Sigmoid函数

1.1.5 交叉熵计算函数

1.1.6 矩阵梯度计算函数

1.1.7 矩阵生成函数

1.1.8 全0赋值函数

1.1.9 全1赋值函数

1.1.10 随机赋值函数

1.1.11 矩阵ReLU函数

1.1.12

1.1.13

1.2推理部分

 

 

2 宏参数

Data_8b

1

8位类型数据

Data_16b

2

16位类型数据

Data_32b

4

32位类型数据

Data_64b

8

64位类型数据

Err_OK

0

错误号:无错误

Err_ZeroSize

1

错误号:零维数据

Err_SizeNotMatch

2

错误号:矩阵维度不匹配

Err_SizeTooBig

3

错误号:矩阵尺寸超大

Err_DivByZero

4

错误号:除零错误

Err_MallocFail

5

错误号:内存开辟失败

Err_TypeConfliction

6

错误号:矩阵类型冲突

Err_UnexpectType

7

错误号:未知数据类型

Err_NullAddress

8

错误号:空指针

 

9

 

 

2019.8.26

1.定义了矩阵结构体

2.定义了错误号结构体

2019.8.27

1.修改了矩阵结构体,删除有无符号特性,统一为有符号数

2.完成了所有类型矩阵乘法函数

3.完成了所有类型矩阵加法函数

4.完善了错误检测机制

2019.8.29

1.完成0矩阵生成函数

2.完成1矩阵生成函数

3.完成矩阵ReLU函数

4.完成矩阵Sigmoid函数

5.完成交叉熵计算函数

6.将矩阵加法函数修改为case识别数据类型

2019.8.30

1.修复了部分函数中的BUG

2.完成了卷积函数

3.优化了全0、全1函数,改为批量赋值

4.完成了随机赋值函数

5.完成了矩阵内存释放函数

6.将之前写的矩阵处理函数归到Xu_CNN_base中,作为基础函数库

2019.8.31

1.完成了矩阵复制函数

 

 

基础函数已全部实现,目前发现malloc()在开辟较大内存时(208Bytes以上)申请失败,工程无法继续推进,遂停摆(2019.8.31)


希望可以走下去

发布了44 篇原创文章 · 获赞 203 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/ReadAir/article/details/100128407