33、软件项目管理方法:Scrum、传统方法与敏捷方法的对比分析

软件项目管理方法:Scrum、传统方法与敏捷方法的对比分析

1. 软件项目管理方法概述

在软件项目管理领域,存在多种方法,这些方法各有特点和适用场景。下面将详细介绍 Scrum、传统方法中的 Function Points 和 UDP,以及敏捷方法的相关内容。

1.1 Scrum 方法

Scrum 是一种敏捷项目管理框架,以 30 天的 Sprint 周期为单位,在每个 Sprint 结束时能提供确定的测量结果。在 Sprint 期间,通过每日 Scrum 会议能在一定程度上保证客观性,但报告本质上是主观的,基于开发者的意见。

Sprint 的目标是完成产品待办事项列表中商定的一组任务。Scrum 中的任务描述与 FDD 中的特性类似,但没有明确的文档化方法来定义和衡量任务。由于任务不是基于正式的分析形成的,所以可能不如 FDD 中的特性那样细粒度,重复性较差,更容易出现可变性。

对于一个为期 3 个月的 Web 项目,10 名开发者可能从产品待办事项列表中完成数百个任务。在 Sprint 中,使用燃尽图来衡量任务完成情况,燃尽图通常以小时为单位衡量任务的工作量。对于 10 名开发者的团队,每天大约记录 80 小时的工作,这种测量非常细粒度。

当项目因软件开发过程中的噪声、不确定性和可变性而处于混沌边缘状态时,Scrum 提供了一种基于反馈进行经验性项目管理的可靠方法。由于缺乏可用于前馈控制的可预测指标,不鼓励进行预测和规划。

1.2 传统方法

1.2.1 Function Points

结构化方法的控制单位是功能点(Function Points)。功能点代表了客户价值输出的衍生度量,可以作为库存的适当度量。功能点非常小,与 FDD 中的特性非常相似,但其最初的动机是结构化分析和设计,而 FDD 的特性是由面向对象的分析和设计驱动的。

使用 FP 指标和跟踪彻底运行的 SDLC 项目应能提供与 FDD 项目类似的控制程度,处于阈值状态并接近理想状态。

1.2.2 UDP

Jacobson 的面向对象软件工程(OOSE)为统一过程(Unified Process,UDP)这一传统方法的最常用实例提供了基础,但 UDP 似乎不太容易控制。

在衡量 UDP 项目的客户价值输出时,需要检查需求。UDP 以用例(Use Cases)的形式进行需求分析,但编写用例的方法缺乏一致性,众多作者提出了不同的方法和细化程度。与 FDD 中的特性或结构化方法中的功能点相比,用例的这种缺乏一致性引入了噪声、不确定性和可变性,几乎会立即将 UDP 项目置于混沌状态。

在特定的软件开发组织中,遵循一位用例作者的特定建议,用例可能更具可预测性,但由于编写用例的分析师背景和教育不同,很难实现这一点。

对于一个 10 名开发者、为期 3 个月的 Web 开发项目,可能有 35 个用例。需求用例很难映射到特定的类和功能编程工作,因此难以精确声明一个用例是否已设计完成,或映射特定的中间步骤,如设计评审。一些项目以这种方式运行,但往往会导致次优的过程代码。因此,用例通常通过多个中间工件进行映射,包括系统级用例和其他设计文档,跟踪客户价值输出的精确状态变得更加困难。

在示例中,为 35 个用例编写代码需要 65 个日历周工作日。如果用例的唯一跟踪信息是“开始”和“完成”,那么每 2 天最多只有一两个数据点。用例驱动的生产量化方法产生的数据比使用特性或功能点的细粒度方法少两个数量级,对项目控制状态的估计也必须少两个数量级的确定性,即存在更大的不确定性。

1.3 方法对比总结

方法 测量粒度 控制程度 适用场景
Scrum 细粒度 较好,能应对混沌边缘状态 需求不确定、变化频繁的项目
Function Points 细粒度 较好,接近理想状态 需求相对稳定、适合结构化分析的项目
UDP 粗粒度 较差,易陷入混沌状态 需求难以精确界定、用例编写缺乏一致性的项目

软件生产系统依赖反馈进行管理和控制,反馈的粒度很重要。粒度越细,控制应该越好。一般来说,敏捷方法注重细粒度的频繁测量,是良好的反应式控制机制。使用低可变性测量的方法,如 FDD,也是良好的前馈预测控制机制。

2. 敏捷方法的适用性及特性

2.1 敏捷方法的适用场景分析

不能简单地认为敏捷方法一定更好,也不能随意选择敏捷方法就能取得正确的结果。需要考虑敏捷方法在哪些情况下可能不适用。

通过将项目空间划分为一个 2 x 2 的网格,可以更清晰地分析不同方法的适用性。

