用例子看看,Python 3.12 到底更新了啥?

2025年最新Python 3.12安装与配置教程 Python是全球最流行的编程语言之一,以简洁语法和丰富生态库著称,广泛应用于Web开发、人工智能、数据分析等领域。本文从下载到实战完整演示了Python 3.12的安装流程,涵盖环境配置、代码验证及常见问题解决。所有步骤均基于官方正版资源,安全可靠。 阅读详情

在前几天,python 3.12 正式发布了,那到底更新了哪些内容呢?一起来看看

改善报错信息


来自官方标准库的模块现在可以在报NameError时提示问题原因,比如

>>> sys.version_info  
Traceback (most recent call last):  
  File "<stdin>", line 1, in <module>  
NameError: name 'sys' is not defined. Did you forget to import 'sys'?  

当实例内报NameError时也会提示问题原因,比如成员方法引用了未定义的变量,而这个变量名又和成员变量名相同时会提示用户是否忘记加self,比如

>>> class A:  
...    def __init__(self):  
...        self.blech = 1  
...  
...    def foo(self):  
...        somethin = blech  
  
>>> A().foo()  
Traceback (most recent call last):  
  File "<stdin>", line 1  
    somethin = blech  
               ^^^^^  
NameError: name 'blech' is not defined. Did you mean: 'self.blech'?  

当导入模块时import和from写反报SyntaxError时也会提示原因,比如

>>> import a.y.z from b.y.z  
Traceback (most recent call last):  
  File "<stdin>", line 1  
    import a.y.z from b.y.z  
    ^^^^^^^^^^^^^^^^^^^^^^^  
SyntaxError: Did you mean to use 'from ... import ...' instead?  

在导入模块错误报ImportError时也会提示应该导入哪个对象,比如

python  
复制代码>>> from collections import chainmap  
Traceback (most recent call last):  
  File "<stdin>", line 1, in <module>  
ImportError: cannot import name 'chainmap' from 'collections'. Did you mean: 'ChainMap'?  

新功能


PEP701 f-string的语义格式化

现在f-string内的表达式可以是任何合法的Python表达式,包括反斜杠、Unicode转义、多行表达式、注释和重复使用的引号种类。

  • 重复使用的引号种类:在Python 3.12版本中,用户可以在表达式里重复使用f-string使用过的引号种类,比如这里重复使用了双引号
>>> songs = ['Take me back to Eden', 'Alkaline', 'Ascensionism']  
>>> f"This is the playlist: {", ".join(songs)}"  
'This is the playlist: Take me back to Eden, Alkaline, Ascensionism'  

因为这个改动,现在Python可以内嵌多个f-string了,比如以前只能内嵌4层

>>> f"""{f'''{f'{f"{1+1}"}'}'''}"""  
'2'  

现在则没有这种限制

>>> f"{f"{f"{f"{f"{f"{1+1}"}"}"}"}"}"  
'2'  

  • 多行表达式和注释:以前在f-string中必须把表达式写在一行内,可读性不高。现在没有这种限制,并且可以包含注释。
>>> f"This is the playlist: {", ".join([  
... Take me back to Eden',  # My, my, those eyes like fire  
... 'Alkaline',              # Not acid nor alkaline  
... 'Ascensionism'           # Take to the broken skies at last  
...])}"  
'This is the playlist: Take me back to Eden, Alkaline, Ascensionism'  

  • 反斜杠和Unicode字符:以前在f-string中不能使用反斜杠和Unicode转义。这会使得有的Unicode字符无法在f-string中使用,现在没有这种限制了。
python  
复制代码>>> print(f"This is the playlist: {"\n".join(songs)}")  
This is the playlist: Take me back to Eden  
Alkaline  
Ascensionism  
>>> print(f"This is the playlist: {"\N{BLACK HEART SUIT}".join(songs)}")  
This is the playlist: Take me back to Eden♥Alkaline♥Ascensionism  

一个有用的副作用就是现在报错的位置更精准了。比如在3.11中解释器不能告诉用户SyntaxError错误产生的位置。

