当前位置: 首页 > news >正文

网站建设制作设计营销公司杭州商场设计效果图

网站建设制作设计营销公司杭州,商场设计效果图,乐器销售网站模板,建设好网站怎么付费推广这是新的系列教程#xff0c;在本教程中#xff0c;我们将介绍使用 FPGA 实现深度学习的技术#xff0c;深度学习是近年来人工智能领域的热门话题。在本教程中#xff0c;旨在加深对深度学习和 FPGA 的理解。用 C/C 编写深度学习推理代码高级综合 (HLS) 将 C/C 代码转换为硬…这是新的系列教程在本教程中我们将介绍使用 FPGA 实现深度学习的技术深度学习是近年来人工智能领域的热门话题。在本教程中旨在加深对深度学习和 FPGA 的理解。用 C/C 编写深度学习推理代码高级综合 (HLS) 将 C/C 代码转换为硬件描述语言FPGA 运行验证在上一篇文章中我们用C语言实现了一个卷积层并查看了结果。在本文中我们将实现其余未实现的层全连接层、池化层和激活函数 ReLU。每一层的实现全连接层全连接层是将输入向量X乘以权重矩阵W然后加上偏置B的过程。下面转载第二篇的图能按照这个图计算就可以了。全连接层的实现如下。void linear(const float *x, const float* weight, const float* bias,int64_t in_features, int64_t out_features, float *y) {for (int64_t i  0; i  out_features; i) {float sum  0.f;for (int64_t j  0; j  in_features; j) {sum  x[j] * weight[i * in_features  j];}y[i]  sum  bias[i];} }该函数的接口和各个数据的内存布局如下。考虑稍后设置 PyTorch 参数内存布局与 PyTorch 对齐。输入x: 输入图像。shape(in_features)weight: 权重因子。shape(out_features, in_features)bias: 偏置值。shape(out_features)输出y: 输出图像。shape(out_features)参数in_features: 输入顺序out_features: 输出顺序在全连接层中内部操作数最多为out_channels * in_channels一个对于典型参数操作数远低于卷积层。另一方面关注权重因子卷积层为shape(out_channels, in_channels, ksize, ksize)而全连接层为shape(out_features, in_features)。例如如果层从卷积层变为全连接层in_features channels * width * height则以下关系成立。width, height ksize考虑到这一点在很多情况下全连接层参数的内存需求大大超过了卷积层。由于FPGA内部有丰富的SRAM缓冲区因此擅长处理内存访问量大和内存数据相对于计算总量的大量复用。单个全连接层不会复用权重数据但是在视频处理等连续处理中这是一个优势因为要进行多次全连接。另一方面本文标题中也提到的边缘环境使用小型FPGA因此可能会出现SRAM容量不足而需要访问外部DRAM的情况。如果你有足够的内存带宽你可以按原样访问它但如果你没有足够的内存带宽你可以在参数调整和训练后对模型应用称为剪枝和量化的操作。池化层池化层是对输入图像进行缩小的过程这次使用的方法叫做2×2 MaxPooling。在这个过程中取输入图像2x2区域的最大值作为输出图像一个像素的值。这个看第二张图也很容易理解所以我再贴一遍。即使在池化层输入图像有多个通道但池化过程本身是针对每个通道独立执行的。因此输入图像中的通道数和输出图像中的通道数在池化层中始终相等。池化层的实现如下所示void maxpool2d(const float *x, int32_t width, int32_t height, int32_t channels, int32_t stride, float *y) {for (int ch  0; ch  channels; ch) {for (int32_t h  0; h  height; h  stride) {for (int32_t w  0; w  width; w  stride) {float maxval  -FLT_MAX;for (int bh  0; bh  stride; bh) {for (int bw  0; bw  stride; bw) {maxval  std::max(maxval, x[(ch * height  h  bh) * width  w  bw]);}}y[(ch * (height / stride)  (h / stride)) * (width / stride)  w / stride]  maxval;}}} }这个函数的接口是此实现省略了边缘处理因此图像的宽度和高度都必须能被stride整除。输入x: 输入图像。shape(channels, height, width)输出y: 输出图像。shape(channels, height/stride, width/stride)参数width: 图像宽度height: 图像高度stride减速比ReLUReLU 非常简单因为它只是将负值设置为 0。void relu(const float *x, int64_t size, float *y) {for (int64_t i  0; i  size; i) {y[i]  std::max(x[i], .0f);} }由于每个元素的处理是完全独立的x, y因此未指定内存布局。硬件生成到这里为止的内容各层的功能都已经完成了。按照上一篇文章中的步骤可以确认这次创建的函数也产生了与 libtorch 相同的输出。此外Vivado HLS 生成了一个通过 RTL 仿真的电路。从这里开始我将简要说明实际生成了什么样的电路。如果将上述linear函数原样输入到 Vivado HLS则会发生错误。这里将输入输出设为指针-数组是为了决定在电路制作时用于访问数组的地址的位宽。另外in_features的值为778392out_将features的值固定为32。这是为了避免Vivado HLS 在循环次数可变时输出性能不佳。static const std::size_t kMaxSize  65536;void linear_hls(const float x[kMaxSize], const float weight[kMaxSize], const float bias[kMaxSize], float y[kMaxSize]) {dnnk::linear(x, weight, bias, 7*7*8, 32, y); }linear_hls函数的综合报告中的“性能估计”如下所示在Timing - Summary中写入了综合时指定的工作频率此时的工作频率为5.00 ns 200MHz。重要的是 Latency - Summary 部分它描述了执行此函数时的周期延迟Latencycycles和实时延迟Latencyabsolute。看看这个我们可以看到这个全连接层在 0.566 ms内完成。在 Latency - Detail - Loop 列中描述了每个循环的一次迭代所需的循环次数Iteration Latency和该循环的迭代次数Trip Count。延迟周期包含Iteration Latency * Trip Count 循环初始化成本的值。Loop 1 是out_features循环到loop 1.1  in_features。在Loop1.1中进行sum x[j] * weight[i * in_features j]; 简单计算会发现需要 9 个周期才能完成 Loop 1.1 所做的工作。使用HLS中的“Schedule Viewer”功能可以更详细地了解哪些操作需要花费更多长时间。下图横轴的2~10表示Loop1.1的处理内容大致分为xweights等的加载2个循环乘法fmul3个循环加法fadd4个循环共计9个循环。在使用 HLS 进行开发期间通过添加#pragma HLS pipeline指令向此代码添加优化指令以指示它创建高效的硬件。与普通的 FPGA 开发类似运算单元的流水线化和并行化经常用于优化。通过这些优化HLS 报告证实了加速流水线减少迭代延迟min1并行化减少行程次数删除循环正如之前也说过几次的那样这次的课程首先是以FPGA推理为目的所以不会进行上述的优化。有兴趣进行什么样的优化的人可以参考以下教程和文档。教程https://github.com/Xilinx/HLS-Tiny-Tutorials文档https://www.xilinx.com/support/documentation/sw_manuals/xilinx2019_2/ug902-vivado-high-level-synthesis.pdf最后该函数的接口如下所示。由于本次没有指定接口所以数组接口如x_ 等ap_memory对应FPGA上可以1个周期读写的存储器BRAM/Distributed RAM。在下一篇文章中我们将连接每一层的输入和输出但在这种情况下我们计划连接 FPGA 内部的存储器作为每一层之间的接口如本例所示。总结在本文中我们实现了全连接层、池化层和 ReLU。现在我们已经实现了所有层我们将在下一篇文章中组合它们。之后我们会实际给MNIST数据确认我们可以做出正确的推论。 从FPGA说起的深度学习三 从FPGA说起的深度学习二 从FPGA说起的深度学习一
http://www.dnsts.com.cn/news/180897.html

