你有没有掉进去过这些 迭代器 的 “陷阱“

C++ STL deque::end()函数解析:迭代器设计原理与实战应用 在C++标准模板库(STL)中,迭代器是连接算法与容器的桥梁,其设计遵循左闭右开区间原则。这一设计理念使得容器遍历、算法应用和边界处理变得统一而高效。deque作为支持随机访问的双端队列容器,其end()函数返回的是尾后迭代器,而非指向最后一个元素,这是STL迭代器哲学的核心体现。理解这一原理对于避免解引用越界、正确处理空容器以及编写通用算法至关重要。在实际工程中,end()与STL算法协同工作,广泛应用于查找、排序、删除等场景,同时也是C++11范围for循环的底层基础。掌握deque迭代器的失效规则和性 阅读详情

一、迭代数组或集合时的 ”陷阱“

对于集合和数组的迭代,最常用的方式就是使用 for 循环 和 迭代器 进行迭代。新建一个 Maven 项目 iterator-traps, 添加 junit 依赖。

xml
复制代码
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>

在 test 包下创建测试类 com.traps.IterationTest,用于测试 for 循环 迭代和 迭代器 迭代

for 循环迭代

当需要对一个数组进行遍历的时候,可以使用 for 循环通过数组长度,建立索引来实现迭代

java
复制代码
public class IterationTest {

    @Test
    public void testForeachByUsingIndex(){
        int[] items = new int[]{1,2,3,4};

        for (int i = 0; i < items.length; i++) {
            System.out.println(items[i]);
        }
    }
}

执行上述代码,输出结果如下:

txt
复制代码
1
2
3
4

for 循环可以非常简单的通过索引来循环获取数组中的每一个元素。

迭代器迭代

迭代器 Iterator 是一种用于访问集合的方法,可以用于迭代集合,Iterator 接口是 Java 迭代器中最简单的实现,Java 中的集合 Collection 接口都有一个 iterator() 方法,该方法可以返回一个 Iterator 对象,Iterator 对象本身并不存放任何元素或者对象。

迭代器 模式提供了一种方法来顺序访问一个聚合对象中的各个元素,而不保留该对象的内部表示,迭代器模式是一种对象行为型模式,其主要优点如下:

  • 访问一个聚合对象的内容而无须暴露它的内部表示。
  • 将遍历任务交由迭代器完成,简化了聚合类。
  • 支持以不同方式遍历一个聚合,甚至可以自定义迭代器的子类以支持新的遍历。
  • 增加新的聚合类和迭代器类都很方便,无须修改原有代码。
  • 封装性良好,为遍历不同的聚合结构提供一个统一的接口。

在 IterationTest 测试类中增加测试方法 testIterateCollections

java
复制代码
public class IterationTest {

    // 其余代码保持不变 
    
    private static Collection<String> zulu = Arrays.asList("Seal A", "Seal B", "Seal C", "Seal D");

    private static Collection<String> yankee = Arrays.asList("Seal Z", "Seal Y", "Seal X", "Seal W", "Seal V");

    @Test
    public void testIterateCollections(){
        for (Iterator<String> items = yankee.iterator(); items.hasNext();){
            System.out.println(items.next());
        }
    }

}

执行上述代码,输出记过如下:

txt
复制代码
Seal Z
Seal Y
Seal X
Seal W
Seal V

但是当嵌套迭代两个集合时,会出现异常

java
复制代码
@Test
public void testNestIterateCollections(){
    for (Iterator<String> items = yankee.iterator(); items.hasNext();){
        for (Iterator<String> eles = zulu.iterator(); eles.hasNext();){
            System.out.println(items.next() + " " + eles.next());
        }
    }
}

执行上述代码,输出记过如下:

txt
复制代码
Seal Z Seal A
Seal Y Seal B
Seal X Seal C
Seal W Seal D
Seal V Seal A

java.util.NoSuchElementException
	at java.util.AbstractList$Itr.next(AbstractList.java:364)
        .....................

这是应为对于外部集合来说, next 调用次数太多,导致集合中的元素已经迭代完了还在调用 next,应该是在外部循环中调用 next 而不是在内嵌的循环中调用最外层迭代器的 next。

