您的位置:

踩过的python坑(Python难吗)

本文目录一览:

Python中的bug有多可怕?

明敏 发自 凹非寺

量子位 报道 | 公众号 QbitAI

到底是怎样的一个bug,能让95%的Pytorch库中招,就连特斯拉AI总监深受困扰?

还别说,这个bug虽小,但有够“狡猾”的。

这就是最近Reddit上热议的一个话题,是一位网友在使用再平常不过的Pytorch+Numpy组合时发现。

最主要的是,在代码能够跑通的情况下,它甚至还会影响模型的准确率!

除此之外,网友热议的另外一个点,竟然是:

而是它到底算不算一个bug?

这究竟是怎么一回事?

事情的起因是一位网友发现,在PyTorch中用NumPy来生成随机数时,受到数据预处理的限制,会多进程并行加载数据,但最后每个进程返回的随机数却是相同的。

他还举出例子证实了自己的说法。

如下是一个示例数据集,它会返回三个元素的随机向量。这里采用的批量大小分别为2,工作进程为4个。

然后神奇的事情发生了:每个进程返回的随机数都是一样的。

这个结果会着实让人有点一头雾水,就好像数学应用题求小明走一段路程需要花费多少时间,而你却算出来了负数。

发现了问题后,这位网友还在GitHub上下载了超过10万个PyTorch库,用同样的方法产生随机数。

结果更加令人震惊:居然有超过95%的库都受到这个问题的困扰!

这其中不乏PyTorch的官方教程和OpenAI的代码,连特斯拉AI总监Karpathy也承认自己“被坑过”!

但有一说一,这个bug想要解决也不难:只需要在每个epoch都重新设置seed,或者用python内置的随机数生成器就可以避免这个问题。

到底是不是bug?

如果这个问题已经可以解决,为什么还会引起如此大的讨论呢?

因为网友们的重点已经上升到了“哲学”层面:

这到底是不是一个bug?

在Reddit上有人认为:这不是一个bug。

虽然这个问题非常常见,但它并不算是一个bug,而是一个在调试时不可以忽略的点。

就是这个观点,激起了千层浪花,许多人都认为他忽略了问题的关键所在。

这不是产生伪随机数的问题,也不是numpy的问题,问题的核心是在于PyTorch中的DataLoader的实现

对于包含随机转换的数据加载pipeline,这意味着每个worker都将选择“相同”的转换。而现在NN中的许多数据加载pipeline,都使用某种类型的随机转换来进行数据增强,所以不重新初始化可能是一个预设。

另一位网友也表示这个bug其实是在预设程序下运行才出现的,应该向更多用户指出来。

并且95%以上的Pytorch库受此困扰,也绝不是危言耸听。

有人就分享出了自己此前的惨痛经历:

我认识到这一点是之前跑了许多进程来创建数据集时,然而发现其中一半的数据是重复的,之后花了很长的时间才发现哪里出了问题。

也有用户补充说,如果 95% 以上的用户使用时出现错误,那么代码就是错的。

顺便一提,这提供了Karpathy定律的另一个例子:即使你搞砸了一些非常基本代码,“neural nets want to work”。

你有踩过PyTorch的坑吗?

如上的bug并不是偶然,随着用PyTorch的人越来越多,被发现的bug也就越来越多,某乎上还有PyTorch的坑之总结,被浏览量高达49w。

其中从向量、函数到model.train(),无论是真bug还是自己出了bug,大家的血泪史还真的是各有千秋。

所以,关于PyTorch你可以分享的经验血泪史吗?

欢迎评论区留言讨论~

参考链接:

[1]

[2]

[3]

— 完 —

windows环境的python踩坑记

虽然使用python有不少时间了,但是基本没有在windows环境下使用,这不就踩了不少坑,特此记录如下:

安装完成后,发现没有python命令,这个是环境变量的问题,添加就可以了。但是也找不到pip 命令,而进入python里面,可以import pip 模块。这时候,需要用 “python -m ensurepip ” 来生成pip命令了,生成之后添加到环境变量就可以直接使用了, 默认情况下pip的路径: Python_install_path\scripts\pip.exe , 在较新的python版本里面,已经默认会生成pip 命令,也就是说不需要上述步骤就有pip 命令可以使用了.需要注意的是:

如果遇到执行pip.exe 时候报错: Fatal error in launcher: Unable to create process using '"' , 那么可以尝试用: python FULL/PATH/OF/PIP/COMMAND 来替带直接运行 pip, 貌似是无法找到合适的解释器来运行pip造成的.

如果发现系统中已经安装了python,但是缺少需要的module, 需要自己安装,可是不是管理员权限,没办法安装,python 提供了解决办法,方法如下:

A.

使用python -m site 命令,该命令会输出python的sys.path变量的值,以及其他的变量,见如下内容,其中我们可以看到有两个变量:USER_BASE, USER_SITE. 我们可以把需要的module 安装到USER_SITE下.

如果不存在相应的路径,那么我们可以创建.

B.