2.1.1 项目划分维度
  • 可分割性 :行将软件项目分为可以轻松分割成小块并增量交付的项目,以及必须作为一个整体交付才有价值的项目。后者如波音 777、航天飞机或塔科马海峡大桥等物理项目,在软件世界中包括空中交通控制、救护车调度、大型操作系统、算法软件、政府系统以及与物理对象相关的系统等。
  • 领域成熟度 :列将空间分为成熟且理解的领域和不成熟且不理解的领域。例如,空中交通控制是一个成熟且理解的领域,项目开始前需求应该明确;而无线电话互联网数据服务的操作系统目前不是一个成熟且理解的问题,需求可能经常变化。
2.1.2 四个象限的适用方法
  • 右上象限(成熟、整体) :只有大规模严格软件方法(RSM)才能取得成功,这是 CMM 3 到 5 级的典型象限。在这个领域,领域不确定性低,但必须完整交付范围,传统的范围 - 预算 - 进度项目管理模型最为合适,虽然迭代增量开发可能有助于降低风险,但不需要敏捷方法中常见的增量或迭代交付。
  • 左上象限(整体、不成熟) :只能使用敏捷方法。这类项目必须寻求构建广度而不是深度,以覆盖整个问题领域。为了避免因需求变化而进行持续返工,项目必须具有敏捷性,表现出短前置时间和低库存水平。
  • 左下象限(可分割、不成熟) :使用 RSM 可能导致失败。因为已知需求是不稳定的,存在过高的风险和不确定性,追求固定范围和可变进度的项目管理模型是不明智的。必须用短前置时间和低库存水平来解决这类问题,最好使用极轻量级的敏捷方法,如极限编程(Extreme Programming)或 XP/Scrum 混合方法 XBreed。
  • 右下象限(可分割、成熟) :可以采用 RSM 或敏捷方法,但一般来说,敏捷方法在这个象限会优于 RSM,因为它们能成功交付结果,并且在实现相同输出时成本和投资更低。对于可分割且能增量交付的问题,涵盖了大多数软件开发领域,敏捷方法将产生最佳的业务结果。

以下是一个简单的 mermaid 流程图,展示项目类型与适用方法的关系:

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;

    A([项目开始]):::startend --> B{项目是否可分割?}:::decision
    B -->|是| C{领域是否成熟?}:::decision
    B -->|否| D{领域是否成熟?}:::decision
    C -->|是| E(可采用 RSM 或敏捷方法):::process
    C -->|否| F(使用敏捷方法如 XP 或 XBreed):::process
    D -->|是| G(使用 RSM):::process
    D -->|否| H(使用敏捷方法):::process
    E --> I([项目结束]):::startend
    F --> I
    G --> I
    H --> I

2.2 敏捷性的定义及特性

2.2.1 传统对敏捷性的定义

敏捷性通常被定义为“应对变化的能力”。从达尔文的角度来看,敏捷性是“遗传适应性”,即一个物种应对不断变化的环境、进化并避免灭绝的能力。

大多数敏捷主义者更倾向于认为敏捷方法将软件开发的人性方面放在首位,将开发视为一种主要是混沌(不可知)的新兴遗传现象。这意味着敏捷方法不应寻求规划或控制,而应允许以总体目标为导向和衡量的新兴自组织行为,目标始终是交付可工作的代码。

实际上,这只是一种观察到的行为方式,表明敏捷方法能够应对变化。因为许多敏捷方法不采用传统意义上的规划,允许“现场开发者”做出决策,具有战术性,所以能够应对变化,无需丢弃计划。

2.2.2 敏捷性作为快速响应能力

除了应对一般变化的能力,敏捷方法在应对一种特殊类型的变化——加急请求方面表现出色。

加急请求是具有最高优先级的请求,所有其他工作都必须服从于它,简单来说就是插队。加急请求在不成熟的市场或组织中更有可能出现。

无论使用何种软件开发方法,都可以对请求进行加急处理,但敏捷方法在处理这类请求时表现更好。这意味着与任何 RSM 相比,敏捷方法对组织总体目标(即获取更多利润)的影响更小。具体表现为,由于加急请求,敏捷方法导致的在制品库存增加、投资增加、生产率降低和总体前置时间增加的幅度更小。

以下是不同方法应对加急请求的对比:
| 方法 | 加急请求处理方式 | 平均前置时间 | 处理成本 |
| ---- | ---- | ---- | ---- |
| Extreme Programming | 类似“串行加急”,优先处理最新重要请求 | 短,小于 2 周 | 较低 |
| Scrum | 加急请求需等待下一个 Sprint | 约 6 周 | 适中 |
| FDD | 可接受变更,但处理加急请求成本较高 | 较长 | 较高 |

2.3 敏捷方法与统计过程控制

根据 Wheeler 的四个过程控制状态,可以将敏捷方法和 RSM 映射到四个象限中。

方法 测量方式 质量一致性 所处状态
XP 缺乏明确分析、建模和规划,故事定义一致性待完善 声称每两周交付符合客户要求的产品,应处于左列 状态不稳定,在图表中位于 y 轴下方
Scrum 倡导者回避编码化和建模 每月交付符合要求的质量 位于 y 轴较低位置,与 XP 过程控制视角相似
FDD 基于高级编码方案,度量指标高度定义 团队熟练掌握概念模型和编码方案时,从阈值状态开始,可进入理想状态 相对稳定,有较好的发展趋势
RSM 基于 PMI/ISO/SEI 模型,精确估计和按时交付 符合质量标准,达到“可重复”的 CMM Level 2 要求 理论上应处于理想状态

