基于RISC-V架构的开源处理器及SoC研究综述(三)

基于RISC-V架构的开源处理器及SoC研究综述(一) RISC-V是一种新的指令集架构,发布以来得到了大量关注,在描述了RISC-V的产生背景、基本设计的基础上,简单比较了其与现有的开源指令集架构、商业指令集架构的优劣,随后详细介绍了现有的采用RISC-V架构的开源处理器、开源SoC,并展望了RISC-V的未来发展。 阅读详情

3 基于RISC-V的开源SoC研究现状

3.1 Rocket-Chip

  UCB为了方便用户学习,同时也为了便于重复使用已设计好的硬件模块,在GitHub上建立了Rocket-Chip Generator的项目,其中包括了Chisel、GCC、Rocket处理器,以及围绕Rocket的一系列总线单元、外设、缓存等,并且采用了参数化的配置方法,从而可以方便的创建不同性能要求的基于Rocket处理器的SoC。采用Chisel编写,主要的子模块如下。

  •  Chisel:UCB设计的开源硬件编程语言。
  •  Hardfloat:参数可配置的、兼容IEEE 754-2008标准的浮点单元。
  •  Riscv-tools:开发工具,包括GCC、Newlib,以及移植的Linux。
  •  Rocket:Rocket处理器,包括L1 Cache。
  •  Uncore:实现了需要与Rocket紧密连接的功能单元,比如L2 Cache、L1 Coherence Hub等。
  •  Juntions:实现了不同协议的接口之间的转换。
  •  Rocketchip:顶层模块,同时也实现了内部总线TileLink向外部总线AXI或者AHB的转换。

  前文介绍的BOOM、Z-scale都可以通过配置Rocket-Chip的不同参数得到。

3.2 LowRISC

  LowRISC是由剑桥大学为主的一些研发人员成立的非营利性组织,主要是设计发布基于RISC-V指令集的64位开源SoC,其成员有树莓派的合作者,所以其目标是希望将设计的SoC做成类似于树莓派那样价格便宜、功能丰富、拥有大量用户的开源硬件。LowRISC发布的SoC的名称也是LowRISC,是在Rocket-Chip的基础上改进开发的,采用System Verilog编写改进部分的代码。主要特点是:

  (1)Tagged Memory:给每一个存储位置都增加了一个Tag,目前是双字(64bit)对应一个Tag(4bit),目的是防止控制流劫持攻击,同时也有其他的一些用处,比如:垃圾回收、设置watchpoint等。为了实现Tagged Memory,LowRISC为RISC-V增加了两条指令用来读写Tag。2015年4月发布的0.1版本中具有该功能。

  (2)Untethered:早期的Rocket-Chip需要依赖于一个通用处理器的协助才能够启动,才能够访问串口、网口、SD卡等外设,Untethered LowRISC通过实现(Memory mapping I/O)、片上NASTI interconnect等功能,解决了上述问题。2015年11月发布的0.2版本中具有该功能。

  (3)Trace Debugging:引入了Open SoC Debug,支持Trace Debugging,可以收集指令执行记录,便于离线或者在线分析。2016年7月发布的0.3版本中具有该功能。

3.3 PULPino

  PULPino是苏黎世联邦理工大学和波罗尼亚大学联合发布的基于RISC-V的开源处理器,其处理器核RI5CY在前文已述,苏黎世联邦理工大学和波罗尼亚大学本来设计的项目是PULP,这是一个多核SoC项目,考虑到这个项目太复杂,有许多IP、自定义工具集,不方便开源,所以开发者决定先开源一个单核SoC项目,即PULPino。PULPino直接使用了PULP项目的许多IP。

  PULPino具有一个AXI互连总线,另外还有一个APB总线,用来连接低速外设,比如:GPIO、UART、I2C控制器、SPI Master控制器等。调试模块支持Advanced Debug Unit。PULPino包括一个Boot ROM,其中可以写入BootLoader,从而实现在启动的时候从外部Flash读入程序并执行。