修改 testNestIterateCollections 方法

java
复制代码
@Test
public void testNestIterateCollections(){

    for (Iterator<String> items = yankee.iterator(); items.hasNext();){
        String code= items.next();
        for (Iterator<String> eles = zulu.iterator(); eles.hasNext();){
            System.out.println(code + " " + eles.next());
        }
    }
}

执行上述代码,输出结果如下:

image.png

这里给大家分享一份Python全套学习资料,包括学习路线、软件、源码、视频、面试题等等,都是我自己学习时整理的,希望可以对正在学习或者想要学习Python的朋友有帮助!

优快云大礼包:全网最全《全套Python学习资料》免费分享🎁

😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

👉优快云大礼包🎁:全网最全《Python学习资料》免费分享(安全链接,放心点击)👈

​

1️⃣零基础入门

① 学习路线

对于从来没有接触过Python的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

② 路线对应学习视频

还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~在这里插入图片描述

③练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
在这里插入图片描述
因篇幅有限,仅展示部分资料

2️⃣国内外Python书籍、文档

① 文档和书籍资料

在这里插入图片描述

3️⃣Python工具包+项目源码合集

①Python工具包

学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
在这里插入图片描述

②Python实战案例

光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
在这里插入图片描述

③Python小游戏源码

如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
在这里插入图片描述

4️⃣Python面试题

我们学会了Python之后,有了技能就可以出去找工作啦!下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

5️⃣Python兼职渠道

而且学会Python以后,还可以在各大兼职平台接单赚钱,各种兼职渠道+兼职注意事项+如何和客户沟通,我都整理成文档了。
在这里插入图片描述
在这里插入图片描述
上述所有资料 ⚡️ ,朋友们如果有需要 📦《全套Python学习资料》的,可以扫描下方二维码免费领取 🆓
😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

👉优快云大礼包🎁:全网最全《Python学习资料》免费分享(安全链接,放心点击)👈

​

从“恶魔轮盘赌”游戏代码剖析C++新手常见误区与现代化重构实践 在C++编程中,内存管理和资源安全是核心概念。其原理基于RAII(资源获取即初始化)设计理念,旨在确保资源的生命周期与对象绑定,从而避免内存泄漏和悬垂指针等问题。这一技术的价值在于构建健壮、可维护的软件系统,尤其在游戏开发、系统编程等对性能与稳定性要求高的应用场景中至关重要。本文通过一个具体的“恶魔轮盘赌”游戏项目案例,深入探讨了新手常犯的**内存泄漏**和**原始指针滥用**等典型错误,并演示如何运用现代C++特性(如智能指针和STL容器)进行重构,将脆弱代码转化为安全、清晰的工程实践范例。 阅读详情

相关推荐

C++20 Ranges库:从迭代器到声明式编程的算法优化实践

在C++编程中,算法优化和代码可维护性是开发者持续关注的核心议题。传统STL算法基于迭代器对,虽然功能强大,但常导致代码冗余、中间存储开销及可读性下降。其原理是通过分离的begin和end迭代器定义操作区间,但这种方式在表达复杂数据转换管道时显得笨拙。C++20引入的Ranges库带来了范式转移,它通过‘范围’这一统一抽象,结合视图适配器和惰性求值机制,实现了声明式编程风格。这项技术的核心价值在于提升开发效率、增强代码表达力,并通过编译期概念检查提升安全性。在应用场景上,它特别适用于数据流处理、集合转换和过

weixin_34279184的博客 350

实验踩坑记录:Java迭代器iterator无法remove、remove失败原因以及Iterator源码分析