有了上述的路径后,我们在安装3rd module 的时候,就可以指定安装路径了:

pip install MODULE_FILE.PY --target=ABOVE\USER_SITE\PATH

上述方式安装之后,只有当前用户可以使用这些新装的module, 其他用户是不可以的.

其实这个不能算windows平台的坑了,一般不能import 都是缺少依赖的问题。 那么我们可以返回pip 命令,首先要知道这个module 的路径,通过路径中其他的信息确认这个module所属的package.

Python程序代码混淆、编译、打包、运行(桌面程序防破解向)

像Python这种解释性的语言,要想私有化部署的同时又保护好源码,就像是对于鱼和熊掌的追求。

虽然做不到尽善尽美,但是对代码进行混淆,增加一点破解的难度,或许能规避一些泄露的风险。

本次演示环境:linux

确保要发布的包根目录("demo")中有__main__.py文件,这个是程序执行入口。

编译

批量改名.pyc文件

移动.pyc文件

清理.py文件

清理__pycache__文件夹

打包成zip

运行时只要将zip文件作为参数即可

最终整合脚本

调用方式

对于在变量和函数名上的混淆有点小儿科,而对于跨文件的类名的混淆又太容易实现。

所以对于混淆程度的取舍,要视工程的规模而定。

2.1 混淆工具pyminifier

在原来的工具 pyminifier上修复了几个bug。

安装:

python3 安装

或者clone下来,自行安装

使用例子

2.2 源码变更

不同的配置对于源码的要求不同,以下是笔者踩过的坑。

其他混淆想法

结合混淆、编译和打包,尝试出以下发布脚本。

主要的思路 :创建一个工作目录tmp,然后在此目录下混淆、编译python代码,完成后把内容打包成pyc文件,再将pyc文件和其他配置文件移动到dist,发布dist即可。

混淆的目的是最大程度保护源码,在发布到客户端后不被轻易破解。

python培训哪个靠谱?

靠谱的python培训机构推荐选择【达内教育】,该机构推出“因材施教、分级培优”创新教学模式,同一课程方向,面向不同受众群体,提供就业、培优、才高三个级别教学课程,达内“因材施教、分级培优“差异化教学模式,让每一位来达内学习的学员都能找到适合自己的课程。

【达内教育】采用因材施教,会根据学生的基础和具体的情况安排不同的课程,不同级别的课程。对于专业,目前可以学习的都是现在互联网的热门技术。从企业需求出发开设热门课程方向,已经开设JAVA互联网架构、Java大数据、C++、WEB前端等各大课程。为高端IT企业提供全面的人才服务,并为全行业提供高级应用型人才。真正的因材施教,顾忌每个人的学习需求满足每个人的学习需求,保障最后都能按照自己的步伐学有所成。感兴趣的话点击此处,免费学习一下

想了解更多有关python教育机构的相关信息,推荐咨询【达内教育】。该机构是引领行业的职业教育公司,致力于面向IT互联网行业培养人才,达内大型T专场招聘会每年定期举行,为学员搭建快捷高效的双选绿色通道,在提升学员的面试能力、积累面试经验同时也帮助不同技术方向的达内学员快速就业。达内IT培训机构,试听名额限时抢购。

Selenium 之 Mac 环境下 Python 安装 selenium 踩坑记录

作为一个Python初级菜鸟 ,以下是我Mac 环境下使用Python 安装selenium 的踩坑记录。

研究了一圈发现pip 安装 是不需要在Python环境下输入。

用pip安装时都要在cmd命令行里启动的,而在python中无法运行。

退出python运行环境就再执行pip可以了。

然后cmd 直接输入 pip install selenium

遇到了第二个问题..

2 . cmd 内直接输入 pip install selenium 报错: pip command not found

经百度得知 :pip是python的包管理工具,在Python的安装包中,easy_install.py是默认安装的,而pip需要我们手动安装。

输入 sudo easy_install pip 安装。

安装完之后 再输入 pip install selenium

遇到了第三个问题..

大概就是说需要升级Python2,但其实我已经安装过了Python3。

然后又百度了一下,才知道是我需要安装Python3 环境下的pip 包..

Python2 下的pip安装:

打开终端: sudo easy_install pip

Python3 下的pip安装:

打开终端: curl

安装完后,查看版本

pip --version

环境都准备好了,可以安装selenium 了。输入 pip install selenium

夜曲编程的python坑

不坑。

夜曲编程就初学者入门而言是很不错的,主要有几个优势:课程设计:总体设计由浅入深,学习路径清晰,容易坚持。采用的是卡片模式,每日学习一课,只需花费20来分钟。且页面自带记忆卡片,复杂概念简单化。

偶然在网上发现了夜曲编程这个软件。试着跟着学了一下,先是学习的免费课程。第一次学习的时候,这个教程惊艳了我。首先,夜曲编程的教程都是图文形式的教程,交互式的教学方法让学习的效率有了很大的提高。夜曲编程出自百词斩旗下,它通过卡片的形式将一些编程的知识点放入其中,一定程度上可以增进编程的学习效果。