3.4 RISC-V VHDL

  RISC-V VHDL是俄罗斯的GNSS Sensor公司发布的基于Rocket的开源SoC,其前身是莫斯科物理技术学院的一个项目。该项目的处理器核直接就用的是Rocket,可以配置为只有L1Cache,也可以配置为包括L2Cache,在此基础上,提供了大量的IP核,采用类似LEON3的GRLIB库的方式,所有的IP核都是即插即用,RISC-V VHDL提供了一个AXI总线,IP核都挂载在该总线上。IP核包括:UART、GPIO、中断控制器、以太网控制器,此外还支持DSU(Debug Support Unit),均采用VHDL编写代码。

  RISC-V VHDL中大多数IP核都是开源的,唯一商业的是GNSSLIB,这是一个与定位导航有关的库,也是RISC-V VHDL的特色。

结语

  RISC-V的发展十分迅速,除了前文已述的基于RISC-V的开源处理器、开源SoC大量涌现,还有很多的商用处理器也计划采用RISC-V指令集架构,比如PulSAR[8],采用的是一个异构多处理器结构,其中包括2个标量处理器Rocket,还包括两个超标量乱序执行处理器BOOM。

  RISC-V的发展一方面得益于自身设计吸取了RISC接近40年的经验教训,使得架构设计更加合理,另一方面得益于日渐成熟的软件生态,UCB提供了针对RISC-V的开源编译器GCC、LLVM,还提供了开源仿真器Spike、QEMU,社区还移植了FreeBSD、Debian、Gentoo、Yocto、Genode等操作系统。

  在第4届RISC-V专题研讨会上宣布成立了RISC-V基金会,吸纳了众多实力雄厚的商业公司和知名研究机构,其中包括中国科学院,可以预见RISC-V即将进入一个快速发展的阶段,应该会在以下几个方面有突破进展。

  (1)有若干成熟的、可商业化的、采用RISC-V架构的芯片问世,并得到大规模应用。

  (2)性能逼近主流桌面处理器。

  (3)主流处理器与采用RISC-V架构的开源处理器组成的异构系统。

  (4)移植到RISC-V架构的操作系统更加稳定可靠。

  (5)采用上百个简单RISC-V核的多核并行计算。

  (6)计算机教学中采用RISC-V作为范例教学。

  (7)调试功能得到进一步加强。

  对于国内而言,RISC-V提供了一个很好的参考,也是一个很好地机遇,有很多可借鉴的地方,用来实现自主可控的处理器。

参考文献

[1]Waterman, A. et al. The RISC-V Instruction Set Manual, Volume I: User-Level ISA, Version 2.1[S], 2016

[2]Krste Asanovic, David Patterson, The Case for Open Instruction Sets[J], MICROPROCESSOR report, 2014, 8: 1-7 .

[3]Celio, Christopher and Patterson, David A. and Asanović, Krste, The Berkeley Out-of-Order Machine (BOOM): An Industry-Competitive, Synthesizable, Parameterized RISC-V Processor[R], EECS Department, University of California, Berkeley, June 2015.

[4]N. Gala, A. Menon, R. Bodduna, G. S. Madhusudan, V. Kamakoti, SHAKTI Processors: An Open-Source Hardware Initiative[C], 29th International Conference on VLSI Design and 2016 15th International Conference on Embedded Systems (VLSID), Kolkata, India, January, 2016

[5]PULPino User Manul[EB/OL], http://www.pulp-platform.org/documentation/, 2016-8

[6]Michael Zimmer, David Broman, Chris Shaver, Edward A. Lee, FlexPRET: A Processor Platform for Mixed-Criticality Systems[C], Proceedings of the 20th IEEE Real-Time and Embedded Technology and Application Symposium (RTAS), April, 2014.

[7]PEYRET Thomas, VENTROUX Nicolas, OLIVIER Thomas, HETEROGENEOUS MULTICORE BASED ON RISC-V PROCESSORS AND FD-SOI SILICON PLATFORM[C], 4th RISC-V Workshop Proceedings, July, 2016.


CPU设计验证——概览索引 CPU设计验证概览 阅读详情

相关推荐

Rocketchip RISC-V Debug调试硬件相关(一)

2019年10月份,RISCV发布了一版新的硬件代码,并对Debug调试部分进行了对应的升级修改,随后一直沿用2019年的版本至今,目前版本为0.13.2版本。本文重点研究对应的升级和修改意义,以及在后续SoC集成时的处理方法。阅读本文之前,请对RISCV的Debug调试有个基础的了解,比如JTAG五线或四线连接、调试软件openOCD、RISCV调试过程和基本流程。调试的主要工作方式和新版本新增的功能介绍。............