相关文章:

  • 怎样给公司做网站手机 网站编辑器
  • 视频网站怎么建设360站长工具
  • 黑龙江省城市建设工程学校官方网站购物网站建设好处
  • 做网站的公司利润多少呢厦门网站制作维护
  • 酷我音乐网站架构网站策划书的政策背景
  • 微网站 微信metro风格网站开发
  • 哈尔滨优质官网建站企业ido手表官网
  • 怎么做类似豆瓣的网站海南省住房公积金管理局电话号码
  • 中山网站建设多少钱抖音代运营合同模板免费下载
  • 邢台如何做企业网站网络营销的案例分析
  • 个人网站wordpress南阳做网站多少费用
  • 中山软件开发泰州网站快速排名优化
  • 网站架构图用什么做网页设计师培训内容
  • 备案时的网站建设方案书如何查询网站关键词密度
  • 做网站有什么建议深圳企业网站建设怎么做
  • 速升网网站是多少钱网站做弹幕广告
  • 营销型网站要点wordpress 验证码不显示
  • 自动下单网站开发网站建设要哪些人
  • 建站排名apache网站开启gzip
  • dedecms小说网站模板下载网网站建设设计
  • 营销型企业网站分析与诊断北仑网站建设网站
  • 出口贸易公司网站怎么做中文域名注册查询官网
  • 建设网站什么软件比较好常州做网站的 武进
  • 理财网站模版wordpress文章相关推荐
  • 深圳建网站 (报价)成都网站建设:思乐科技
  • 网站开发基础淘宝客商城网站建设
  • 建设网站是什么233建工网校官网
  • 贵州省城乡建设部网站首页网页平面设计招聘
  • 手机做网站视频婚纱网站模板素材
  • 用php做的网站实例做网站电脑和手机都是一样可以看吗