Python 有什么奇技淫巧?(附零基础入门学习资料)

看完之后直呼好家伙的Python奇技淫巧(一) 本文用作记录,在使用python过程中遇到的一些奇技淫巧,有些代码是本人所写,有些则是python内置函数,有些则取之互联网。在此记录,只为备份以及遗忘时方便查找。 本文将会持续更新,内容仅限记录一些常用好用却又永远记不住的代码或者模块。 控制台操作 控制台不闪退 os.system('pause') 获取控制台大小 rows, columns = os.popen('stty size', 'r').read().split() 输入输出控制 解决输入提示中文乱码问题 raw_inp 阅读详情

前言

谈到奇技淫巧,我认为这款神器当之无愧。


在程序开发过程中,代码的运行往往会和我们预期的结果有所差别。于是,我们需要清楚代码运行过程中到底发生了什么?代码哪些模块运行了,哪些模块没有运行?输出的局部变量是什么样的?很多时候,我们会想到选择使用成熟、常用的IDE使用断点和watches调试程序,或者更为基础的print函数、log打印出局部变量来查看是否符合我们预期的执行效果。但是这些方法都有一个共同的弱点–效率低且繁琐,本文就介绍一个堪称神器的Python调试工具PySnooper,能够大大减少调试过程中的工作量。

【----帮助Python学习,以下所有学习资料文末免费领!----】

装饰器

装饰器(Decorators)是Python里一个很重要的概念,它能够使得Python代码更加简洁,用一句话概括:装饰器是修改其他函数功能的函数。PySnooper的调用主要依靠装饰器的方式,所以,了解装饰器的基本概念和使用方法更有助于理解PySnooper的使用。在这里,我先简单介绍一下装饰器的使用,如果精力有限,了解装饰器的调用方式即可。

对于Python,一切都是对象,一个函数可以作为一个对象在不同模块之间进行传递,举个例子,

def one(func):
    print("now you are in function one.")
    func()

    
def two():
    print("now you are in function two")

    
one(two)

# 输出
>>> now you are in function one.
>>> now you are in function two.

其实这就是装饰器的核心所在,它们封装一个函数,可以用这样或那样的方式来修改它。换一种方式表达上述调用,可以用***@+函数名***来装饰一个函数。

def one(func):
    print("now you are in function one.")
    def warp():
        func()
    return warp


@one
def two():
    print("now you are in function two.")

    
two()

# 输出
>>> now you are in function one.
>>> now you are in function two.

此外,在调用装饰器时还可以给函数传入参数:

def one(func):
    print("now you are in function one.")
    def warp(*args):
        func(*args)
    return warp


@one
def two(x, y):
    print("now you are in function two.")
    print("x value is %d, y value is %d" % (x, y))

    
two(5, 6)

# 输出
>>> now you are in function one.
>>> now you are in function two.
>>> x value is 5, y value is 6

另外,装饰器本身也可以接收参数,

def three(text):
    def one(func):
        print("now you are in function one.")
        def warp(*args):
            func(*args)
        return warp
    print("input params is {}".format(text))
    return one


@three(text=5)
def two(x, y):
    print("now you are in function two.")
    print("x value is %d, y value is %d" % (x, y))

    
two(5, 6)

# 输出
>>> input params is 5
>>> now you are in function one.
>>> now you are in function two.
>>> x value is 5, y value is 6

上面讲述的就是Python装饰器的一些常用方法。

Pysnooper

调试程序对于大多数开发者来说是一项必不可少的工作,当我们想要知道代码是否按照预期的效果在执行时,我们会想到去输出一下局部变量与预期的进行比对。目前大多数采用的方法主要有以下几种:

  • Print函数
  • Log日志
  • IDE调试器

但是这些方法有着无法忽视的弱点:

  • 繁琐
  • 过度依赖工具

“PySnooper is a poor man’s debugger.”

有了PySnooper,上述问题都迎刃而解,因为PySnooper实在太简洁了,目前在github已经10k+star。

前面花了一段篇幅讲解装饰器其实就是为了PySnooper做铺垫,PySnooper的调用就是通过装饰器的方式进行使用,非常简洁。

PySnooper的调用方式就是通过***@pysnooper.snoop***的方式进行使用,该装饰器可以传入一些参数来实现一些目的,具体如下:

参数描述None输出日志到控制台filePath输出到日志文件,例如’log/file.log’prefix给调试的行加前缀,便于识别watch查看一些非局部变量表达式的值watch_explode展开值用以查看列表/字典的所有属性或项depth显示函数调用的函数的snoop行