>>> my_string = f"{x z y}" + f"{1 + 1}"  
  File "<stdin>", line 1  
    (x z y)  
     ^^^  
SyntaxError: f-string: invalid syntax. Perhaps you forgot a comma?  

现在可以获取到报错位置了。

>>> my_string = f"{x z y}" + f"{1 + 1}"  
  File "<stdin>", line 1  
    my_string = f"{x z y}" + f"{1 + 1}"  
                   ^^^  
SyntaxError: invalid syntax. Perhaps you forgot a comma?  

PEP709 内联行为

现在解释器会把字典、列表和集合理解成内联行为,而不是只用一次的数据结构,这样做会让程序运行速度提升一倍。但是,迭代器并不会理解成内联行为。

译者:这部分关系到虚拟机帧栈的优化,其API对普通用户并无感知。

PEP 688 Buffer协议可以暴露给用户使用

这个提案介绍了如何让Python用户使用到buffer协议,只需要让类实现__buffer__()方法就可以把它当作Buffer类使用。

与此同时,新的collections.abc.Buffer抽象基类提供了标准的暴露buffer的方式,比如在类型注解里。在新的inspect.BufferFlags枚举可以表示自定义的buffer资源。

与类型注解相关的新功能


PEP 692 用`TypedDict`注解**kwargs类型

PEP 484 介绍了如何注解函数签名中**kwargs的类型,但是所有的**kwargs类型都一样。这份提案提供了一种更精确的类型注解方案,比如

from typing import TypedDict, Unpack  
  
class Movie(TypedDict):  
  name: str  
  year: int  
  
def foo(**kwargs: Unpack[Movie]): ...  

PEP 698 静态类型注解的override装饰器

typing模块中加入了一个新的装饰器typing.override(),它表明被它修饰的方法需要复写其父类的同名方法(译者注:类似于Java的@Overide)。它可以让类型检查该方法是否正确复写了父类的方法。

from typing import override  
  
class Base:  
  def get_color(self) -> str:  
    return "blue"  
  
class GoodChild(Base):  
  @override  # ok: overrides Base.get_color  
  def get_color(self) -> str:  
    return "yellow"  
  
class BadChild(Base):  
  @override  # type checker error: does not override Base.get_color  
  def get_colour(self) -> str:  
    return "red" 

PEP 695 参数类型语法

在PEP 484 中,Python对泛型类和方法类型注解的支持有点啰嗦且不够精确,并需要一套更直白的类型声明方案。本提案引入了一种新的、简洁的、直白的类型注解方案。

def max[T](args: Iterable[T]) -> T:  
    ...  
  
class list[T]:  
    def __getitem__(self, index: int, /) -> T:  
        ...  
  
    def append(self, element: T) -> None:  
        ...  

此外,本方案还引入了一种新type别名声明方案,并可以通过type创建一个TypeAliasType实例。

type Point = tuple[float, float]  

类型别名同样可以加入泛型。

type Point[T] = tuple[T, T]  

新的语法规则允许声明TypeVarTuple和ParamSpec,就像声明TypeVar一样。

type IntFunc[**P] = Callable[P, int]  # ParamSpec  
type LabeledTuple[*Ts] = tuple[str, *Ts]  # TypeVarTuple  
type HashableSequence[T: Hashable] = Sequence[T]  # TypeVar with bound  
type IntOrStrSequence[T: (int, str)] = Sequence[T]  # TypeVar with constraints  

类型别名、范围以及限制类型只有在解释器需要的时候创建,也就是说别名可以在代码其他地方被重写。

参数类型的声明作用于声明的范围,对其外部是不生效的。举个例子,函数参数的类型注解可以作用于其派生类的方法或该类的其他地方。然而,它不能作用于模块范围内的其他地方,即使这个地方位于该类的定义的后面。具体使用方法可以参考Type parameter lists章节。

为了支持这种范围的类型注解,现在虚拟机引入了一种新的范围——注解范围(annotation scope)。在大多数情况下,这个范围等同于函数的范围,但是它会和不同的类的范围发生关联。在Python 3.13中,所有的类型注解都会在这个范围内。

