自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

dennis_fan的专栏

用代码说话...

  • 博客(18)
  • 收藏
  • 关注

原创 论文精读:Attention Is All You Need

Adam是一种常用的优化算法,它结合了Adagrad和RMSprop的优点,并加入了偏差修正。Adam的学习率是自适应的,可以根据每个参数的梯度大小自动调整学习率。具体来说,Adam使用指数移动平均估计梯度的一阶矩(即均值)和二阶矩(即方差),并将它们用于调整每个参数的学习率。Adam算法中有三个超参数需要设置:学习率、第一个指数衰减率(beta1)和第二个指数衰减率(beta2)。其中,beta1通常设置为0.9,beta2通常设置为0.999。另外,Adam还使用了一个小常数epsilon来避免除以零。

2023-03-28 02:32:30 443 1

原创 图像分类模型 I. 从LeNet到ResNet

从LeNet到ResNet,神经网络沿着越来越深方向演进。LeNetLeNet是最早发布的卷积神经网络,取得了与SVM性能相媲美的效果,广泛应用于ATM数字识别。代码实现模型亮点:1)使用2个卷积块(每个卷积块由卷积层、非线性激活函数、汇聚层组成)提取特征,后接3个全连接层进行图像分类。2)为了构造高性能的卷积神经网络,对卷积层进行排列,逐渐降低空间分辨率,同时增加通道数。知识点:feature map空间分辨率计算公式:N =⌊(W-K+2P)/S⌋ ...

2022-04-19 18:00:17 3509

原创 如何使用C语言写: Generic Queue

Model------------------------------------------------------------------------------------------------------------------------队列也是限制插入和删除位置的表.主要操作是enqueue和dequeue操作.enqueue:入队操作.在表的队尾(rear)

2013-02-27 09:56:25 3174

原创 "括号匹配, 中缀表达式转化为后缀表示式, 计算中缀表达式, 计算后缀表达式"完整代码

Index1. 括号匹配(Balancing Symbols)2. 中缀表达式转化为后缀表示式(Infix to Postfix Conversion)3. 计算中缀表达式(Calculate Postfix Expression)4. 计算后缀表达式(Calculate Expression -Dijkstra Algorithm)

2013-02-26 21:33:18 2399

原创 如何使用C语言写: 泛型链表

C语言泛型设计的原则------------------------------------------------------------------------------------------------------------------------使用C语言编写通用数据结构相对比较困难.其一, C语言本身不支持泛型编程的特性;其二, C语言不支持元语言.C语言只能使用v

2013-02-25 19:42:38 5171

原创 设计一个简易的处理器(10)--性能评估(完)

性能评价————最终需要的PIPE处理器已经设置完毕了,现在要评价它的性能,采用CPI这个指标进行评价.CPI: PIPE执行一条指令所需的平均时钟周期数.(1). PIPE的CPI直观判断PIPE采用了"加载互锁+转发"技术,转发技术不会降低流水线的吞吐量,而加载互锁是通过暂停技术来实现的,所以会降低流水线的吞吐量.这样基本上可以达到每个时钟周期发射一条新指令的目标,也就是P

2012-12-17 09:50:50 2370

原创 设计一个简易的处理器(9)--PIPE的硬件结构, 流水线控制逻辑

PIPE是最终要实现的简易处理器,本篇主要介绍PIPE的硬件结构和流水线控制逻辑.  PIPE的硬件结构———— 流水化的最终实现-PIPEPIPE使用旁路转发技术,能够解决大多数形式的数据冒险,但是不能解决Load/Use冒险和控制冒险,这需要通过流水线控制逻辑来进行控制.PIPE的各个阶段的详见:wside-hcl.pdf,这篇文档使用HCL详细描述了PIP

2012-12-17 09:03:41 4814 2

原创 设计一个简易的处理器(8)--流水线冒险的避免

上一篇已经介绍了流水线的相关和冒险,本篇介绍避免流水线冒险几种技术.  暂停技术(Stalling)避免数据冒险————通过上一篇的介绍,PIPELINE的数据冒险只发生在读/取同一个程序寄存器的时候. 只需要在PIPE-(硬件结构图见本系列6)的基础上使用暂停(Stalling)技术来避免数据冒险.下面具体分析暂停技术的暂停条件和实现. 1.暂停条件源寄存器 -

2012-12-16 15:10:51 10738

原创 设计一个简易的处理器(7)--流水线的相关和冒险

PIPE-已经是一个流水线化的处理器了,但是当相近指令间存在相关时PIPE-会出现问题.后一指令引用前一指令的结果,是非常常见的,所以一个完整的处理器必须要解决这个问题.本文探讨流水线的两种形式的相关及其冒险.  相关的两种形式————相关有两种形式(1).数据相关.下一条指令要用到上一条指令计算出的结果.(2).控制相关.一条指令要确定下一条指令的位置.比如:跳转

2012-12-15 16:12:30 5598

原创 设计一个简易的处理器(6)--简单的流水线实现PIPE-