*安装*

使用pip安装,

pip install pysnooper 

或者使用conda安装,

conda install -c conda-forge pysnooper

*使用*

先写一个简单的例子,

import numpy as np
import pysnooper


@pysnooper.snoop()
def one(number):
    mat = []
    while number:
        mat.append(np.random.normal(0, 1))
        number -= 1
    return mat


one(3)

# 输出

Starting var:.. number = 3
22:17:10.634566 call         6 def one(number):
22:17:10.634566 line         7     mat = []
New var:....... mat = []
22:17:10.634566 line         8     while number:
22:17:10.634566 line         9         mat.append(np.random.normal(0, 1))
Modified var:.. mat = [-0.4142847169210746]
22:17:10.634566 line        10         number -= 1
Modified var:.. number = 2
22:17:10.634566 line         8     while number:
22:17:10.634566 line         9         mat.append(np.random.normal(0, 1))
Modified var:.. mat = [-0.4142847169210746, -0.479901983375219]
22:17:10.634566 line        10         number -= 1
Modified var:.. number = 1
22:17:10.634566 line         8     while number:
22:17:10.634566 line         9         mat.append(np.random.normal(0, 1))
Modified var:.. mat = [-0.4142847169210746, -0.479901983375219, 1.0491540468063252]
22:17:10.634566 line        10         number -= 1
Modified var:.. number = 0
22:17:10.634566 line         8     while number:
22:17:10.634566 line        11     return mat
22:17:10.634566 return      11     return mat
Return value:.. [-0.4142847169210746, -0.479901983375219, 1.0491540468063252]

这是最简单的使用方法,从上述输出结果可以看出,PySnooper输出信息主要包括以下几个部分:

  • 局部变量值
  • 代码片段
  • 局部变量所在行号
  • 返回结果

也就是说,把我们日常DEBUG所需要的主要信息都输出出来了。

上述结果输出到控制台,还可以把日志输出到文件,

@pysnooper.snoop("debug.log")

在这里插入图片描述

在函数调用过程中,PySnooper还能够显示函数的层次关系,使得一目了然,

@pysnooper.snoop()
def two(x, y):
    z = x + y
    return z


@pysnooper.snoop()
def one(number):
    k = 0
    while number:
        k = two(k, number)
        number -= 1
    return number


one(3)

# 输出
Starting var:.. number = 3
22:26:08.185204 call        12 def one(number):
22:26:08.186202 line        13     k = 0
New var:....... k = 0
22:26:08.186202 line        14     while number:
22:26:08.186202 line        15         k = two(k, number)
    Starting var:.. x = 0
    Starting var:.. y = 3
    22:26:08.186202 call         6 def two(x, y):
    22:26:08.186202 line         7     z = x + y
    New var:....... z = 3
    22:26:08.186202 line         8     return z
    22:26:08.186202 return       8     return z
    Return value:.. 3
Modified var:.. k = 3
22:26:08.186202 line        16         number -= 1
Modified var:.. number = 2
22:26:08.186202 line        14     while number:
22:26:08.186202 line        15         k = two(k, number)
    Starting var:.. x = 3
    Starting var:.. y = 2
    22:26:08.186202 call         6 def two(x, y):
    22:26:08.186202 line         7     z = x + y
    New var:....... z = 5
    22:26:08.186202 line         8     return z
    22:26:08.186202 return       8     return z
    Return value:.. 5
Modified var:.. k = 5
22:26:08.186202 line        16         number -= 1
Modified var:.. number = 1
22:26:08.186202 line        14     while number:
22:26:08.186202 line        15         k = two(k, number)
    Starting var:.. x = 5
    Starting var:.. y = 1
    22:26:08.186202 call         6 def two(x, y):
    22:26:08.186202 line         7     z = x + y
    New var:....... z = 6
    22:26:08.186202 line         8     return z
    22:26:08.186202 return       8     return z
    Return value:.. 6
Modified var:.. k = 6
22:26:08.186202 line        16         number -= 1
Modified var:.. number = 0
22:26:08.186202 line        14     while number:
22:26:08.186202 line        17     return number
22:26:08.186202 return      17     return number
Return value:.. 0

从上述输出结果可以看出,函数one与函数two的输出缩进层次一目了然。

除了缩进之外,PySnooper还提供了参数***prefix***给debug信息添加前缀的方式便于识别,