其他语言改动(部分)


  • 增加了环境变量PYTHONPERFSUPPORT、命令行参数-X perf以及API sys.activate_stack_trampoline()、sys.deactivate_stack_trampoline()和sys.is_stack_trampoline_active()以支持Linux优化(Python support for the Linux perf profiler)

  • 如果底层字典结构是可哈希的,那么types.MappingProxyType实例现在也是可哈希的

  • 语法分析器现在可以分析空字节

  • 现在GC只会在字节码之间的暂停点运行,而不是分配内存的时候运行。另外,GC还会在调用PyErr_CheckSignals()时运行。这样,在Python的C扩展中解释器可以执行大量的C语言代码而不去执行Python代码,以便减少GC运行的可能性。

  • 你可以在生成的数据中使用海象运算符(:=)来赋值,比如[(b := 1) for a, b.prop in some_iter]

  • slice对象现在是可哈希的,所以可以用作字典的键。

  • sum()方法现在用了新的求和算法,所以现在更精确了。

小结


以上是Python 3.12语法层面的改动。可以看出,现在Python委员会的发力点一个是类型注解,另一个是GC的使用效率。他们这么做也很好理解,这两个问题一直是为人诟病的症结。弱类型语言使得Python成为不了大型项目的开发语言,而效率低下的GC也是阻碍Python往前一步的绊脚石。

不管怎么说,Python毫无疑问是当下最热门的语言,具体会往什么方向发展,让我们拭目以待吧。

—END—

---------------------------END---------------------------

题外话

当下这个大数据时代不掌握一门编程语言怎么跟的上脚本呢?当下最火的编程语言Python前景一片光明!如果你也想跟上时代提升自己那么请看一下.

在这里插入图片描述

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。


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

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述

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

若有侵权,请联系删除

(1)Python 3.12 环境搭建(Windows版) 运行刚刚下载的安装程序(.exe文件),在安装向导的第一个页面,勾选【Add Python 3.11 to PATH】选项,这将自动将Python添加到系统环境变量中,选择【Install Now】进行默认安装。,在导航栏中,鼠标移到【Downloads】-> 【Windows】,单击【Python 3.12.4】按钮。等待,系统下载完成,下载完成后,点击下载的.exe文件进行安装。在电脑菜单搜索栏,输入cmd,选择【命令提示符】。 阅读详情

相关推荐

ubuntu 安装python3.12

如果您使用 APT 包管理器安装了 Python 3.12,则默认情况下不会安装 PIP。在 Ubuntu 22.04 操作系统上安装 Python 3.12 的另一种方法是从源代码构建它。这使得在 Ubuntu 上安装 Python 变得容易,并能够接收持续的更新、错误修复和安全更新。使用 APT 在 Ubuntu 22.04 上安装 Python 3.12 非常容易,大力称赞。构建过程完成后,运行以下命令在 Ubuntu 22.04 系统上完成 Python 安装。

hellochenlian的专栏 9054

最新python3.12安装下载教程+卸载python教程

近期官方发布了Python 3.12.0的稳定版本,Python 3.12.0 是 Python 编程语言的最新主要版本,它包含许多新功能和优化。以下是3.12系列相比3.11主要新特性1.类型注解改进:Python 3.12对类型注解进行了改进,包括支持匿名函数(lambda)的类型注解、支持多个返回值的类型注解、支持在类型注解中使用泛型类型等。2.新的内置函数:Python 3.12引入了一些新的内置函数,如breakpoint()和exec()。

qq_41314882的博客 1万+

centos7 安装python3.12.5

【代码】centos7 安装python3.12.5。

m0_52454621的博客 2198

Python 新版来袭!3.12.0 安装教程!!

是一门面向对象的计算机程序设计语言,以简洁和优雅著称,可以用于网络爬虫、web开发、人工智能、机器学习、数据挖掘及分析等工作,是目前最受欢迎的编程语言之一。目前常见的Python版本有Python2和Python3,Python3不向下(Python2)兼容,同时官方明确表示2020年1月1日不再支持Python2,因此强烈建议大家学习。Python3最新版本已经发行到,同时还有3.5、3.6、3.7、3.8、3.9、3.10、3.11系列。课代表把目前常用的各个小版本都放到了一起,大家按需下载即可。