上一篇已经介绍了SEQ+的实现,本篇介绍流水线的通用原理及其简单的流水线实现PIPE-.  SEQ/SEQ+的局限性————通过前面几篇文章介绍SEQ/SEQ+,不难发现SEQ/SEQ+的一些局限性.-实际中的SEQ/SEQ+太慢, CPU的时钟太慢,性能太差.-在每一个时钟周期中,必须更新一条指令的所有可见状态(包括存储器,寄存器文件,条件码和指令寄存器, P

2012-12-14 16:45:15 5151

原创 设计一个简易的处理器(5)--SEQ+ CPU的实现

最终目的是设计一个具有流水化的CPU.为了方便CPU实现流水化,将SEQ CPU重新安排计算阶段,将PC的计算挪到取指阶段,得到SEQ+ CPU.  SEQ+:重新安排计算阶段————重新调整更新PC阶段在一个时钟周期开始时活动,使它计算当前指令的PC的值.下图是SEQ和SEQ+的PC计算的不同之处. SEQ+中为了计算当前的PC,需要使用寄存器来保

2012-12-11 22:37:43 3041

原创 设计一个简易的处理器(4)--SEQ CPU的实现(2):SEQ CPU的控制逻辑与硬件实现

接上文,本文介绍SEQ CPU的逻辑和硬件实现.着重使用HCL语言描述SEQ CPU的逻辑.  Y86/SEQ概述————SEQ是 Sequential CPU的实现,表现在指令的执行要依次经历各个阶段(Fetch->Decode->Execut->Memory->WriteBack->PC Update).每一个指令在一个时钟周期内完成(这条指令执行的所有状态Stat

2012-12-11 21:03:01 5702

原创 设计一个简易的处理器(3)--SEQ CPU的实现(1): 将指令组织成阶段

本文是介绍SEQCPU(Sequential CPU)的实现的第一篇,着重介绍如何将Y86的指令组织成阶段.  Y86/SEQ CPU————"设计一个简易的处理器"的第一篇中,我介绍了一个简易的指令集系统Y86,这里的SEQ CPU使用的就是Y86指令集.指令集详见(http://blog.csdn.net/dennis_fan/article/details/822

2012-12-10 22:17:16 3802

原创 设计一个简易的处理器(2)--处理器的硬件部件

处理器是一个数字系统, 所以设计一个简易的处理器有必要了解数字电路.本文就是介绍数字电路的基本概念,以及描述CPU中的一些主要的逻辑元件.通过使用HCL(HardSoft Control Language)描述这些逻辑元件的控制逻辑,使得可以抽象地了解它们的功能,而不必知道它们的内部构造.  数字电路的基本概念————数字电路可以分为两种:组合电路和时序电路.1.组合电

2012-12-09 22:30:34 3093

原创 设计一个简易的处理器(1)--定义指令集体系结构(ISA)

处理器的主要作用就是执行指令,那么设计处理器的第一步就是要定义或者兼容指令集体系结构(Instruction Set Architecture,ISA). 定义一个指令集体系结构,包括定义各种状态元素,指令集及编码,一组编程规范和异常事件处理. 传统的指令集的设计理念主要分为CISC和RISC两种设计理念.现代处理器比如IA32体系结构的指令集,已经不是单纯的CISC,设计时候已经结合

2012-11-26 16:15:32 7718 1

原创 结构体型的参数和返回值的C函数, GCC如何生成代码?

C代码与汇编代码有一点差别很大,即汇编语言程序设计中,各种数据类型之间的差别很小.汇编语言并没有提供诸如C语言结构体的抽象,它只是将C语言的结构体看成一个一个的元素. 本文探讨对于函数的参数和返回值有结构体型的函数, GCC是如何生成代码的? 通过分析代码,一方面探索GCC如何为C语言的结构体生成代码,另一方面, 分析C语言的函数调用过程和返回过程机制, 深入理解C语言函数调用的过程.

2012-11-22 20:21:14 3927

原创 判断C语言的算术运算越界问题

大量的安全漏洞是由于计算机算术运算的微妙细节引起的,具体的C语言,诸如符号数和无符号数之间转换,算术运算的越界都会导致不可预知的错误和安全漏洞,具体的案例数不胜数. 作为一个系统程序员,有必要对这些细节有深入的了解. 本篇参考csapp,主要介绍如何判断算术运算的越界问题(虽然本篇的代码经过大量的测试,但本人仍然无法保证代码的正确性,希望大家纠错).讲解的原则是"摆定理,不

2012-11-21 13:41:44 4682

原创 C语言的类型系统-编码, 类型转换及其规范

C语言的类型系统—————— 汇编语言将存储器看成一个虚拟存储器,即将存储器看成一个大的字节数组,汇编语言并没有提供类型系统.  C语言将字节数组抽象成不同长度的字节数组.本文介绍C语言的类型系统以及类型之间相互转换的原则.  C语言的数据类型———— C语言的类型是相当丰富的,它提供多种类型. C语言的数据类型具体有:1.基本类型:整型(short

2012-11-20 15:52:31 2750 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除