@pysnooper.snoop(prefix="funcTwo ")
def two(x, y):
    z = x + y
    return z


@pysnooper.snoop(prefix="funcOne ")
def one(number):
    k = 0
    while number:
        k = two(k, number)
        number -= 1
    return number


one(3)

# 输出
funcOne Starting var:.. number = 3
funcOne 22:28:14.259212 call        12 def one(number):
funcOne 22:28:14.260211 line        13     k = 0
funcOne New var:....... k = 0
funcOne 22:28:14.260211 line        14     while number:
funcOne 22:28:14.260211 line        15         k = two(k, number)
funcTwo     Starting var:.. x = 0
funcTwo     Starting var:.. y = 3
funcTwo     22:28:14.260211 call         6 def two(x, y):
funcTwo     22:28:14.260211 line         7     z = x + y
funcTwo     New var:....... z = 3
funcTwo     22:28:14.260211 line         8     return z
funcTwo     22:28:14.260211 return       8     return z
funcTwo     Return value:.. 3
funcOne Modified var:.. k = 3
funcOne 22:28:14.260211 line        16         number -= 1
funcOne Modified var:.. number = 2
funcOne 22:28:14.260211 line        14     while number:
funcOne 22:28:14.260211 line        15         k = two(k, number)
funcTwo     Starting var:.. x = 3
funcTwo     Starting var:.. y = 2
funcTwo     22:28:14.260211 call         6 def two(x, y):
funcTwo     22:28:14.260211 line         7     z = x + y
funcTwo     New var:....... z = 5
funcTwo     22:28:14.260211 line         8     return z
funcTwo     22:28:14.260211 return       8     return z
funcTwo     Return value:.. 5
funcOne Modified var:.. k = 5
funcOne 22:28:14.260211 line        16         number -= 1
funcOne Modified var:.. number = 1
funcOne 22:28:14.260211 line        14     while number:
funcOne 22:28:14.260211 line        15         k = two(k, number)
funcTwo     Starting var:.. x = 5
funcTwo     Starting var:.. y = 1
funcTwo     22:28:14.260211 call         6 def two(x, y):
funcTwo     22:28:14.260211 line         7     z = x + y
funcTwo     New var:....... z = 6
funcTwo     22:28:14.260211 line         8     return z
funcTwo     22:28:14.260211 return       8     return z
funcTwo     Return value:.. 6
funcOne Modified var:.. k = 6
funcOne 22:28:14.260211 line        16         number -= 1
funcOne Modified var:.. number = 0
funcOne 22:28:14.260211 line        14     while number:
funcOne 22:28:14.260211 line        17     return number
funcOne 22:28:14.260211 return      17     return number
funcOne Return value:.. 0

参数***watch***可以用于查看一些非局部变量,例如,

class Test():
    t = 10


test = Test()


@pysnooper.snoop(watch=("test.t", "x"))

# 输出
Starting var:.. number = 3
Starting var:.. test.t = 10
Starting var:.. x = 10

参数 watch_explode 可以展开字典或者列表显示它的所有属性值,对比一下它和 watch 的区别,

#### watch_explode ####
d = {
    "one": 1,
    "two": 1
}


@pysnooper.snoop(watch_explode="d")

# 输出
Starting var:.. number = 3
Starting var:.. d = {'one': 1, 'two': 1}
Starting var:.. d['one'] = 1
Starting var:.. d['two'] = 1

#### watch ####
d = {
    "one": 1,
    "two": 1
}


@pysnooper.snoop(watch="d")

# 输出
Starting var:.. d = {'one': 1, 'two': 1}

可以看出 watch_explode能够展开字典的属性值。

另外还有参数 depth显示函数中调用函数的snoop行,默认值为1,参数值需要大于或等于1。

当然,本文介绍的只是冰山一角。

在庞大的Python知识体系中,还有很多「绝妙」的奇技淫巧能够极大的提高开发效率,提升代码质量和稳定性。

读者福利:知道你对Python感兴趣,便准备了这套python学习资料

对于0基础小白入门:

如果你是零基础小白,想快速入门Python是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习等习教程。带你从零基础系统性的学好Python!

零基础Python学习资源介绍

① Python所有方向的学习路线图,清楚各个方向要学什么东西

② 600多节Python课程视频,涵盖必备基础、爬虫和数据分析

③ 100多个Python实战案例,含50个超大型项目详解,学习不再是只会理论

④ 20款主流手游迫解 爬虫手游逆行迫解教程包