Python栈 1万+

Ubuntu22.04安装python3.12

【代码】Ubuntu22.04安装python3.12。

菜鸡,轻喷 9155

ArcGIS 10.2.2自带Python 2.7.5环境配置全攻略:从pip安装到gdal、arcpy调用

本文详细指导如何在ArcGIS 10.2.2自带的Python 2.7.5环境中进行高效配置。核心内容包括安装pip包管理器、部署gdal等关键地理数据处理库,并确保arcpy模块的无缝调用。通过解决路径配置与PyCharm集成问题,帮助用户在此经典环境中构建稳定、兼容的地理信息自动化工作流,有效连接ArcGIS桌面功能与Python脚本编程。

moon9的博客 769

快看!Python 3.12更新了什么?

就在今年,Python官方发布了这个语言的3.12预发版本。像往常一样,这个版本更新了大量内容,我也挑选了大部分内容翻译了一下,先一睹为快吧。

z099164的博客 3666

解决ArcGIS-OpenStreetMap Toolbox-Load OSM File错误

在安装成功OpenStreetMap Toolbox后,首次运行Load OSM File工具,出现以下错误

Zjf的博客 8821

用例子来看看Python 3.12 到底更新了啥?

在前几天,python 3.12 正式发布了,那到底更新了哪些内容呢?一起来看看。

Saki_Python的博客 340

STM32实战:手把手教你移植CanFestival协议栈(附完整代码)

本文提供了一份详尽的STM32平台移植CanFestival协议栈的实战指南。文章从工程搭建、定时器驱动、CAN硬件适配到对象字典配置,手把手讲解核心步骤,并附完整代码示例。重点剖析了时间管理、报文收发等关键环节的实现与常见问题解决方案,旨在帮助开发者深入理解并成功实现CANopen通信。

kiwi8的博客 274

避开期货指标常见坑:文华财经赢顺DK多空指标优化配置指南(附参数调试技巧)

本文详细解析了文华财经赢顺DK多空指标的优化配置方法,帮助交易者避开常见使用误区。通过参数个性化适配、动态调整趋势阈值和过滤假信号的三重验证,提升指标在期货交易中的准确性。附有参数调试技巧和不同市况下的配置建议,适合中高级交易者参考。

weixin_29063979的博客 436

在 Ubuntu 20.04 上安装 Python 3.12:详细教程

通过本文的步骤,您已经成功在 Ubuntu 20.04 上安装了 Python 3.12。现在,您可以开始使用新版本的 Python 进行开发。如果需要多个 Python 版本并行使用,您也可以方便地切换默认版本。希望这篇文章对您有帮助!

h1773655323的博客 2万+

【脑电分析系列】第7篇:频域分析基石 — 功率谱密度(PSD)的计算与常见方法对比

本文探讨了脑电图(EEG)频域分析的核心方法——功率谱密度(PSD)。通过对比基于快速傅里叶变换的周期图法和更稳健的Welch's方法,指出后者通过分段、加窗和平均处理,能有效降低估计方差,更适合分析非稳态的脑电信号。文章详细解析了关键参数设置对频率分辨率和统计稳定性的影响,并提供了Python计算实现。PSD分析将复杂的脑电信号转换为直观的频域特征,为研究认知功能和神经疾病提供重要依据。

qq_32516809的博客 1806

debian12 python3更新pip

在 Debian 12 中更新 Python3 的 pip 在这篇文章中,我将向你展示如何在 Debian 12 系统中更新 Python3 的 pip。pip 是 Python 的包管理工具,能够让你方便地安装和管理 Python 项目所需的依赖包。对于一名初学者而言,掌握如何更新 pip 是非常重要的,因为这能够确保你...

weixin_32306175的博客 587

10.2 全栈 CRUD 工程结构搭建:Cursor 4 步初始化 + 3 层目录规范