heyuming20062007的博客 3474

真正的RISC-V开发板——VEGA织女星开发板开箱评测

前言 由于最近ARM公司要求员工“停止所有与华为及其子公司正在生效的合约、支持及未决约定”,即暂停与华为的相关合作,大家纷纷把注意力投向了另一个的处理器架构RISC-V,它是基于精简指令集(RISC)的一个开源指令集架构。相比于其他指令集,“RISC-V 指令集可以自由地用于任何目的,允许任何人设计、制造和销售 RISC-V 芯片和软件”,正是由于这种开放性,于2015年成立的RISC-V基金会...

whik1194的博客 7296

RISC-V架构的开源处理器分析

摘要:RISC-V架构本身面积小、性能较高,最为关键的是这一架构本身功耗较低且作为全新的开源精简指令集,无论是技术还是产品都得到了迅速的发展,效果突出。基于此,本文深入研究RISC-V架构开源处理器内部情况,明确不同模块的功能以及运行方式,并且围绕着实际案例展开分析,明确处理器的应用效果。关键词:RISC-V架构;开源处理器;嵌入式应用处理器;超标量乱序执行处理器引言:在RISC-V架构的开源处理器中包含了诸多功能,具体表现为介质访问控制子层、物理编码子层和串行器/解串器以及用于该功能模块的发送缓冲区和接收

weixin_39716708的博客 2654

基于RISC-V架构的开源处理器及SoC研究综述

RISC-V是加州大学伯克利分校(University of California at Berkeley,以下简称UCB)设计并发布的一种开源指令集架构,其目标是成为指令集架构领域的Linux,应用覆盖IoT(Internet of Things)设备、桌面计算机、高性能计算机等众多领域。其产生是因为UCB的研究人员在研究指令集架构的过程中,发现当前指令集架构存在如下问题。   (1)绝大

专注计算机体系结构 7992

ARM、X86、RISC-V三分天下

引入: 简单的介绍一下X86、ARM、RISC-V三种cpu架构的区别和应用场景。X86、ARM和RISC-V是三种不同的CPU架构,它们在设计理念、指令集和应用场景上有一些区别。

m0_74976404的博客 3839

深入浅出RISC-V架构

理解 RISC-V 不仅仅是理解一个技术规范,更是理解一种新的、开放的芯片设计和协作模式。表示该处理器支持64位基础整数指令集、整数乘除法、原子操作、单精度浮点、双精度浮点和压缩指令。RISC-V 是一个近年来备受瞩目、发展迅速的开放指令集架构 (ISA)。这些是可选的、标准化的指令集扩展,用单个字母表示。RISC-V 定义了不同的特权级别,以支持操作系统和系统安全。一个典型的 RISC-V 处理器命名会反映它所支持的指令集,例如。这是 RISC-V 处理器必须实现的核心部分。

frostmelody 全网同名,大家多多关注呀~ 持续分享优质内容! 2757

蜂鸟E203 SOC开源资料汇总 及 RISC-V基础

这里写自定义目录标题RISC-V图书 RISC-V 图书 百度网盘链接,需要自取: 1 Computer Organization and Design_ The Hardware Software Interface [RISC-V Edition] ( PDFDrive ) 由 可以搭配学习的视频 1. “计算机体系结构&RISC-V” https://www.bilibili.com/video/BV1XZ4y1M7B2?spm_id_from=333.999.0.0 https://ww

Jie_MSD的博客 1万+

ri5cy_user_manual.pdf

pulp core 核心之一,ri5cy 的spec。 ri5cy_user_manual

零、RISC-V SoC软核代码笔记详解——前言

前言: 过去几年RISC-V飞速发展,这股从美国兴起的RISC-V大流愈演愈烈。由于目前中国IC行业受到国外不同程度的排挤,在国内大力发展RISC-V这个完全开源的精简指令集架构,显得尤为重要。而目前国内很多芯片的龙头企业都已经进军RISC-V架构的芯片领域,如紫光展锐、华为海思、阿里平头哥等。从市场角度来说,RISC-V还是有很多事情要做的,其生态建设,高端场景应用都需要进一步发展。所以推动RISC-V的教学和发展就愈发重要。 如果想要拿RISC-V架构的SoC来参加FPGA开发或者数字IC设计相关的