⑤ 爬虫与反爬虫攻防教程包,含15个大型网站迫解

⑥ 爬虫APP逆向实战教程包,含45项绝密技术详解

⑦ 超300本Python电子好书,从入门到高阶应有尽有

⑧ 华为出品独家Python漫画教程,手机也能学习

⑨ 历年互联网企业Python面试真题,复习时非常方便

👉Python学习路线汇总👈

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

👉Python必备开发工具👈

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python学习视频600合集👈

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

👉实战案例👈

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

👉100道Python练习题👈

检查学习结果。

👉面试刷题👈

在这里插入图片描述

在这里插入图片描述

资料领取

上述这份完整版的Python全套学习资料已经上传优快云官方,朋友们如果需要可以微信扫描下方优快云官方认证二维码 即可领取↓↓↓

在这里插入图片描述

好文推荐

了解python的前景:https://blog.youkuaiyun.com/SpringJavaMyBatis/article/details/127194835

了解python的兼职副业:https://blog.youkuaiyun.com/SpringJavaMyBatis/article/details/127196603

Python入门十讲 本文希望用10次讲解,对Python做一个全面而深刻的梳理。 阅读详情

相关推荐

中国1986-2024年30米分辨率年最大NDVI数据集:条带修复技术与植被动态监测

本文介绍了中国1986-2024年30米分辨率年最大NDVI数据集的构建,重点阐述了针对Landsat 7 SLC-off故障等问题的条带修复技术。通过应用GapFill等核心算法,该数据集有效修复了数据缺失,为长时间序列的植被动态监测、生态变迁分析和极端气候事件评估提供了高质量、连续可靠的数据基础。

weixin_29200485的博客 168

Python的知识碎片与奇技淫巧

本文长期更新,收录一些不太常见(其实就是我不太会)的语法,一些语法糖以及简洁优雅的代码片段,酌情食用,小心高血糖。相关参考资料: Python黑魔法手册 文章目录知识碎片#1 Numpy中的省略号索引 - Ellipsis常量#2 Numpy中新增的点乘运算符:`@`奇技淫巧列表合成字典ASCII字符表列表中出现频率最高的元素列表作为字典值的无判断扩充合并输出列表内容获取词语的汉语拼音匿名函数中非返回语句走火入魔一个为内置类型添加方法的装饰器函数的单参数化函数的curry化模仿C++输出模仿命令行管道模

我心素已闲,清川澹如此 380

Argoverse轨迹预测实战:从数据加载到地图API应用全解析

本文详细解析了Argoverse数据集在轨迹预测中的应用,从数据加载到地图API的实战技巧全涵盖。通过具体代码示例展示如何高效处理轨迹数据、实现可视化及基础预测模型,帮助开发者快速掌握自动驾驶轨迹预测的核心技术。特别介绍了Argoverse地图API的深度应用和性能优化经验。

weixin_29182481的博客 241

《Python 黑科技》代理ip奇技淫巧(2)

很多人看西红柿的博客,不知道从何学起,为了广大人民群众的根本利益,我写了一个阅读指引,按照这个指引进行学习,多加练习,假以时日,势必能够……当频繁使用同一个固定IP访问目标网站的时候,很容易因为IP暴露而被目标网站封死,一旦固定IP被封死,也就无法访问目标网站了。但对于新手朋友来说,就比较棘手了。不消得西红柿说,相信大家都知道ip有动态和静态之分,它们的定义是不同的,动态IP地址和静态IP地址是对应的。你可以浏览器你访问这个api链接,会发现你拿到了ip和端口,每一次调用api,也会返回不同的代理ip。

2401_83641533的博客 762

基于EtherCAT的AM402与SV660N、IS620N伺服运动控制实战指南

本文详细介绍了基于EtherCAT总线的汇川AM402 PLC与SV660N、IS620N伺服驱动器构建运动控制系统的完整实战流程。内容涵盖硬件平台搭建、软件组态、关键参数设置、InoProShop编程及调试技巧,旨在帮助工程师快速掌握这一高精度、高响应的工业自动化解决方案。

weixin_29204205的博客 401

Open3D 实现CSF布料模拟算法【2025最新版】

CSF布料模拟算法在open3d模块下的实现,博客长期更新,本文最近更新时间为:2025年1月16日。。

点云侠的博客 5746

程序员有什么厉害的奇技淫巧?