揭示 Cursor 工程初始化中 4 个关键动作如何将 AI 上下文感知能力从 30% 提升至 85%,包括用 pnpm create 显式声明结构契约、通过 monorepo.config.json 设定 workspace 根以支持跨包类型引用、在 shared 包中固化共享类型与协议,以及后续

weixin_42545292的博客 69

SAP FICO应付票据平台开发说明书(包括测试样例、程序代码仅作参考,不保证一定可以运行)

SAP FICO应付票据平台开发说明书(包括测试样例、程序代码仅作参考,不保证一定可以运行)

我好像病了的博客 379

掌握Python字典的12个例子

作者|Soner Yıldırım 编译|VK 来源|Towards Data Science 数据结构是任何编程语言的关键部分。为了创建健壮且性能良好的产品,必须非常了解数据结构。 在这篇文章中,我们将研究Python编程语言的一个重要数据结构,即字典。 字典是键值对的无序集合。每个项都有一个键和值。字典可以看作是一个有特殊索引的列表。 键必须是唯一的和不可变的。我们可以使用字符串、数字(int或float)或元组作为键。值可以是任何类型。 考虑一个我们需要存储学生成绩的案例。我们可以把它们存储在字典或

TensorFlowNews 2587

基于 FastAPI + LangGraph + LLM 大语言模型的通用 Agent 多智能体系统架构设计与开发实战、产业应用

FastAPI是一个现代、快速(高性能)的Python Web框架,专门用于构建API。它由Sebastián Ramírez(@tiangolo)创建,基于Starlette(用于Web部分)和Pydantic(用于数据部分)构建。性能优先:FastAPI是当前最快的Python Web框架之一,性能与NodeJS和Go相当。这得益于其基于Starlette的异步架构,能够充分利用Python 3.6+的async/await特性。开发效率。

AI天才研究院 232

Python 3.12 到底更新了啥?

2023年10月2日,Python 最新的稳定版本 3.12 正式发布。这个新版本带来了一系列的新功能,让大多数Python 开发者感到兴奋。

JP.Zhang 2958

深度学习工具包 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&#39;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(&#39;DeepLearnToolbox&#39;));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(&#39;state&#39;,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&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,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 = &#39;sigm&#39;;%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, &#39;Too big error&#39;);```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(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;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)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;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, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% 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&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 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, &#39;Too big error&#39;);```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(&#39;state&#39;,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, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,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, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,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, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % 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, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % 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, &#39;Too big error&#39;);%% 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(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % 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, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

visio安装包

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

Python3.9、Python3.10、Python3.11和Python3.12的发展历程和区别

Python的发展阶段的不同特点

chien__的博客 7535

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

必读!揭秘Python 3.12的功能更新

Python爱好者们,Python 3.12已于2023年10月2日发布,它带来了许多更新,提升了编程体验。已移除distutils—可以尝试转向setuptools或其他现代化的打包工具。还要注意,asyncore和asynchat也已经移除。要获取详细的示例和所有改进的完整套件,请查阅Python文档或与每个功能相关的PEP。随着Python的发展,这些改进和新增功能将使我们的代码更加清晰、更安全、更高效。感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

qq_41314882的博客 1380

揭秘Python 3.12的功能更新

要获取详细的示例和所有改进的完整套件,请查阅Python文档或与每个功能相关的PEP。随着Python的发展,这些改进和新增功能将使我们的代码更加清晰、更安全、更高效。大家好,Python 3.12已于2023年10月2日发布,它带来了许多更新,提升了编程体验,让我们通过一些实际示例来了解主要的更新内容。引入了与Python的C API交互的新方法,以实现更高级的扩展开发。新的通用类型和别名语法可通过静态类型检查程序使代码更清晰。模块得到了显著改进,非常适合依赖异步编程的用户。需要注意的是,已移除。

csdn1561168266的博客 1257
上一篇: Python中的pandas入门
下一篇: 用例子来看看Python 3.12 到底更新了啥?
Python_P叔
博客等级 码龄3年 5454粉丝 827原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值