随着系统向图表的左上方移动,过程成熟度和对工作底层元素(即“软件的自然哲学”)的理解都会增加。就像其他科学一样,在理解宇宙的基本构建块之前,测量的准确性取决于对测量对象的了解程度。对底层哲学的更好理解有助于更好地理解要测量的内容。

综上所述,在选择软件开发方法时,需要综合考虑项目的特点、需求的稳定性、团队的能力以及市场环境等因素,以确保选择最适合的方法来实现项目的成功。

3. 不同敏捷方法应对加急请求的深入分析

3.1 加急请求对不同敏捷方法的影响机制

加急请求在软件项目中是不可避免的,尤其是在快速变化的市场环境中。不同的敏捷方法对加急请求的处理方式和受影响程度各不相同。

3.1.1 Extreme Programming(XP)
  • 处理机制 :XP 采用“串行加急”的方式,这意味着它优先处理最新、最重要的请求。由于其迭代周期短,通常为 1 到 2 周,所以能够在短时间内响应加急需求。在每个迭代中,团队会根据需求的优先级来安排工作,最新的加急请求会被立即纳入考虑。
  • 成本与效益 :这种处理方式的优点是响应速度快,能够快速满足客户的紧急需求。但缺点是可能会打乱原有的迭代计划,导致一些低优先级的任务被延迟。不过,由于迭代周期短,这种延迟的影响相对较小。
3.1.2 Scrum
  • 处理机制 :Scrum 在当前 Sprint 期间排除加急请求,请求必须等待到下一个 Sprint。这是因为 Scrum 强调 Sprint 的稳定性和完整性,避免在 Sprint 期间引入不必要的干扰。
  • 成本与效益 :这种方式保证了 Sprint 内工作的有序进行,但也导致加急请求的平均前置时间较长,约为 6 周。对于一些对时间敏感的加急请求,可能无法及时满足。
3.1.3 Feature-Driven Development(FDD)
  • 处理机制 :FDD 主要用于较大规模的项目,团队通常为 10 人或更多,迭代周期往往是季度或更长。虽然 FDD 有变更控制过程可以接受变更,但由于项目规模大、工作进度复杂,处理加急请求时需要对正在进行的工作进行调整,可能会导致较大的成本。
  • 成本与效益 :为了适应加急请求,可能需要暂停或调整正在进行的工作,这会导致在制品库存增加,增加了项目的风险和成本。而且,由于项目规模大,调整工作的难度也较大,可能会导致较长的延迟。

3.2 加急请求的规模与成本分析

通过“规模与加急能力”图(Figure 34 - 3)可以进一步分析加急请求的成本。该图以项目中雇佣的开发人员数量(或项目的运营费用烧钱率)为 y 轴,以库存前置时间天数(即系统中在制品库存的天数乘以系统的前置时间天数)为 x 轴,绘制了不同过程处理加急请求的成本范围。

3.2.1 成本构成
  • 库存增加成本 :加急请求会导致在制品库存增加,这会增加项目的持有成本,包括风险和不确定性。例如,库存中的工作可能会因为需求变化而过时,导致浪费。
  • 前置时间延长成本 :较长的前置时间会带来更大的不确定性和变化风险,同时也可能导致吞吐量损失。因为客户可能会因为等待时间过长而改变需求或失去耐心。
3.2.2 不同方法的成本对比

从图中可以看出,不同方法在处理加急请求时的成本差异较大。XP 由于其短迭代和快速响应能力,在处理加急请求时,库存增加和前置时间延长的幅度相对较小;Scrum 由于 Sprint 的限制,加急请求的前置时间较长,但在 Sprint 内的工作稳定性较高;FDD 由于项目规模大、工作复杂,处理加急请求时可能会导致较大的库存增加和前置时间延长。

以下是不同方法处理加急请求的成本对比表格:
| 方法 | 库存增加成本 | 前置时间延长成本 | 总体成本 |
| ---- | ---- | ---- | ---- |
| Extreme Programming | 较低 | 较低 | 较低 |
| Scrum | 适中 | 较高 | 适中 |
| FDD | 较高 | 较高 | 较高 |

3.3 应对加急请求的策略建议

根据不同方法的特点和成本分析,可以给出以下应对加急请求的策略建议:

3.3.1 项目前期规划
  • 在项目开始前,评估项目可能面临加急请求的可能性和频率。如果预计加急请求较多,优先考虑使用敏捷方法,如 XP 或 Scrum。
  • 制定应急计划,明确在遇到加急请求时的处理流程和责任分工。
3.3.2 团队沟通与协作
  • 建立良好的团队沟通机制,确保团队成员能够及时了解加急请求的情况,并共同协商应对策略。
  • 培养团队的灵活性和适应性,提高团队应对变化的能力。
3.3.3 客户管理
  • 与客户保持密切沟通,提前了解客户的潜在加急需求,并在项目规划中适当预留一些资源。
  • 向客户解释不同方法处理加急请求的特点和成本,让客户做出合理的决策。