每天早上,他的电脑会自动给咖啡机下单,然后用语音提醒:“尊敬的主人,您的咖啡已泡好,请享用。更牛的程序员,还能根据消费记录分析自己的“剁手”习惯,甚至设置消费警告,比如每月外卖花费超过 1000 元,脚本直接给你推送一条“吃土警告”。注意,不是“技术技巧”,而是“奇技淫巧”。技术技巧大家天天学,写代码、查 Bug、做项目,不提了,老韩今天想聊点不一样的,聊点能让人拍大腿、惊呼“还能这么玩”的东西。总结一下,程序员的奇技淫巧,不仅体现在写代码上,更体现在如何用代码改变生活,用思维优化工作,用心理稳住自己。

m0_61562916的博客 548

【ArcGIS Pro微课1000例】0065:制作千层饼多图层叠加效果

右键dem图层,点击符号系统,在右侧的符号系统窗口中,选择拉伸,勾选【显示名称】和【显示全部】,选择高程色带7。由于数据具有高程源,因此可以将数据进行三维显示。右键地面→添加高程源图层。打开ArcGIS PRo,新建一个局部场景,命名为千层饼。设置了高程源数据之后,千层饼一下子就变成了三维形状。数据默认都是在一个平面上,以默认的符号系统显示。到此为止,每个图层均为平面的千层饼已经做好了。将TIN图层的高程偏移设置为-1000。最后将等高线的高程设为2000.移除工程默认加载的图层。默认即可,不需要做修改。

智慧空间实验室 1156

Python 有什么奇技淫巧?

知乎上有一个问题:Python 有什么奇技淫巧?其中有各种不按套路出牌的招数,也不乏一些惊为天人的"奇技淫巧",会让你大呼:居然还有这种操作??? 本文就是对日常使用过的或者觉得很精妙的"奇技淫巧"的归纳总结。 Python版问号表达式 x=1 y=2 print('no','yes')[x==y] no 这里巧妙地利用了Python会把Fals...

a315612852的博客 123

C语言中errno与perror()函数

宏errno和perror()函数都是在stdlib.h中定义的。 1 stdlib.h头文件 stdlib.h头文件即standard library标准库函数头文件,包含了C、C++语言的最常用的系统函数,该文件中还包含了C语言标准库函数的定义。 2 errno宏 errno宏在stdlib.h中的定义为 #define errno (*_errno()) errno宏用于保存程...

hou09tian的博客 1万+

如何用DeepSeek写年底工作总结?——从入门到精通的全流程指南

AI助手DeepSeek如何高效撰写工作总结 摘要:本文介绍如何利用DeepSeek智能AI助手高效完成工作总结写作。工作总结具有结构固定、语言规范、内容数据化三大特性,而DeepSeek的结构化生成、风格适配、数据整合和迭代优化四大核心能力与之完美匹配。文章提出"准备-搭架-填充-优化"四步工作法:1)精准输入岗位、时间范围等核心信息;2)先搭建逻辑清晰的提纲框架;3)分模块填充具体内容,突出数据与案例;4)通过风格润色和细节补充进行优化。通过合理运用多模态材料处理能力,DeepSee

通俗易懂学IT 288

2024年Python奇技淫巧你知道多少?(1),面试官都被搞懵了

Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

2401_84138890的博客 1219

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

Python奇技淫巧