weixin_42294124的博客 1万+

从零搭建A股量化交易系统:开源框架选型与实战部署指南

本文详细介绍了从零搭建A股量化交易系统的完整流程,重点分析了开源框架VNPY和QMT的选型与实战部署。内容涵盖系统架构设计、策略开发、性能优化及实盘过渡方案,为开发者提供了一套完整的A股实盘量化交易解决方案,助力高效构建稳定可靠的量化交易系统。

sugar的博客 1276

思科—OSPF多区域配置实验

实验目的:配置OSPF多区域,使得不同网段的PC互相ping通。 网络拓扑如下: R0的配置 Router>en Router#conf t Router(config)#int g0/1 Router(config-if)#ip add 192.168.1.1 255.255.255.0 Router(config-if)#no shut Router(config-if)#exit Router(config)#int g0/0 Router(config-if)#ip add 192.168.

m0_46237205的博客 1万+

基于RISC-V架构的开源处理器及SoC研究综述(二)

RISC-V是一种新的指令集架构,发布以来得到了大量关注,在描述了RISC-V的产生背景、基本设计的基础上,简单比较了其与现有的开源指令集架构、商业指令集架构的优劣,随后详细介绍了现有的采用RISC-V架构的开源处理器、开源SoC,并展望了RISC-V的未来发展。

leishangwen的专栏 1万+

一文带你完成ARMv8架构中的cache知识点

【摘要】 在最初开发ARM架构时,处理器的时钟速度和内存的访问速度大致相同。今天的处理器内核要复杂得多,其时钟速度可以快上几个数量级。但是,外部总线和内存设备的频率并没有扩大到同样的程度。有可能实现小块的片上SRAM,它可以以与内核相同的速度运行,但是与标准的DRAM块相比,这种RAM非常昂贵,因为后者的容量可以达到数千倍。在许多基于ARM处理器的系统中,访问外部存储器需要几十甚至几百个内核周期。 cache的技术背景 在最初开发ARM架构时,处理器的时钟速度和内存的访问速度大致相同。今天的处.

ABCCloud的博客 1854

RISC-V架构总结1

国产芯片能够自主一直是大家共同的期待!但无奈起步较晚,目前的通用计算平台已经是外国企业的天下。国产自主的芯片不仅仅是在工艺上还达不到目前商用芯片的水平,最底层的CPU指令集架构上也是处处受制于ARM,Intel这样的外国企业。如果国家自己定义一套指令集架构没有太大意义,因为处理器架构必须是全球范围的一个通用架构,必须获得生态支持。国产芯片自主之路还有很长,但并不是毫无机会。RISC-V指令集架构...

无问西东的博客 2万+

Docker离线部署OpenWebUI操作步骤

docker离线部署openwebui

m0_49333265的博客 4354

学Simulink——基于直流电机的建模与控制场景实例:直流电机带负载突变时的动态响应仿真

在实际应用中,直流电机经常需要应对各种工作条件的变化,例如负载突变。了解电机在这种情况下的动态响应特性对于确保系统的稳定性和可靠性至关重要。通过仿真分析,可以预测电机在不同负载条件下的表现,并优化控制系统的设计。本文将详细介绍如何使用来构建一个直流电机带负载突变时的动态响应仿真模型,并通过仿真展示其应用效果。本文介绍了如何使用构建一个直流电机带负载突变时的动态响应仿真模型,并通过仿真展示了其应用效果。

xiaoheshang_123的博客 114

学习开源硬件:开源IP,开源RISC-V与开源SoC等

目录 开源IP 开源RISC-V 开源SoC 当下,“开源”已经变得越来越普遍,越来越深入人心。各行各业开源项目如火如荼,无论是个人还是企业都在积极参与。各路好汉踊跃地分享自己的劳动成果,公布源代码,开放指令集或有更宏大的愿景来建立新的生态及建设产业链。 在这其中,“开源硬件”对于集成电路从业人员来说无疑是一缕清泉。对于软件来说,开源项目之多,开源规模之大,开源方面之广,硬件显然是难以比...

