踩過的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來分鐘。且頁面自帶記憶卡片,複雜概念簡單化。

偶然在網上發現了夜曲編程這個軟體。試著跟著學了一下,先是學習的免費課程。第一次學習的時候,這個教程驚艷了我。首先,夜曲編程的教程都是圖文形式的教程,互動式的教學方法讓學習的效率有了很大的提高。夜曲編程出自百詞斬旗下,它通過卡片的形式將一些編程的知識點放入其中,一定程度上可以增進編程的學習效果。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/286155.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-22 16:07
下一篇 2024-12-22 16:07

相關推薦

  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智慧、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • 蝴蝶優化演算法Python版

    蝴蝶優化演算法是一種基於仿生學的優化演算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化演算法Python版…

    編程 2025-04-29

發表回復

登錄後才能評論