本文用作记录,在使用python过程中遇到的一些奇技淫巧,有些代码是本人所写,有些则是python内置函数,有些则取之互联网。在此记录,只为备份以及遗忘时方便查找。 本文将会持续更新,内容仅限记录一些常用好用却又永远记不住的代码或者模块。 控制台操作 控制台不闪退 os.system('pause') 获取控制台大小 rows, columns = os.popen('stty size',...

web开发与Python 1130

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

python可以做那些事_Python那些事——python的奇技淫巧!

随着近几年人工智能的流行,从而引发了一个编程语言的兴起,我想说到这,大家应该都明白了这是什么吧,没错它就是大名鼎鼎的——Python对于python,我给大家总结了以下几点:Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。Python 是一种...

weixin_39527078的博客 133

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【Python】哄女朋友的那些奇技淫巧

Hi~新朋友,记得点蓝字关注狗哥哟Python里面的奇技淫巧声明“以下所有模块均可使用pip直接安装”说python是所有编程语言里面最奇葩的语言这肯定是没错了它可以做自...

tongtongjing1765的博客 3771

最新Python奇技淫巧你知道多少?(2),2024年最新美团研发岗位面试算法题

不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~给大家准备的学习资料包括但不限于:Python 环境、pycharm编辑器/永久激活/翻译插件python 零基础视频教程Python 界面开发实战教程Python 爬虫实战教程Python 数据分析实战教程python 游戏开发实战教程Python 电子书100本。

2401_84141293的博客 600

从入门到精通,收下这 22 个 Python 学习网站_python学习网站(2)

不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~给大家准备的学习资料包括但不限于:Python 环境、pycharm编辑器/永久激活/翻译插件python 零基础视频教程Python 界面开发实战教程Python 爬虫实战教程Python 数据分析实战教程python 游戏开发实战教程Python 电子书100本。

m0_61331407的博客 1721

零基础入门机器学习,千万别再看这些了!

​​​​很多朋友在入门的时候有一个误区: 一开始就过多地深入细节。导致最后一团乱麻地「从入门到放弃」了。

puppyapple的博客 563

《Python 黑科技》代理ip奇技淫巧

当频繁使用同一个固定IP访问目标网站的时候,很容易因为IP暴露而被目标网站封死,一旦固定IP被封死,也就无法访问目标网站了。你可以浏览器你访问这个api链接,会发现你拿到了ip和端口,每一次调用api,也会返回不同的代理ip。:浏览器设置代理ip,终究上不得台面,接下来我要讲的是重点: 代码设置代理ip。步骤四:打开百度/谷歌搜索引擎,搜索:IP,查看当前代理后的IP地址。注意:这个ip是代理服务的ip,最终访问浏览器的ip,也不是这个。到此,你拿到了代理ip的api链接,记得复制保存,等下要用。

2401_83641360的博客 690

02_python奇技淫巧

本文用作记录,在使用python过程中遇到的一些奇技淫巧,有些代码是本人所写,有些则是python内置函数,有些则取之互联网。在此记录,只为备份以及遗忘时方便查找。本文将会继续更新,内容仅限记录一些常用好用却又永远记不住的代码或者模块。more。

零基础 Openresty 高性能网站开发 184

零基础零经验自学Python,到精通Python要多久啊?

只有新手才会纠结于“精通”。因为上一个说自己“精通”的人,已经被喷成筛子了…… 编程本来就是一个循序渐进的过程,不可能一口吃成胖子,与其纠结精通,不如踏踏实实地把知识从头到尾学一遍。 话不多说,先上一张 Python 知识图谱,直观的了解一下 Python 的基本构成与实际应用。 Python的主要应用领域有数据分析、网站开发、机器学习等,可以想好自己将来要深耕哪个方向,如果都比较感兴趣的话,每个方向也都可以深入。 大家就按照知识图谱从基础到进阶一步步学习,学习资料在好不在于多。 一、入门阶段 1.Pyt

九章算法的博客 421

Python IDE之 pycharm的十大奇技淫巧

说到Python的IDE,可能大家都会想到一个非常有名的工具,就是pycharm,他是最受欢迎的一个Python开发工具,其原因就是因为功能强大,适合构建大型项目,当然啦,功能强大同时也就意味着操作复杂,如果能掌握一些奇技淫巧的话,那就会达到一个事半功倍的效果。 0 无法找到python解析器及安装需要的包 首先从解析器入手,这个东西在初学者阶段很容易遇到问题,就是说没有解析器,那这种情况怎么办呢? 我在安装pycharm之前安装了anaconda,因为anaconda对于科学计算方面是十分方便的,在

码农黑羽的博客 3148

关于python那些事_Python那些事——python的奇技淫巧!

随着近几年人工智能的流行,从而引发了一个编程语言的兴起,我想说到这,大家应该都明白了这是什么吧,没错它就是大名鼎鼎的——Python对于python,我给大家总结了以下几点:Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。Python 是一种...

weixin_39952800的博客 137

Python 奇技淫巧

本文用作记录,在使用python过程中遇到的一些奇技淫巧,有些代码是本人所写,有些则是python内置函数,有些则取之互联网,在此记录,只为备份以及遗忘时方便查找。 本文将会持续更新,内容仅限记录一些常用好用却又永远记不住的代码或者模块。 控制台操作 控制台不闪退: os.system('pause') 获取控制台大小: rows, columns = os.popen('stty siz...

Alex 1218
上一篇: 专业技术书太难看懂?古人高效读书的方法 ???
下一篇: 你真的不能再穷下去了,这个在家就能做的副业越早知道越好!
黑客老许
博客等级 码龄8年 6153粉丝 1028原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值