纸上谈芯的专栏 4085

【即插即用模块】注意力篇 | MICCAI 2023 | MFE:多尺度特征提取,告别固定感受野,猛涨2个点!

本文提出一种用于低分辨率乳腺癌病理图像超分辨率与分类的网络SHISRCNet。针对现有方法处理低分辨率图像效果差、感受野固定等问题,设计了多特征提取模块(MFE),通过多速率空洞卷积覆盖全尺度感受野(局部到全局),结合递进残差连接和动态权重融合机制,实现自适应多尺度特征增强。实验表明,该模块在超分辨率任务中PSNR提升近2个点,分类准确率显著提高。代码提供详细注释,支持即插即用,适用于各类多尺度视觉任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 207

简评几款开源RISC-V处理器

RISC-V 能够实现“自主可控”与“普世通用”的国产处理器,中国应该拥抱此技术。 胡振波 转存失败重新上传取消 RISC-V指令集是怎么回事就不多说了。开门见山,说说几款我接触过的开源处理器,按我接触的时间顺序来排序。 1. Rocket,BOOM 很多RISC-V开发者,无论硬件还是软件,首次接触的CPU core就是Rocket。Rocket Ch...

1万+

Archery通过OpenResty代理转发后登录一直提示Forbidden

测试几遍,连账号密码都没用验证,因为不管输什么都是提示Forbidden。找到配置文件settings.py,下面命令可到配置文件路径。回到页面刷新,随便输入个账号密码,验证失败证明请求成功了。查看Preview,提示CSRF验证失败,请求被中断。域名:dba.hkeasyspeed.com。打开开发者工具查看,网络里面可以看到报403。添加一条配置,把你配置域名添加进去。可以看到页面可以正常访问到。进入Archery容器。重启Archery容器。正常输入账号密码,OK。

万物皆可学 3147

使用再生龙备份还原liunx系统(精确每一步)

再生龙镜像可自行到官网下载(ISO/ZIP格式均可),然后使用tuxboot烧录工具制作启动盘,另外准备一个U盘用来存储备份的镜像文件,即再生龙盘和存储盘是两个分开的。当然也可以用分区工具把同一个硬盘分区来使用,比较方便,先学会基本的吧,只是告诉有个捷径,省个U盘。

米可的博客! 8375

六、RISC-V SoC内核——通用寄存器 代码讲解

tinyriscv这个SoC工程的内核cpu部分,采用经典的三级流水线结构进行设计,即大家所熟知的:取值—>译码—>执行三级流水线。 上一篇博文中注释了中断模块,现在来介绍通用寄存器reg.v模块: 目录 1. reg在内核中的位置 2.RISC-V通用寄存器 3. reg.v 4.主要功能 5. 代码注释 参考: 1. reg在内核中的位置 如下图,绿色的方块是通用寄存器reg,从位置上可以看出,通用寄存器在功能上,主要承担译码和执行部分的临时数据存储: 2.R...

weixin_42294124的博客 5398

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

大家一起从零设计RISC-V处理器(一)之开篇

1.渊源 现在我还记得初学FPGA时候,问过学长FPGA能做什么,他回答:无所不能,比如可以实现51单片机;但当时我初学无知,无法理解在实现FPGA上单片机,那时候对图像识别感兴趣,因此FPGA大部分用在图像处理上,FPGA玩儿得算是小有成就吧;偶然的机会成为了一名数字ICer,恰好当时RISC-V在国内火了起来,让我又想起了学长所说的话,或许我应该从零设计一个RISC-V处理器; 2.初衷 老粉丝比较了解我的风格,喜欢输出毫无保留的干货,其实我今天的所学所知也是受益于开源与分享,因此我也秉持开源分享的精神

宏强-Blog 8926

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

基于 RISC-V SoC 的 1024 点 FFT 设计(10-02-05)1024 点 FFT 的 RISC-V SoC 整体架构

芯片原厂必学课程 - 第 10 篇章 - 03 基于 RISC-V SoC 的 1024 点 FFT 设计

新芯设计的博客 2541

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

上一篇: 基于RISC-V架构的开源处理器及SoC研究综述(二)
下一篇: zedboard的demo评测
CopperDong
博客等级 码龄14年 1205粉丝 466原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值