Java Set 迭代器iterator无法remove、remove失败原因 在Java开发过程中遇到一个问题,调用Set的iterator.remove函数时无法删除,且未报错,但是单步运行时发现所比较对象时完全相同的,根据重写的equals()函数也可判断相同,以下为原代码: public static boolean removePiece(Player player, Piece p...

TWW 4702

GESP四级C++客观题备考:从死记硬背到静态推理的思维跃迁

在编程学习与能力认证中,对编程语言核心机制的理解深度是衡量学习者水平的关键。C++作为一门强调底层控制与抽象的系统级语言,其核心机制如对象生命周期管理、虚函数与多态、STL容器行为语义以及资源管理(RAII)等,构成了理解程序运行原理的基础。掌握这些机制的技术价值在于,它使开发者能够进行精准的“静态推理”,即在不实际运行代码的情况下,通过逻辑推演预判程序行为、识别潜在陷阱(如迭代器失效、未定义行为),从而编写出更健壮、高效的代码。这种能力在代码审查、系统设计调试等工程实践中至关重要。本文聚焦于GESP四级C

aodiyi6351的博客 402

C++ std::accumulate深度解析:从求和到通用归约的进阶指南

归约(Reduction)是函数式编程和数据处理中的核心概念,指将一组数据通过特定操作合并为单一结果的过程。其原理在于提供一个初始值和一个二元操作,按顺序将操作应用于序列的每个元素与当前累积值上。在C++标准库中,std::accumulate是实现归约的通用算法,其技术价值在于通过泛型设计和迭代器抽象,将算法逻辑与具体容器解耦,实现了高度的可复用性和灵活性。它广泛应用于数学计算(如累加、累乘)、字符串拼接、容器合并以及需要维护复杂状态(如同时计算总和与计数)的业务场景。本文以C++的std::accumu

weixin_34034670的博客 351

C++ STL容器size()函数:从常数时间复杂度到工程实践

在C++标准模板库(STL)中,容器是数据结构的核心抽象,其成员函数的设计直接影响程序性能与代码质量。size()作为获取元素数量的基础接口,其时间复杂度从早期标准的未明确指定演进为C++11后的常数时间保证,体现了STL“零开销抽象”的设计哲学。这一变化源于对开发者体验与性能承诺的权衡,要求容器内部维护独立计数器而非遍历计数。从技术价值看,常数时间的size()确保了循环控制、内存预分配等高频操作的高效性,避免了潜在的O(n)性能陷阱。在应用场景中,size()常与empty()协同用于条件判断,其无符号

weixin_30321709的博客 355

自定义Iterator迭代器

一个关于Iterator迭代器的小例子。 MyIterableList.java import java.util.ArrayList; import java.util.Iterator; /** * 继承抽象列表类 , 实现了Iterator&lt;T&gt;接口,这个要注意区分 Iterable&lt;T&gt; */ class MyIterableList&lt;E&g...

越过第八个坑的博客 1723

C++观察者模式实战:构建松耦合事件驱动系统的核心技巧

观察者模式是软件设计中实现对象间松耦合通信的核心机制,它通过定义一对多的依赖关系,让多个订阅者自动响应发布者的状态变化。其原理基于事件驱动架构,发布者维护订阅者列表并在状态变更时通知所有观察者,有效解决了紧耦合带来的代码维护难题。这一模式的技术价值在于提升系统的可扩展性和可维护性,遵循开闭原则,支持动态增减观察者而不影响核心逻辑。在C++工程实践中,观察者模式广泛应用于GUI事件处理、实时数据监控、消息中间件等场景,尤其适合需要处理**内存管理**和**线程安全**的复杂系统。通过合理使用智能指针和锁机制,

weixin_30888413的博客 358

迭代器、与集合的坑使用时要注意

weixin_42923199的博客 294

立创开源PEX88048 8盘位M.2扩展卡硬件设计与PCIE4.0交换机应用解析

本文详细解析了基于Broadcom PEX88048 PCIe 4.0交换芯片的8盘位M.2扩展卡硬件设计。文章深入探讨了核心芯片选型、关键供电与安全设计、引脚配置、固件刷写方法,并重点剖析了PCIe 4.0时钟架构与高速PCB布局的核心思想,旨在帮助开发者理解如何设计高性能、高可靠性的存储扩展方案,并有效控制成本。

weixin_28949937的博客 622

OpencvSharp学习笔记(一):图片的打开,保存灰度化,保存

近来萌生了学习OpenCv的想法,经过度娘得知老夫会的C#不能直接用OpenCv,只能用他的儿子OpenCvSharp与EmguCV,奈何奈何,这两玩意的资料少的出奇,只能慢慢的摸索了,EmguCV先不说,老夫找到了牛批的资料,先摸索OpencvSharp吧 首先打开VS通过Nuget安装 选择版本后点击安装就OK了. 安装完成后,引用里面就有以下的玩意儿了… 废话不多说了,在写程序前先 using OpenCvSharp 图片打开,灰度化,保存代码如下: static void Main(strin

猥琐de专注 7188

JAVA中简单的for循环竟有这么多坑,你掉进去了吗

实际的业务项目开发中,大家应该对这个操作不陌生吧?很多同学可以立刻想出很多种实现的方式,但你想到的这些实现方式都是的吗?很多看似正常的操作其实背后是个陷阱,很多新手可能稍不留神就会掉入其中。倘若不幸踩中:那么,到底有哪些实现方式呢?哪些实现方式可能会存在问题呢?这里我们一起探讨下。注意哦,这里讨论的可不是茴香豆的“茴”字有有种写法的问题,而是很严肃很现实也很容易被忽略的技术问题。假设需求场景:很多新手的第一想法就是for循环逐个判断校验下然后符合条件的剔除掉就行了嘛~ so easy...1分钟就把代码写完

m0_71777195的博客 327

NIDS——suricata(一)

NIDS——suricata环境安装和规则编写

weixin_58666006的博客 1273

java foreach 空指针,浅谈foreach写失效的问题

Java中的细节一定要清楚,否则非常容易出现问题。例如这个场景:遍历一个集合,对符合某种条件的元素做修改。大家往往会写出如下代码:public class JavaTest{public static void main(String[] args){ArrayList list = new ArrayList();list.add(1);list.add(2);list.add(3);for (...

weixin_39912250的博客 537

8.30华为OD机试真题 新系统 - 单词搜索计数 (Java/Py/C/C++/Js/Go)

8.30华为OD机试真题 新系统 - 单词搜索计数 (Java/Py/C/C++/Js/Go)

算法大师! 603

手把手教你学SOME/IP「3.2.1.发布/订阅行为」

本文详细介绍了SOME/IP协议中的服务发现机制,重点解析了发布/订阅行为的流程。主要内容包括:1)服务发布与Method通信流程,涵盖find/offer报文交互、TTL保活机制及异常处理;2)服务订阅与Event通信流程,包括subscribe/ack报文交互和组播延迟机制;3)特殊场景如快速发送、半周期回复、重置订阅等机制。通过邮局订阅报纸的类比,帮助理解服务发现的核心原理,并强调流程图对于问题定位的重要性。文章为SOME/IP协议的工程实现提供了实用指导。

nihaoljq2010的博客 1223

C++组合数据类型:从基础概念到实战应用与性能优化

在编程中,数据结构是组织和存储数据的核心方式,它决定了程序的效率、可维护性和扩展性。其原理在于通过逻辑关系将基本数据类型组合成更复杂的结构,以更贴切地模拟现实世界实体。这种数据抽象和封装的技术价值在于提升代码的模块化、减少冗余并优化内存访问。在C++中,组合数据类型如结构体、类以及标准库容器(如vector、map)是实现这一思想的关键工具,广泛应用于算法设计、游戏开发、后端服务等场景。本文将深入探讨C++组合数据类型的核心思想,涵盖struct与class的内存布局、STL容器的选择策略以及高级应用如嵌套

weixin_30616969的博客 795

激光雷达点云配准:ICP与NDT算法详解

激光雷达点云配准:ICP与NDT算法详解​ ,人工智能,计算机视觉,大模型,AI,本文深入解析激光雷达点云配准的ICP与NDT算法。阐述了点云配准基础概念与评价指标,详解ICP算法原理、流程、最优变换矩阵计算、优缺点及改进版,给出Python代码示例;同样解析NDT算法的原理、流程、模型构建、优缺点、参数选择与代码示例。还对比两者在精度、效率、鲁棒性和适用场景的差异,提供算法选择建议,介绍实际应用案例、常见问题及解决方法,探讨算法发展趋势。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 15万+

C++ STL核心组件解析与高效编程实践指南

在C++编程中,数据结构和算法是构建高效软件的基础。标准模板库(STL)通过容器、算法和迭代器三大核心组件的泛型设计,实现了数据与操作的分离,极大地提升了代码的复用性和性能。其技术价值在于提供了经过高度优化的通用组件,开发者无需重复实现基础数据结构,从而能专注于业务逻辑。例如,vector凭借其连续内存布局和缓存友好性,在需要频繁随机访问的场景下性能卓越;而map基于红黑树实现,提供了稳定的对数时间复杂度查找。在实际应用场景中,STL广泛用于系统开发、游戏引擎、高频交易等对性能要求苛刻的领域。掌握STL的容

weixin_34087307的博客 392

STM32 cubeMX配置串口重定向

这篇文章主要讲解什么是串口重定向,为什么要串口串口重定向。使用printf函数和上位机通信是非常的方便的。希望大家都能够掌握。

m0_49476241的博客 4573

生产环境中redis的SCAN命令如何替代KEYS命令?

本文介绍了使用SCAN命令替代KEYS的完整方案。SCAN通过游标分批迭代,避免KEYS命令遍历整个键空间导致的阻塞风险。文章详细说明了SCAN的基础语法、迭代流程和Java实现示例,强调必须关闭Cursor避免连接泄漏。针对生产环境,提供了COUNT参数调优、客户端去重、集群模式适配等优化建议,并列举了典型错误场景。SCAN通过分批次迭代和游标管理,可安全实现高性能键空间遍历。全文150字。

DN金猿的博客 179

foreach写失效的问题

http://www.cnblogs.com/zuosy/p/7259248.html Java中的细节一定要清楚,否则非常容易出现问题。例如这个场景:遍历一个集合,对符合某种条件的元素做修改。大家往往会写出如下代码: 1 public class JavaTest 2 { 3 public static void main(String[] args

DuanLiuchang的博客 810

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

C/C++循环语句实战指南:while/do while/for选择与陷阱规避

循环是程序自动化的核心机制,它通过条件判断控制代码块的重复执行,实现了从遍历数据结构到处理批量任务的基础功能。理解循环的工作原理,关键在于掌握其控制流程和迭代逻辑,这直接关系到代码的执行效率和资源消耗。在工程实践中,循环结构的选择直接影响程序的可读性和健壮性,特别是在处理数组遍历、用户交互和算法实现等场景时。本文聚焦于C/C++中的循环语句,深入探讨while、do while和for三种结构的适用场景与设计哲学,并针对**死循环**和**差一错误**等常见陷阱提供规避方案,帮助开发者编写出高效且可靠的循环

ciqiaofu0192的博客 399

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

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Python列表合并六种方法详解:从+到itertools.chain的性能与应用场景

在Python编程中,数据结构操作是基础且核心的技能。列表(list)作为最常用的序列类型,其合并操作涉及内存管理、时间复杂度和代码可读性等多方面考量。从原理上讲,不同的合并方法在Python解释器层面有不同的实现机制,例如加法运算符会创建新对象,而extend()方法则进行原地扩展。这些底层差异直接影响了代码的性能表现和技术价值,尤其在处理大规模数据或高频调用时更为显著。在实际应用场景中,数据清洗、API响应聚合、日志流处理等都需要高效的列表合并策略。本文聚焦于Python列表合并的六种核心方法,通过对比

weixin_30899023的博客 258

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

深入解析Pytorch模型参数量统计:从基础实现到模块化分析

本文深入解析了PyTorch模型参数量的统计方法,从基础实现到模块化分析。文章阐述了模型参数量统计的重要性,它不仅影响训练和推理的资源消耗,更是模型压缩与优化的关键指标。通过介绍如何避免统计陷阱、进行模块化“称重”以及关联模型性能,帮助开发者精准掌控模型规模与效率。

weixin_29071809的博客 316
上一篇: Python Flask 编程 | 连载 07 - Jinja2 语法
下一篇: 多达3263页学习资料,一本在手,Python不愁!
Llama-Turbo
博客等级 码龄4年 9901粉丝 2024原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值