以下是一个 mermaid 流程图,展示应对加急请求的策略流程:

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;

    A([收到加急请求]):::startend --> B{评估请求紧急程度}:::decision
    B -->|高| C(优先处理,使用 XP 或 Scrum 调整计划):::process
    B -->|中| D(与团队协商,考虑是否调整当前 Sprint):::process
    B -->|低| E(纳入下一个迭代或计划):::process
    C --> F(执行调整后的计划):::process
    D --> G{团队同意调整?}:::decision
    G -->|是| F
    G -->|否| E
    E --> H(等待下一个迭代):::process
    F --> I([完成请求处理]):::startend
    H --> I

4. 敏捷方法与传统方法在过程控制中的综合比较

4.1 基于 Wheeler 过程控制状态的映射分析

根据 Wheeler 的四个过程控制状态,将敏捷方法(XP、Scrum、FDD)和传统方法(RSM)映射到一个图表中,可以更直观地比较它们在过程控制中的特点。

4.1.1 图表维度
  • 测量方式 :行分为使用低可变性测量的可重复方法和使用定义不明确或未编码、主观方法进行测量的方法。
  • 质量一致性 :列以符合可接受标准(如每个特性 1 个缺陷、每个功能点 0.25 个缺陷)来衡量质量。同时,代码质量差会导致生产率下降,因此也可以用生产率来衡量一致性。
4.1.2 不同方法的位置分析
  • XP :位于 y 轴下方,表明其不注重显式分析、建模和规划,故事定义的一致性仍在发展中。虽然 Kent Beck 认为 XP 每天都涉及建模,但没有推荐的方法,且所选方法与 XP 过程本身无关。不过,XP 声称每两周(未来可能每周)交付客户要求的产品,这意味着一个优秀的 XP 团队应该在左列,即交付符合质量的产品。
  • Scrum :在 y 轴上的位置较低,因为其倡导者回避编码化和建模。Schwaber 甚至认为建模可能是“浪费时间”。但 Scrum 有助于在混沌中理出头绪,每月交付符合要求的质量,从过程控制的角度看,与 XP 相似。
  • FDD :基于先进的编码方案,如特性、特性集、主题领域、原型、领域中立组件和状态图等,度量指标高度定义。如果团队熟练掌握概念模型和编码方案,FDD 从阈值状态开始,能够改进过程并进入理想状态。
  • RSM :在达到 SEI SW CMM 2 级或更高的团队中使用时,理论上应该只出现在理想状态。因为 RSM 基于 PMI/ISO/SEI 的范围 - 预算 - 进度模型,必须准确估计并按时交付,以达到“可重复”的 CMM Level 2 要求。

4.2 不同方法的优缺点总结

方法 优点 缺点
XP 快速响应变化,短迭代周期,能及时交付客户需求;团队协作紧密,沟通效率高 缺乏明确的分析、建模和规划,故事定义一致性有待提高
Scrum 提供清晰的项目框架,Sprint 机制保证工作的有序进行;能在混沌中提供一定的控制 倡导者回避建模,可能导致对项目整体架构的理解不足;加急请求处理不灵活
FDD 基于高级编码方案,度量指标明确,适合大规模项目;有助于提高过程成熟度 项目规模大,处理加急请求成本高;对团队成员的概念模型和编码方案掌握要求高
RSM 能够准确估计和按时交付,符合质量标准,适合成熟、稳定的项目 缺乏灵活性,难以应对需求变化频繁的项目;前期规划和文档工作繁琐

4.3 选择合适方法的关键因素

在选择软件开发方法时,需要综合考虑以下关键因素:

4.3.1 项目特性
  • 项目规模 :大规模项目可能更适合 FDD 或 RSM,因为它们有更完善的管理和控制机制;小规模项目可以选择 XP 或 Scrum,以提高灵活性和响应速度。
  • 需求稳定性 :需求稳定的项目可以考虑 RSM;需求变化频繁的项目则应优先选择敏捷方法。
4.3.2 团队能力
  • 技术能力 :团队成员对特定方法的技术掌握程度会影响方法的选择。例如,如果团队熟悉 FDD 的编码方案和概念模型,那么 FDD 可能是一个好选择。
  • 协作能力 :敏捷方法强调团队协作和沟通,因此团队的协作能力也是选择方法的重要因素。
4.3.3 市场环境
  • 市场成熟度 :在成熟市场中,项目需求相对明确,RSM 可能更合适;在不成熟市场中,需求变化快,敏捷方法更能适应市场变化。
  • 加急请求频率 :如果项目可能面临频繁的加急请求,敏捷方法(如 XP)可能更具优势。

以下是选择合适方法的决策树 mermaid 流程图:

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;

    A([开始选择方法]):::startend --> B{项目规模大吗?}:::decision
    B -->|是| C{需求稳定吗?}:::decision
    B -->|否| D{需求变化频繁吗?}:::decision
    C -->|是| E(考虑 FDD 或 RSM):::process
    C -->|否| F(考虑敏捷方法):::process
    D -->|是| F
    D -->|否| G{团队协作能力强吗?}:::decision
    G -->|是| H(考虑 XP 或 Scrum):::process
    G -->|否| I(考虑结构化方法):::process
    E --> J([确定方法]):::startend
    F --> J
    H --> J
    I --> J

