资源分配
环境:Vivado2019.2。
Part:xcku040-ffva1156-2-i,内嵌DSP个数 1920个,BRAM 600个也就是21.1Mb。
说明:通过识别加高斯白噪声的正弦波、余弦波、三角波较简单的实例来利用FPGA实现一维CNN网络,也就是将下列数据传输至FPGA,识别出下面哪些是正弦波、余弦波、三角波,通过简单实例实践,从而实现更复杂的网络。主要是实现CNN网络的搭建,本文因为追求速度利用了大量的DSP,后期加入复杂网络进行DSP复用。
第一节:基于FPGA的一维卷积神经网络CNN的实现(一)框架
第二节:基于FPGA的一维卷积神经网络CNN的实现(二)资源分配
第三节:基于FPGA的一维卷积神经网络CNN的实现(三)训练网络搭建及参数导出(附代码)
第四节:基于FPGA的一维卷积神经网络CNN的实现(四)Matlab前向验证(附代码)
第五节:基于FPGA的一维卷积神经网络CNN的实现(五)数据量化(附代码)
第六节:基于FPGA的一维卷积神经网络CNN的实现(六)卷积层实现
第七节:基于FPGA的一维卷积神经网络CNN的实现(七)池化层实现
第八节:基于FPGA的一维卷积神经网络CNN的实现(八)激活层实现
再次认识整个网络,第一层卷积核、第一次池化是串行执行,第一层池化和第二层卷积是并行执行,第二层池化、第三层卷积、全连接是并行执行。
接下来就各层分析以下资源消耗情况
一、DSP资源分配
我们知道,卷积主要做的是乘加运算,FPGA加速主要是通过内嵌的DSP资源去做这些乘法。
DSP? 啥
①27bit预加器(加法器)
②27*18乘法器
③可以做加(减)法器,累加(减)器,逻辑运算(与或非)
④模式探测器,主要实现带掩膜的数据比较,上下溢出检测,记到一定数据对结果进行重置功能。
⑤数据选择器
例如如下模型,卷积核通道为1,卷积核元素为3个,需要的乘法器为3个,也就是需要3个DSP。
我们所设计的网络
1.第一层卷积
第一层卷积:1通道,6个卷积核,卷积核内的元素为5,卷积所需要的的乘法器为1×6×5=30,那么我们所需的DSP资源为1×6×5=30个。
2.第二层卷积
第二层卷积:6通道,16个卷积核,卷积核内的元素为5,卷积所需要的的乘法器为6×16×5=480,那么我们所需的DSP资源为6×16×5=480个。
3.第三层卷积
第三层卷积:16通道,16个卷积核,卷积核内的元素为5,卷积所需要的的乘法器为16×16×5=1280,那么我们所需的DSP资源为16×16×5=1280个。
4、全连接层
全连接层:理论上是将第三层卷积的16条通道25点的结果拼接成一条400点的数据输出,然后分别和3条400点的权重相乘相加得到3个结果R1、R2、R3,但是这样串行的去相乘相加无疑很耗时间。
但是我们用的可是可以并行的FPGA,出来的并行数据为何要连接成串行计算呢?
我们何不把权重(事先存储的参数数据,想咋存都由你,或者外部传输进去的数据,想怎么传还是由你)也构造成这种形式,让地三层卷积16通道结果出来的同时就立马可以分别和3个通道对应的权重相乘相加,这不就达到了并行的结果。
这样所需要的的乘法器为就为16×3,也就是DSP所需16×3=48个。
5.总结
层 | 层级特征 | 使用DSP个数 |
---|---|---|
第一层卷积 | 1通道、6个卷积核、卷积核元素为5 | 1×6×5=30 |
第二层卷积 | 6通道、16个卷积核、卷积核元素为5 | 6×16×5=480 |
第三层卷积 | 16通道、16个卷积核、卷积核元素为5 | 16×16×5=1280 |
全连接 | 第三层16通道卷积的输出,分别乘加3个16通道权重 | 16×3=48 |
总 | 1838 |
对比一下资源使用表:
DSP资源没这么多的时候,就考虑复用。
二、BRAM资源
每层所需的权重参数本设计是暂存在ROM中,而ROM所占用的资源为BRAM资源,后续复杂网络,权重参数可能会通过PCIE总线进行传输。
所谓的权重参数就是每个卷积核、每条卷积核相应的偏置,全连接参数、偏置。
1.第一层卷积
第一层通道为1,卷积核个数为6,卷积核元素为5。那么第一层卷积参数就为6×5=30,别忘了每个卷积最后的结果都会加一个偏置,也就是一条卷积核卷积完成后的结果上整体去加上这个偏置,所以偏置个数为6,那么第一层所需的参数为6×5+6=36。
比如该设计的第一层的1通道16个卷积核,卷积核元素个数为5的参数:
-0.41392267 -0.37628385 -0.38678840 -0.10021902 -0.42755467
0.46177748 0.47878936 -0.011841099 0.36656979 -0.33966425
0.19130668 0.14565417 -0.17707989 0.26029965 0.29681087
-0.29763651 -0.37699795 0.35222396 -0.20345914 -0.37277707
-0.36939585 0.19159849 -0.23786691 -0.37849170 -0.44727486
-0.075469948 -0.18664657 -0.30474073 -0.23001774 -0.098302089
比如该设计的第一层6个卷积核对应的偏置参数:
-0.16858324 -0.25512469 -0.27672836 -0.19529539 0.45146680 0.46845901
2.第二层卷积
第二层通道为6,卷积核个数为16,卷积核元素为5。那么第二层卷积参数就为6×16×5=480,偏置个数为16,那么第二层所需的参数为6×16×5+16=496。
比如该设计的第二层的6通道16个卷积核,卷积核元素个数为5参数:
val(:,:,1) =
-0.1547 0.2032 0.1963 -0.1448 -0.1131
0.1735 0.1296 0.1969 0.2054 -0.0226
-0.0928 -0.0498 0.2513 0.0210 -0.0890
0.0415 -0.0431 0.1257 0.1251 0.1287
0.0116 0.1061 -0.1738 0.1131 -0.0005
-0.1320 0.0712 0.0488 0.0231 0.0075
val(:,:,2) =
0.1026 -0.0004 0.0034 -0.0461 0.1522
-0.1177 -0.0905 0.0413 -0.1417 -0.1348
0.0588 0.0095 0.0238 -0.0664 -0.1272
-0.0614 0.0279 -0.1217 -0.0029 0.0752
0.0962 -0.1873 0.0188 -0.1346 0.0241
-0.1899 -0.1165 -0.0286 0.1052 0.1000
val(:,:,3) =
-0.2075 0.0816 -0.1127 0.0045 -0.0761
0.2506 0.2455 -0.0971 -0.0761 -0.0129
0.2404 -0.0074 0.0966 -0.0890 -0.0007
0.0926 0.1140 0.1104 -0.0333 0.0803
-0.0943 0.0773 0.1850 0.0859 -0.0638
-0.1796 -0.0393 -0.0565 -0.1135 -0.0263
val(:,:,4) =
-0.0133 -0.0443 -0.0063 -0.0984 0.0493
0.1532 0.1724 -0.0733 -0.0340 -0.0326
-0.0105 0.1516 -0.0407 -0.0529 -0.0170
-0.1523 0.0605 -0.0966 -0.0619 -0.1496
-0.1155 -0.0049 -0.1252 0.1687 0.2154
-0.1118 -0.0710 -0.0020 0.0922 0.2124
val(:,:,5) =
-0.0509 0.0435 -0.0144 0.1848 0.0542
0.2265 0.0743 0.1912 0.0046 -0.0996
-0.0427 -0.1315 -0.0471 0.0246 -0.0847
0.1970 -0.1339 -0.1562 -0.0466 0.1271
-0.1135 -0.0592 -0.1675 0.0143 0.0434
0.0487 -0.1833 0.0461 0.1186 -0.1582
val(:,:,6) =
-0.0779 0.1322 0.2086 0.1222 0.0509
-0.1968 -0.1623 0.0085 -0.0786 0.0393
0.0522 -0.0438 -0.1044 -0.0294 -0.0912
0.1010 0.2230 0.1075 0.0100 -0.0050
0.1049 0.1498 0.0103 0.1068 0.1174
-0.0630 0.1601 -0.0098 0.1374 0.2107
val(:,:,7) =
0.0782 -0.0438 -0.1652 0.0035 0.0205
0.2311 0.0875 -0.1125 0.0758 0.1435
-0.0878 0.0090 0.0917 -0.1049 -0.1181
0.1242 -0.0596 -0.0068 0.1177 -0.0373
0.0162 0.0092 -0.1835 -0.0169 -0.0970
-0.0093 -0.0643 0.1495 0.1413 0.0363
val(:,:,8) =
0.1482 -0.1471 0.0542 0.0859 -0.1110
-0.0803 0.1438 0.0147 -0.0928 0.0743
0.1344 0.1544 0.1804 0.1789 0.1898
-0.0955 -0.1667 -0.1229 -0.2301 -0.0559
0.1493 -0.1870 -0.0373 -0.0948 0.0036
-0.0054 -0.1074 0.0519 0.0120 -0.1034
val(:,:,9) =
0.0590 0.0746 -0.1623 0.0310 0.5379
0.1085 -0.0050 -0.1275 -0.0404 0.1794
-0.0571 0.0902 0.1722 -0.0147 0.1321
0.0155 -0.0003 -0.1564 0.1006 -0.0344
0.1347 0.0920 -0.0719 -0.0287 -0.1190
-0.1014 0.0934 0.0186 -0.1601 -0.1939
val(:,:,10) =
-0.2035 0.0999 -0.1322 0.0682 -0.1048
0.0995 -0.0815 0.1874 -0.1160 0.0260
-0.1675 -0.1447 -0.1530 0.0755 0.0486
-0.0879 -0.1178 -0.0372 -0.0689 -0.1216
-0.1669 -0.0752 0.1888 0.0595 -0.0050
0.0705 0.0905 -0.0413 0.1929 0.2123
val(:,:,11) =
-0.0955 0.0658 -0.1620 -0.1087 0.0680
0.2258 0.0300 0.1886 -0.0921 -0.0557
0.1444 0.2510 0.1219 -0.0504 0.1861
-0.1379 0.0132 -0.0342 -0.1072 0.0732
-0.1169 -0.0613 -0.0702 -0.0899 0.0119
0.0052 -0.1169 -0.0318 -0.0550 0.1045
val(:,:,12) =
0.0427 -0.1520 -0.1143 0.0906 0.0012
0.1343 -0.0920 0.1269 0.2326 -0.0352
0.1491 -0.0491 0.0240 0.1408 0.2117
-0.1461 -0.0904 -0.0562 0.1058 -0.1816
-0.1743 -0.1477 0.0440 -0.0306 0.0281
0.0376 0.0546 -0.1762 0.1463 -0.0549
val(:,:,13) =
0.0388 -0.0922 0.0928 0.2161 -0.0026
-0.0745 -0.0247 0.0622 0.1282 -0.1368
0.1207 -0.0654 -0.0275 0.0763 -0.0236
0.0025 0.0647 0.0925 0.1709 -0.0178
0.1661 0.2081 0.2127 0.1999 -0.0897
0.2426 0.2030 0.1917 0.1966 0.0323
val(:,:,14) =
-0.0539 0.0233 0.0674 -0.0673 0.0012
0.2553 0.0010 0.0550 -0.0045 0.2548
0.1157 0.1743 0.0559 0.0050 0.2136
-0.1661 0.1464 -0.0778 -0.0510 -0.1443
-0.1775 0.1052 -0.0368 -0.1283 0.0468
0.1562 0.0844 -0.1260 -0.0319 -0.1913
val(:,:,15) =
0.0088 -0.0439 0.1869 0.2156 0.0045
-0.0056 -0.1742 -0.0575 -0.0640 0.1588
-0.1746 0.0565 -0.1516 -0.1399 -0.1901
-0.0961 0.1196 0.0038 -0.1159 0.0634
0.0062 0.1950 0.1605 -0.0952 0.1356
0.2200 0.1404 0.1234 0.1719 -0.1164
val(:,:,16) =
-0.0263 -0.0728 -0.0043 0.1152 0.2091
0.1518 0.1548 0.0271 0.1760 -0.0435
0.1513 0.1026 0.0266 0.0744 0.2038
0.2373 -0.0509 0.0985 0.2076 0.1432
0.1513 0.0789 0.1683 0.0555 -0.1111
0.0974 -0.0354 -0.0795 0.0350 0.0588
第二层16个卷积核对应的偏置:
0.23936687 -0.10661833 0.15271537 0.061077386 0.016900102 -0.069750383 0.11862857 0.083581999 0.081415482 0.034861937 -0.032691609 -0.022287890 0.025896503 -0.085885495 0.035965338 0.23867875
3.第三层卷积
第三层通道为16,卷积核个数为16,卷积核元素为5。那么第二层卷积参数就为16×16×5=1280,偏置个数为16,那么第三层所需的参数为16×16×5+16=1296。
比如该设计的第三层的16通道16个卷积核,卷积核元素个数为5参数:
val(:,:,1) =
-0.0300 0.0059 0.0910 0.0358 0.0334
-0.0742 0.0914 0.0439 0.0247 -0.0544
-0.0398 -0.0362 -0.0330 0.0634 0.0675
-0.0858 0.0750 -0.0045 -0.0618 -0.0959
-0.0090 -0.0846 -0.0634 0.0602 -0.0818
-0.0337 0.0238 0.0320 0.0828 0.0617
0.0066 0.0813 0.0713 0.0830 -0.1103
-0.0977 -0.0097 -0.0735 -0.1122 -0.0822
-0.0529 -0.0054 -0.0204 0.0529 0.0055
0.0368 -0.0193 0.0703 -0.0231 0.0488
0.1028 -0.0910 -0.0572 0.0877 -0.0683
-0.0951 0.0384 -0.0784 0.1030 -0.0543
-0.0076 -0.0692 -0.0111 -0.0090 -0.1038
-0.0101 0.0348 -0.0650 -0.0731 0.0312
0.0617 -0.0485 0.0893 0.0533 -0.0878
-0.1151 -0.0369 0.0463 -0.0897 0.0195
val(:,:,2) =
0.0641 -0.0588 0.1316 0.0727 -0.0295
-0.0841 -0.0773 -0.0449 -0.0536 -0.0172
0.0094 0.1279 0.1216 -0.0060 -0.0594
-0.0335 -0.0194 -0.0694 0.1204 -0.0149
-0.0271 -0.0577 0.0736 0.0085 0.1281
0.0555 -0.0624 -0.0687 0.0265 -0.1115
-0.0136 0.1482 0.0274 0.1024 0.1446
0.1067 -0.0112 0.0499 0.0713 0.1445
0.0596 0.0408 -0.0414 -0.0581 0.1377
-0.0766 0.1030 0.0912 0.1598 -0.0158
0.0247 0.0604 0.0507 0.0489 0.0257
0.0949 0.0817 0.0412 0.1432 0.1386
-0.0829 0.0827 -0.0143 -0.0725 0.1077
0.1112 0.0524 0.1122 0.1327 0.0742
0.0612 0.0809 -0.0110 -0.0770 -0.0872
0.0663 0.0551 -0.0028 -0.0466 -0.0694
val(:,:,3) =
0.1621 0.1361 0.1264 0.0486 0.1578
0.0686 -0.0030 0.0562 0.0578 -0.0606
0.1117 -0.0091 0.0875 0.0292 0.0210
-0.0238 0.0865 0.0586 0.0414 0.0604
0.0991 0.0854 0.0122 0.1483 0.0661
0.0067 -0.1624 -0.1576 -0.0880 -0.0573
0.0110 0.0292 0.1067 0.0781 -0.0308
0.0861 0.1249 0.1486 -0.0215 -0.0297
0.1563 0.0907 0.0150 0.1034 -0.0060
-0.0581 -0.0311 -0.1056 -0.0522 0.0454
0.0818 0.0634 0.1742 -0.0090 0.1096
0.1358 0.1414 -0.0403 0.1785 0.0387
0.0490 -0.0404 -0.0886 -0.0397 -0.0205
0.1462 0.0797 0.1563 -0.0141 -0.0230
-0.1314 0.0173 -0.1656 -0.0656 0.0776
0.1302 0.0702 0.0675 0.1705 0.1217
val(:,:,4) =
0.0640 -0.0430 0.1049 -0.0082 0.1085
-0.1171 -0.0675 0.0608 -0.0063 -0.0495
-0.0777 -0.0361 -0.0731 -0.0087 0.1168
-0.0917 0.0220 -0.0561 -0.0674 -0.0525
0.0594 -0.0636 0.0605 0.0511 0.0714
0.0651 0.1174 -0.0123 -0.0810 0.0241
-0.0633 0.1269 -0.0942 0.0491 0.0948
-0.0597 0.0129 0.0417 0.0205 -0.0363
0.0815 0.1332 -0.0694 0.0736 0.0335
0.0668 -0.1458 0.0435 -0.1186 -0.0521
-0.0390 -0.0872 0.0318 0.1457 -0.0524
-0.0503 -0.0170 0.0140 0.1046 0.1472
0.1184 0.1375 0.1029 0.0809 -0.0580
-0.1392 0.0745 0.0532 0.0209 0.1194
0.1533 0.0698 0.0174 -0.0750 -0.0738
-0.0521 0.0649 -0.0528 0.0391 -0.0016
val(:,:,5) =
-0.0968 0.0373 -0.0269 -0.0538 0.1112
0.0710 -0.0976 0.0625 -0.0128 -0.0343
-0.0451 0.1009 0.0966 0.0343 -0.0087
-0.1024 0.0244 -0.0123 -0.0696 -0.0191
-0.0030 -0.0049 0.0510 0.1273 0.0140
0.1197 0.1444 0.1144 0.0263 -0.0464
-0.0627 -0.0860 0.0486 0.1247 0.0180
0.0410 0.1777 0.3064 0.2090 0.2552
0.0521 0.2137 0.1248 0.0701 0.1518
-0.0407 0.0311 -0.0110 -0.0697 -0.0190
0.0557 0.1220 0.0789 0.2252 0.1032
-0.0498 0.1052 0.0593 0.1192 0.1276
-0.0325 0.0247 0.0055 -0.0340 -0.0720
-0.0722 -0.0243 -0.0276 0.1265 0.1517
0.1561 0.0250 0.1047 -0.0108 -0.0414
0.1583 0.0877 0.1506 0.0433 -0.0789
val(:,:,6) =
-0.0728 0.0442 0.0385 -0.0471 -0.0154
0.0072 0.0391 -0.0084 0.0002 -0.0976
-0.0739 -0.1029 -0.0900 -0.1138 -0.1138
0.0240 -0.0099 -0.1016 0.0084 0.0009
0.0685 -0.1583 0.0727 -0.0094 -0.0257
0.1525 0.0244 0.1001 0.0041 -0.0541
-0.0067 0.1186 -0.1098 0.0470 0.0112
-0.0177 -0.0630 -0.0005 -0.0324 0.0210
-0.0244 -0.0922 -0.1414 0.0240 0.0963
-0.0153 0.0847 0.0212 0.0405 -0.0250
-0.0457 -0.1211 -0.0128 0.0629 -0.0840
0.0466 -0.1379 0.0012 -0.1214 -0.0062
-0.0420 0.0128 0.0123 0.1205 0.0486
-0.0388 0.0229 -0.0180 -0.1282 -0.0137
0.1313 0.1193 0.0976 0.0322 0.1412
0.1529 0.1396 0.1046 0.1261 -0.0089
val(:,:,7) =
0.0305 0.1008 0.0171 0.0179 0.0790
0.0360 -0.0355 0.0322 -0.0712 0.0382
-0.1220 0.0664 -0.0903 0.0191 0.0485
-0.0388 -0.1341 0.0266 0.0054 -0.0307
-0.0856 0.0714 -0.0852 -0.0503 0.0372
0.0881 -0.0982 -0.0699 0.0811 -0.0283
-0.0552 0.0587 0.1054 -0.0041 -0.0736
0.0355 0.0894 0.0794 0.0639 0.0466
0.1013 0.0105 -0.0831 0.1491 0.0375
0.0142 -0.0470 -0.0333 -0.0010 -0.0782
-0.0467 0.1069 0.1561 -0.0448 -0.0016
0.0472 0.0004 0.1106 -0.0354 0.1019
0.1021 -0.0193 0.0950 -0.1098 -0.1190
-0.1160 0.0075 -0.0755 0.0252 0.1069
0.1117 -0.0808 0.0194 0.0890 -0.0550
0.0880 0.1191 0.0649 0.0747 0.0893
val(:,:,8) =
0.0435 -0.0356 0.0296 -0.0361 0.0730
0.0751 -0.0390 0.0266 -0.0949 0.0629
-0.0196 -0.0747 0.0440 0.0165 0.0513
-0.1129 -0.0628 -0.0113 -0.0791 0.0518
-0.0619 0.0621 0.0434 -0.0240 0.0915
-0.0400 0.1049 -0.0402 -0.0252 -0.0030
0.0294 -0.0184 0.0380 -0.0048 -0.0873
0.0284 -0.0668 -0.0598 0.0298 0.0417
0.0087 -0.0351 -0.0639 0.1051 0.0348
-0.0510 -0.0278 0.0614 0.0891 -0.0195
-0.0642 -0.0400 -0.1113 0.0299 -0.1354
0.0222 -0.0814 0.0298 -0.0040 -0.0618
0.0748 0.0859 0.0457 0.1189 -0.0451
-0.0651 -0.1117 -0.0140 -0.0751 0.0786
0.1019 0.0845 0.0676 -0.0045 0.0547
-0.0326 0.0844 0.1374 -0.0234 -0.1025
val(:,:,9) =
0.1020 -0.0721 -0.0498 0.0712 -0.0968
0.0636 0.0878 -0.0437 0.0305 -0.0653
-0.0449 -0.0061 0.0919 -0.1023 0.0782
0.0476 -0.0155 0.0421 0.0641 -0.0475
0.0973 -0.0368 -0.0697 -0.0838 -0.0587
0.1199 0.0692 -0.0492 -0.0270 0.0576
0.0282 0.0490 0.0220 0.0142 0.0207
0.0511 -0.0088 0.0380 0.0553 -0.0538
-0.0840 0.0539 0.0726 0.0839 0.0421
-0.0681 0.0505 -0.1081 -0.0706 0.0561
0.0891 0.0787 0.0465 -0.0763 0.0041
-0.1021 0.0070 0.0716 -0.0913 -0.0685
0.1270 0.0957 0.0706 -0.0932 0.0141
0.0503 -0.0338 -0.0906 -0.0436 -0.0498
0.0952 0.1004 -0.0263 0.1044 -0.0079
-0.0602 0.0199 -0.0371 -0.1195 0.0324
val(:,:,10) =
0.0991 0.1203 0.1527 0.1069 0.0153
0.0762 0.0471 0.0401 0.0581 0.0629
0.1991 0.1850 0.1453 0.2176 -0.0086
0.0341 0.1236 0.0720 0.0371 0.1215
0.0737 0.1050 0.1825 0.1360 0.0698
-0.1324 -0.2803 -0.1920 -0.2690 -0.1511
0.1115 0.1415 0.1538 0.1775 0.0428
0.3504 0.3449 0.3283 0.4411 0.2743
0.1720 0.0770 0.1436 0.2748 0.1496
0.1083 0.0771 0.0430 0.1577 0.0033
0.1286 0.2918 0.2266 0.2191 0.2807
0.2588 0.2072 0.2606 0.1922 0.0717
0.1633 0.0116 -0.0441 0.1433 0.0371
0.1599 0.0242 0.1706 0.2071 0.0818
-0.0658 -0.0983 -0.1772 -0.0653 -0.1437
0.0599 0.0185 0.0306 0.1637 0.1117
val(:,:,11) =
-0.0155 -0.0246 0.1564 0.0839 -0.0153
-0.0388 -0.0532 -0.0131 0.0794 -0.1130
0.1582 -0.0367 0.0567 0.0706 0.0496
0.0101 0.0443 0.0942 0.1220 0.1115
0.1104 0.0393 0.1547 0.0165 0.0257
-0.0487 -0.1320 0.0092 -0.1445 -0.1319
-0.0172 -0.0110 0.1168 -0.0620 0.0649
-0.0037 0.0965 0.0692 0.0283 0.0750
-0.0374 0.0304 0.0673 0.1021 0.0265
0.1022 -0.0159 0.0987 0.0221 0.0592
0.0379 0.0746 0.0873 -0.0230 0.1475
-0.0198 -0.0496 0.1841 0.1499 -0.0143
0.0219 -0.1190 -0.0708 0.0955 -0.0621
0.1101 0.0507 0.0839 -0.0459 -0.0403
0.0512 -0.0695 -0.0248 0.0169 0.0455
0.1353 0.0179 0.1128 0.1278 0.0712
val(:,:,12) =
-0.0453 -0.0323 0.0798 0.0473 -0.0647
0.0191 -0.0265 -0.0889 -0.0915 0.0118
-0.0141 -0.1483 -0.0628 0.0676 0.1102
-0.0710 -0.1261 -0.1621 -0.1377 -0.1023
-0.0774 -0.0565 0.1136 0.0022 0.1304
-0.0034 0.0266 0.1424 0.0637 0.0313
0.0122 0.0241 -0.0629 -0.0120 0.0454
0.0740 -0.0148 -0.0297 -0.0153 0.0419
0.1068 0.0772 -0.0176 0.0532 0.0532
-0.0783 -0.0468 -0.0225 -0.1482 -0.1652
-0.0101 -0.1618 0.0766 0.1619 0.0819
0.0378 0.0532 0.1461 0.0702 0.0348
0.1106 -0.0274 0.1503 0.0333 -0.0033
0.0374 0.0964 0.0587 0.1588 0.1458
0.0903 0.1272 -0.0156 -0.0522 -0.0305
-0.0320 0.1182 0.0995 0.1164 0.0545
val(:,:,13) =
-0.0787 -0.0151 0.1216 -0.0376 -0.0009
0.0269 -0.0652 -0.0491 -0.0345 0.0414
-0.0440 0.0674 0.0606 0.0366 -0.0795
0.0680 0.0460 0.0706 0.0336 0.0139
0.0645 0.0060 0.0517 0.0655 0.0078
0.1490 0.0141 0.0307 0.1802 0.1084
-0.0402 0.0440 -0.0954 -0.0065 -0.0624
-0.0412 0.0398 -0.1044 -0.0771 -0.0866
0.0212 -0.1480 -0.0760 -0.0281 -0.0483
0.0498 -0.0096 -0.0348 0.0915 0.0691
-0.0230 -0.0344 0.0212 0.0308 0.0334
-0.1049 0.0271 -0.0445 -0.0040 -0.0776
0.0908 0.1250 0.0772 0.1192 0.0916
-0.0764 -0.0449 -0.0790 0.0506 -0.1085
0.0619 0.0498 0.1334 0.0219 0.0897
-0.0507 -0.0173 -0.0754 0.0811 0.1074
val(:,:,14) =
-0.0327 0.0909 0.0189 0.0214 0.0418
0.0504 -0.1191 -0.0241 -0.0623 -0.0404
0.1074 -0.0237 -0.0367 0.1319 0.0139
-0.0360 0.1079 0.0172 0.0942 0.1029
-0.0077 -0.0818 0.1205 0.0555 -0.0829
-0.0838 0.0139 -0.0379 -0.0067 0.1236
0.0176 0.1034 0.0427 0.0058 -0.0931
0.0302 -0.1147 0.0932 -0.0200 -0.0405
-0.0797 -0.0112 0.0825 -0.0108 0.0705
0.1372 0.0329 0.1619 0.0312 0.1382
0.0748 0.0047 -0.0299 0.0751 0.0385
-0.0940 -0.0849 0.0957 0.0572 0.0040
0.0056 -0.0456 -0.0036 0.0285 0.0446
0.0550 0.0295 -0.1093 -0.0235 -0.0648
-0.0430 0.0337 -0.0026 0.0455 0.0837
-0.0633 0.0675 0.0342 0.0619 0.0124
val(:,:,15) =
0.1283 0.1020 -0.0208 0.1557 0.0837
-0.0126 -0.0270 -0.0333 -0.0641 -0.1173
-0.0054 0.1227 0.0811 0.1406 0.1286
0.0885 0.0147 0.1081 0.1718 -0.0336
-0.0370 0.0424 0.1475 0.0476 0.0017
0.0432 -0.0571 -0.0842 0.1065 -0.0218
-0.0028 0.0636 0.1474 0.1243 0.0437
0.1233 0.0885 -0.0566 -0.0440 -0.0605
-0.0726 0.1062 -0.0598 -0.0061 -0.0852
-0.0950 0.0541 -0.0050 0.0988 0.1170
0.0166 -0.0144 0.0525 0.0017 -0.0251
0.1199 -0.0228 0.1837 -0.0202 0.0990
-0.1106 0.0370 -0.0154 -0.0860 0.0519
0.1417 0.0517 0.0312 -0.0189 -0.0658
-0.0930 -0.1613 -0.0064 -0.0855 0.0524
0.1479 -0.0182 0.0001 0.0122 0.0495
val(:,:,16) =
0.0506 0.0510 0.0796 0.0178 -0.0208
0.1106 -0.0664 -0.0926 -0.0246 0.0591
-0.0400 -0.1554 0.0390 0.0438 -0.1349
0.0709 -0.1068 -0.0959 -0.1046 -0.0561
-0.0974 -0.0018 0.0486 -0.0129 0.0303
-0.0213 0.0644 0.0659 0.1149 0.1200
-0.1155 0.0751 0.0112 -0.0816 -0.1111
0.0842 -0.0844 -0.1065 -0.0447 0.0027
-0.0385 -0.0315 0.0963 -0.0445 -0.0612
-0.0218 -0.0568 0.0404 -0.0255 -0.0539
-0.1136 -0.0200 0.0135 0.0229 0.0837
-0.0432 0.0776 -0.0398 0.1124 0.0199
0.0435 0.0654 0.0518 -0.0805 0.1011
0.0747 -0.0723 -0.1244 0.0486 -0.1376
0.0138 0.0676 0.1414 0.0231 -0.0258
0.0802 0.0892 0.0440 -0.0780 -0.0201
比如该设计的第三层的16个卷积核对应偏置:
-0.10552140 0.14183277 0.037448838 -0.038199190 -0.022324685 -0.049711946 -0.020050919 -0.0068996837 0.045187593 0.034231447 0.14684045 0.098354153 -0.027797140 0.044615991 0.017090062 0.028110711
4.全连接层
全连接层权重为3个通道,每个通道的长度为400,偏置为3,所需的参数总数为3×400+3=1203。
参数太多避免占用太多篇幅这里就不举例了。
5.总结
总结之前先了解一下:
BRAM 由一定数量固定大小的存储块构成的,使用 BRAM 资源不占用额外的逻辑资源,并且速度快,不过使用的时候消耗的 BRAM 资源只能是其块大小的整数倍,就算你只存了 1 bit 也要占用一个 BRAM。 一个 BRAM 的大小为 36K Bits,并且分成两个小的 BRAM 各自为 18K Bits,排列成又分为上下两块。内部视图如下:
本设计所使用的板子BRAM 600个也就是600×36Kbit=21.1Mb。
0.5个BRAM=18Kbit=18432bit
1 个BRAM =32Kbit=36864bit
还要明白:我们设计中运算数据位宽是多少,该设计所用的运算位宽为18bit,后期专门说明。
层 | 参数个数 | 数据位宽(bit) | 所占内存(bit) | 占用BRAM大小(个) |
---|---|---|---|---|
第一层卷积参数 | 6×5+6=36 | 18 | 36×18=648 | 0.5(不足18432bit) |
第二层卷积参数 | 6×16×5+16=496 | 18 | 496×18=8928 | 0.5(不足18432bit) |
第二层卷积参数 | 16×16×5+16=1296 | 18 | 1296×18=23328 | 1(不足36864bit) |
全连接参数 | 400×3+3=1203 | 18 | 1203×18=21653 | 1(不足36864bit) |
查看资源报告:
★★★如有错误欢迎指导!!!