综上所述,软件项目管理方法的选择是一个复杂的决策过程,需要综合考虑项目的各个方面。不同的方法在不同的场景下有各自的优势和劣势,只有根据具体情况选择合适的方法,才能提高项目的成功率和效益。

相关推荐

33、软件交付方法论深度解析

本文深度解析了软件交付中的两种主要方法论——瀑布模型和敏捷开发,探讨了它们的优缺点及适用场景。同时结合Cynefin框架分析了如何根据项目特征选择合适的交付方法,并介绍了Mobius Loop模型、敏捷开发的实践以及持续交付引擎的构建方法,旨在帮助团队实现高效、高质量的软件交付。

yhn4567890的博客 105

【信息科学与工程学】计算机科学与自动化 第二百零一十一 软件开发模型01

编号类型模型领域模型中的知识点/因素/参数关联知识和法律法规1传统顺序模型瀑布模型 (Waterfall)通用软件开发、硬件紧密耦合系统、政府/军工项目、需求稳定的传统信息系统严格线性阶段:可行性研究→需求分析(SRS,含功能/非功能/接口/约束,使用IEEE 830模板)→系统设计(概要设计HLD:架构、模块划分、数据库ER图;详细设计LLD:伪代码、类图、接口定义)→实现(编码规范、代码审查、静态分析工具SonarQube)→测试(单元测试JUnit、集成测试、系统测试、验收测试UAT,测试计划提前编写

weixin_49199313的博客 136

【审计专栏】【法律领域】【社会科学】 第五十六篇 企业管理层互动形态分析01 AI分析

战略官试图塑造公司“战略现实”S_s(如“未来在于AI”),业务总裁固守“运营现实”S_o(如“现金为王”)。

weixin_49199313的博客 502

【企业管理】【管理科学】企业全岗位综合运营与组织知识矩阵体系01

岗位类别核心职责工作内容(详细)协作模式协商焦点博弈策略信任建立机制序列化工作流程关键绩效指标研发类​技术创新与产品开发1.需求分析:R=f(U,M,T) 2.概念设计:C=D(S,B) 3.原型开发 4.测试验证 5.文档编写敏捷团队、跨功能协作技术方案、资源分配、优先级纳什均衡:ui​(si​,s−i​)≥ui​(si′​,s−i​)代码审查、技术分享、结果透明瀑布模型/敏捷迭代1.专利数量P 2.技术就绪度TRL 3.缺陷密度D<0.1/KLOC其中:U=用户需求,

weixin_49199313的博客 743

【信息科学与工程学】【管理科学】第三十篇 公司治理及公司工作内容02 研发与技术创新类算子01

2. 模型训练:使用图神经网络(如MEGNet, CGCNN)或梯度提升树(如XGBoost),在大型数据库(如Materials Project, OQMD)上训练,学习从结构到性能(如形成能、带隙、弹性模量)的映射。3. 以支撑结构为设计变量,使用拓扑优化方法,在满足结构刚度(抑制变形)和可制造性约束下,寻找材料分布的最优解,生成点状、线状或网状等轻量化支撑。(效率价值增量)= 因本次设备提升带来的研发周期缩短,所换算的“时间价值”(如,提前一月上市的市场价值)+ 预计减少的后续生产成本。

weixin_49199313的博客 615

【管理科学】第五十六篇 企业管理层的权-责-利益分析及权利-人性-资源限制分析01

字段进行深度扩展,详细列出基础数学方程式、组合数学约束方程式、联动方程式以及传递函数方程式,并同步更新参数列表与关联知识。以下为完善后的表格:编号类型行业企业类型企业性质问题(权利-资源-资质-门槛-规则-知识)数学分析及企业分析及权利-人性-资源限制分析(含逐步推理思考的数学方程式)参数列表及参数的数值范围及数值设计关联知识和法律法规和政策和行业管理规定列表1国家全行业(以制造业为例)有限责任公司央企+上市权利:投资决策权(项目立项、金额审批) 资源:自有资金E、银行贷款L、政府补贴S、累计未分配利

weixin_49199313的博客 161

【信息科学与工程学】【数据科学】第五十一篇 数据仓库00 基础设计01

数据仓库设计的系统性解决方案,涵盖架构模式、分层设计、百万级访问支撑、海量数据配置及与数据库/数据湖的对接策略: ​​ODS(操作数据层)​​:原始数据镜像,保留历史快照 ​​DWD(明细数据层)​​:清洗、标准化、维度退化 ​​DWS(汇总数据层)​​:主题宽表、轻度聚合 ​​ADS(应用数据层)​​:高度聚合,面向报表/API ​​二、百万用户访问架构设计​​ ​​1. 核心架构组件​​ ​​2. 关键配置参数(以Snowflake为例)​​ ​​3. 性能优化措

weixin_49199313的博客 1201

【信息科学与工程学】【管理科学】第七十二篇 管理层相对基层员工的信息差/资源差/权力差/认知差01

​ CTO调用Vlong−term​,Rstrategic​,Ppolitical​等高层级参数,重新计算Clevel​(X)。​ 将A部门经理对B部门员工的负面评价,在合适的时机透露给B部门经理,激化部门矛盾,HR总监则作为调解者介入,提升话语权。​ 信息经过VP、总监、经理逐级传递,每一级因自身利益、理解偏差、沟通技巧产生噪声,最终形成基层员工的Ei​(t2)。​ 在A面前说B对他有意见,在B面前说A对他的工作配合不力,让两人互相猜忌,PM则成为唯一的信息枢纽和仲裁者。

weixin_49199313的博客 94

WeVisOne-VL一套模型,把检测、分割、抠图和OCR都接到了一起

WeVisOne-VL 想解决的不是单点能力更强,而是把目标级理解和像素级理解放进同一套视觉语言模型里:从点、框,到 mask,再到连续 alpha matte,都能统一生成。 它覆盖检测、指代表达定位、计数、点选、OCR、分割和抠图,最大的看点是输出粒度可以按需求切换,而且遇到图里根本不存在的目标时,能直接返回 None,尽量避免“看错了还硬答”的幻觉。 技术上,它把任务统一写成结构化文本预测,再配一个只有 960 万参数的轻量像素解码器,不依赖 SAM,也能把框进一步细化成 mask 和 alpha matte。项目同时放出了 2B、4B 权重、推理包、Cookbooks、评测流程和 Gradio Demo;按仓库给出的结果,4B 版本在检测、指代定位、计数、OCR、分割和抠图等多项基准上都压过一批强开源基线。 更值得琢磨的是它背后的数据引擎:用知识图谱驱动概念发现,再结合专家模型与 VLM 校验,把框扩展到 mask 和高质量透明度标注,累计覆盖超过 1 亿张图像。这类工作真正有价值的地方,不只是又做出一个大模型,而是让“看见什么”和“精确到哪一层”第一次被放进一条顺滑的产品链路里。

:撞击时间控制的非奇异滑动模式制导定律.zip

1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

MATLAB实现了PEM燃料电池中PFSA膜化学降解的23反应动力学模型。.zip

1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

基于 ResNet+CBAM 注意力的 12 类生活垃圾图像分类系统

## 基于 ResNet+CBAM 注意力的 12 类生活垃圾图像分类系统 针对生活垃圾图像存在背景杂乱、物体尺度多变、不同品类外观易混淆的现实难题,本项目基于 PyTorch 搭建嵌入 CBAM 卷积块注意力模块的 ResNet 系列改进网络,完成 12 类生活垃圾智能分类任务,数据集共计 4600 余张图像,类别标签通过`class_indices.json`完成数字索引与垃圾类别名称映射,涵盖电池、生物垃圾、玻璃、纸板、衣物、金属、纸张、塑料、鞋子、其他杂物等常见生活废弃物。项目支持 ResNet18/34/50/101/152 多种骨干网络选择,依托迁移学习策略,可选择冻结主干网络,仅训练全连接分类头与 CBAM 注意力模块,充分缓解小样本场景下的过拟合现象。 整套工程由`train.py`训练脚本、`predict.py`批量推理脚本、`utils.py`工具库构成完整闭环。训练阶段借助 thop 工具自动统计模型参数量与 FLOPs 计算量;采用余弦退火学习率衰减,提供 SGD、Adam 两种优化器;自定义混淆矩阵工具类自动计算准确率、精确率、召回率、特异性、F1 分数,全部实验指标持久化保存为 JSON 日志。训练结束自动生成损失‑精度曲线、学习率变化曲线、P‑R‑S‑F1 指标曲线,同时绘制训练集与验证集混淆矩阵,便于直观分析各类样本识别效果。 数据预处理使用随机旋转实现数据增强,输入图像统一处理为 224×224 尺寸,使用 ImageNet 数据集均值方差做标准化。推理模块批量读取待检测垃圾图片,输出 top‑2/top‑3 类别置信度,调用 OpenCV 将类别名称与概率直接绘制在原图并保存输出结果。 CBAM 模块串行融合通道注意力与空间注意力,嵌入 ResNet 的 layer1‑layer4,让网络自主聚焦垃圾主体区域,抑制复杂背景带来的

chatbot详细代码可直接使用

配合文章使用,apikey自备

三相PWM整流器双闭环仿真(Simulink仿真实现)

内容概要:本文系统介绍了基于Simulink的三相PWM整流器双闭环控制系统的仿真实现方法,重点对比了模糊PID控制与传统PID控制在电力电子系统中的动态性能差异,涵盖系统建模、控制器设计、仿真搭建与结果分析等关键环节。同时拓展提供了丰富的科研仿真资源,覆盖无刷直流电机控制、智能优化算法、机器学习、图像处理、路径规划、通信与信号处理、电力系统管理等多个技术方向,形成面向科研与工程应用的综合性Matlab/Simulink仿真支持体系。; 适合人群:电气工程、自动化、控制科学与工程等相关专业的研究生及科研人员,具备一定Matlab/Simulink操作基础,正在开展电力电子变换、电机驱动控制或智能控制算法研究的技术工作者。; 使用场景及目标:①掌握三相PWM整流器双闭环系统的建模与仿真流程;②深入理解模糊PID相对于传统PID在抗扰动、响应速度和稳定性方面的优势;③借鉴文中提供的多样化仿真案例,推动智能算法在复杂系统控制中的创新应用与科研成果转化。; 阅读建议:建议结合文档中提供的网盘资源与公众号资料,按照目录结构循序渐进地学习各仿真模型的设计思路与实现细节,动手复现并调试代码,强化对控制策略本质与系统动态特性的理解,提升科研仿真能力。

用于非线性多载波卫星信道的多输入多输出符号速率信号数字预失真器DPD(Matlab代码实现)

内容概要:本文介绍了一种针对非线性多载波卫星信道的多输入多输出(MIMO)符号速率信号数字预失真器(DPD)的设计与实现方法,采用Matlab代码进行仿真验证。该DPD技术旨在有效补偿高功率放大器在多载波信号传输中引入的非线性失真,提升卫星通信系统的线性度与传输效率。方案聚焦于符号速率层面的处理,相较于传统的采样速率DPD,降低了计算复杂度,同时结合MIMO架构以适应现代宽带卫星通信的需求,具备良好的工程应用前景。文中提供了完整的Matlab实现代码,便于研究人员进行复现、测试与进一步优化。; 适合人群:从事通信系统设计、卫星通信、射频工程及相关领域的研究生、科研人员与工程师,具备一定的信号处理和Matlab编程基础;; 使用场景及目标:①研究非线性失真对多载波卫星通信系统的影响机制;②设计并验证适用于MIMO架构的低复杂度符号速率数字预失真算法;③通过Matlab仿真平台开展算法性能评估与优化,推动其在实际卫星通信系统中的应用落地;; 阅读建议:建议结合通信原理、非线性系统建模与数字信号处理相关理论同步学习,重点关注DPD结构选择、模型参数辨识方法及仿真结果分析,动手运行并调试所提供的Matlab代码以加深理解。

无刷直流电机模糊神经网络PID-模糊PID-传统PID三种控制对比Simulink仿真

内容概要:本文围绕无刷直流电机(BLDCM)的控制策略,利用Simulink搭建了三种控制方法——传统PID、模糊PID与模糊神经网络PID的对比仿真模型,重点研究了无刷直流电机在转速电流双闭环控制下的性能表现。通过构建统一的系统模型,对三种控制算法进行了详细的建模与仿真实验,全面分析了它们在动态响应速度、稳态控制精度以及抗外部干扰能力等方面的差异。研究结果表明,相较于传统PID控制,模糊PID及模糊神经网络PID在抑制超调、加快响应和增强鲁棒性方面具有显著优势,尤其模糊神经网络PID结合了神经网络的自学习能力和模糊逻辑的推理能力,展现出更强的自适应调控性能。该资源还涵盖电力电子、微电网、路径规划、信号处理等多个领域的MATLAB/Simulink仿真案例,服务于科研与教学需求。; 适合人群:具备一定自动化、电气工程或控制理论基础,从事电机控制、电力电子或相关方向研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握无刷直流电机的基本建模与转速电流双闭环控制原理;②深入理解并对比传统PID、模糊PID与模糊神经网络PID三种控制策略的设计思想与控制性能差异;③学习基于Simulink的电机控制系统仿真建模方法,掌握控制器参数整定与系统性能评估技巧,为科研项目、毕业设计或工程实践提供技术参考与解决方案支持。; 阅读建议:建议结合文中提供的仿真模型与参考文献,动手实践Simulink建模流程,重点关注不同控制器的参数调节过程与系统动态响应特性的关联性,通过对比实验深入理解各类控制算法的优缺点;同时可延伸学习文档中涉及的其他先进控制策略与仿真技术,以拓宽技术视野并提升综合实践能力。

状态估计变分贝叶斯近似的递归噪声自适应卡尔曼滤波(Matlab代码实现)

内容概要:本文详细介绍了一种基于变分贝叶斯近似的递归噪声自适应卡尔曼滤波方法,并配套提供了完整的Matlab代码实现。该方法旨在解决传统卡尔曼滤波在面对过程噪声和观测噪声统计特性未知或时变情况下性能退化的问题,通过引入变分贝叶斯推断技术,实现对噪声协方差的在线联合估计与动态更新,从而提升滤波器在非平稳环境中的状态估计精度与鲁棒性。文中系统阐述了算法的理论基础、数学推导流程、递归计算结构及关键实现步骤,涵盖了概率图模型构建、似然函数近似、变分迭代优化等核心技术环节,适用于复杂动态系统中的自适应信号处理与状态估计任务。; 适合人群:具备良好线性系统理论、概率统计与贝叶斯估计基础,并熟悉Matlab编程的研究生、科研人员及从事导航、控制、传感融合等相关领域的工程技术人员; 使用场景及目标:①应对实际工程中因噪声先验信息缺失或环境变化导致的标准卡尔曼滤波失效问题;②应用于无人机导航、智能驾驶、工业状态监测、传感器融合等高精度自适应估计场景,提升系统在不确定环境下的稳定性和准确性; 阅读建议:建议读者结合所提供的Matlab代码逐模块研读,重点理解变分贝叶斯迭代过程中噪声协方差矩阵的后验更新机制,并通过仿真实验对比所提方法与标准KF/EKF/UKF的估计性能差异,深入掌握噪声自适应滤波的设计思想与实现技巧。

upload靶场笔记精简版

upload靶场笔记精简版

1.2 固态变压器:传统工频变压器的局限与SST的技术起源

本小节明确传统工频变压器在电力系统中的基础定位与核心工作特性,系统分析其在新型电力系统场景下的固有技术瓶颈,梳理固态变压器(Solid State Transformer, SST,又称电力电子变压器Power Electronic Transformer, PET)从概念提出到工程化成熟的完整演进路径,为后续SST技术优势、设计需求与规范符合性要求的讲解建立底层逻辑,同时对应GB/T 40429-2021《电力电子变压器通用技术要求》的需求制定背景。

技术工作者 656

保姆级避坑指南:用Livox官方工具搞定Mid-360多雷达自动标定(附源码Bug修复)

本文详细解析了使用Livox官方工具进行Mid-360多雷达自动标定的全流程,包括环境搭建、工具链配置、关键Bug修复及数据采集最佳实践。重点解决了PointCloudMapper.cpp边界检查缺失和calibration.cpp点云显示问题,提供了实用的代码修复方案和标定质量评估指标,帮助开发者高效完成激光雷达标定任务。

weixin_29053695的博客 278

项目回顾一:《高速多端口共享缓存模块》

本帖子仅为了回顾一下一年前自己动手完成的第一个数字ic设计项目的历程,为复试做一下准备,完成的这个sramc模块花了整整四个月的时间,从0到12个模块的代码产出以及模块的验证,虽然没有拿奖,也没有进入复赛,设计过程中使用的技术手段和算法也不太成熟,但这这是一个值得记录的过程!

weixin_60261760的博客 1253

UNet 改进(22):结合Transformer结构

保留了UNet的经典编码器-解码器结构在瓶颈层使用Transformer替代传统的卷积层采用跳跃连接保持空间细节信息使用双卷积块(DoubleConv)作为基础构建模块。

2401_82355416的博客 772

Python 爬虫实战:Boss直聘 Python 岗位招聘数据爬取

本文介绍了一个Python爬虫项目,用于抓取Boss直聘平台的Python岗位招聘数据并进行可视化分析。项目采用requests库发送POST请求,通过抓包分析获取JSON接口,绕过HTML解析直接获取结构化数据。主要内容包括: 接口分析:找到关键POST接口,解析请求头和JSON参数格式 环境准备:安装requests/pandas/matplotlib/pyecharts等依赖库 核心实现: 手动获取登录Cookie 构建请求头和城市代码映射 实现分页抓取职位列表数据 项目特色在于直接解析JSON接口而

u014481728的博客 296

基于STM32、HAL库的SC16IS752IPW总线转UART驱动程序设计

/ FIFO空间不足。// 设置LCR寄存器的DLAB位为1以访问DLL/DLH。// 设置LCR寄存器,先访问DLL/DLH。// 设置LCR寄存器(不包含DLAB位)

corlin6688的博客 815

借助AI搞定国社科“研究内容”部分!用Gemini 3 Pro轻松撰写6大模块,让基金本子效率质量更上一层楼

所谓研究整体框架,是对课题研究逻辑结构与技术路径的系统阐述,其核心在于通过研究目标分解、研究内容模块化与研究方法整合,构建一个层次清晰、逻辑严密、科学可行的研究体系。撰写要求:1)分要点、分层次列出主要研究内容,保持各部分之间的逻辑性、层次性与系统性;研究可行性可理解为开展本课题在理论基础、研究方法、研究条件、人员结构、平台支撑及外部协作等方面的可实施程度,可从内部条件与外部条件两个维度进行系统论证。研究背景为:我正在申报xxx年xxx(项目名称),课题名称为:xxx,拟采用的主要研究方法包括:xxx等;

智能AI让学术科研更容易 963

EXCEL VBA从入门到精通 前言

本书通过丰富的实例和案例,帮助读者更好地理解和应用Excel VBA编程,同时也介绍了常用的工具、资源、社区和协作平台等,方便读者进行进一步的学习和开发。我强烈推荐这本书给所有希望学习和掌握Excel VBA编程的读者。多样化的资源和工具介绍:本书介绍了丰富的工具和资源,包括官方文档、在线教程、代码库、论坛、博客等,方便读者进行进一步的学习和开发。详细的讲解和丰富的示例:本书从语法和对象开始讲解,通过丰富的实例和案例,帮助读者更好地理解和应用Excel VBA编程。第一节:什么是VBA 5。

1722

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

深度学习工具包 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")

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

上一篇: 19、网络认证服务技术详解
下一篇: 75、经典按需计算:理论与实践
sql99
博客等级 码龄19年 168粉丝 1905原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值