機器學習從Python 2遷移到Python 3,你需要注意的一些事……__Python

來源:互聯網
上載者:User


編譯 | AI科技大本營(rgznai100)

參與 | 林椿眄

編輯 | Donna


Python 已經成為機器學習及其他科學領域中的主流語言。它不但與多種深度學習架構相容,而且還包含優秀的工具包和依賴庫,方便我們對資料進行預先處理和可視化操作。


據最新訊息,到2019 年底,Numpy 等很多科學計算工具包都將停止支援Python 2版本,而 2018 年後 Numpy 的所有新功能版本也都將只支援 Python 3。


為了使初學者能夠輕鬆地從 Python 2 向 Python 3 實現遷移,我收集了一些 Python 3 的功能,希望對大家有所協助。


使用 pathlib 模組來更好地處理路徑


pathlib 是 Python 3預設的用於處理資料路徑的模組,它能夠協助我們避免使用大量的 os.path.joins語句:


from pathlib import Path
dataset = 'wiki_images'
datasets_root = Path('/path/to/datasets/')
train_path = datasets_root / dataset / 'train'
test_path = datasets_root / dataset / 'test'
for image_path in train_path.iterdir():
   with image_path.open() as f: # note, open is a method of Path object
       # do something with an image

向左滑動查看完整代碼


在Python2中,我們需要通過級聯字串的形成來實現路徑的拼接。而現在有了pathlib模組後,資料路徑處理將變得更加安全、準確,可讀性更強。


此外,pathlib.Path含有大量的方法,這樣Python的初學者將不再需要搜尋每個方法:


p.exists()
p.is_dir()
p.parts()
p.with_name('sibling.png') # only change the name, but keep the folder
p.with_suffix('.jpg') # only change the extension, but keep the folder and the name
p.chmod(mode)
p.rmdir()


使用pathlib還將大大節約你的時間。更多功能請查看:


官方文檔 - https://docs.python.org/3/library/pathlib.html

參考資訊 - https://pymotw.com/3/pathlib/


類型提示(Type hinting)成為Python3中的新成員


下面是在編譯器PyCharm 中,類型提示功能的一個樣本:


Python 不只是一門指令碼的語言,如今的資料流程還包括大量的邏輯步驟,每一步都包括不同的架構(有時也包括不同的邏輯)。


Python3中引入了類型提示工具包來處理複雜的大型項目,使機器可以更好地對代碼進行驗證。而在這之前,不同的模組需要使用自訂的方式,對文檔中的字串指定類型 (注意:PyCharm可以將舊的文檔字串轉換成新的類型提示)。


下面是一個簡單的程式碼範例,利用類型提示功能來處理不同類型的資料:


def repeat_each_entry(data):
   """ Each entry in the data is doubled
   <blah blah nobody reads the documentation till the end>
   """
   index = numpy.repeat(numpy.arange(len(data)), 2)
   return data[index]


上述代碼對多維的 numpy.array、astropy.Table 和 astropy.Column、bcolz、cupy、mxnet.ndarray 等操作同樣適用。


這段代碼還可用於 pandas.Series 操作,但是這種形式是錯誤的:


repeat_each_entry(pandas.Series(data=[0, 1, 2], index=[3, 4, 5])) # returns Series with Nones inside


這僅僅是一段兩行的代碼。所以,複雜系統的行為是非常難預測的,有時一個函數就可能導致整個系統的錯誤。因此,明確地瞭解哪些類型方法,並在這些類型方法未得到相應參數的時候發出錯誤提示,這對於大型系統的運作是很有協助的。


def repeat_each_entry(data: Union[numpy.ndarray, bcolz.carray]):


如果你有一個很棒的程式碼程式庫,諸如 MyPy這樣的類型提示工具將可能成為一個大型項目的整合流程中的一部分。不幸的是,類型提示功能還沒辦法強大到為 ndarrays/tensors 這種細粒度類型發出提示。或許,不久的將來我們就可以擁有這樣全面的的類型提示工具,這將成為資料科學領域需要的強大功能。


從類型提示(運行前)到類型檢查(運行時)


預設情況下,函數的注釋對於代碼的運行是沒有影響的,它只是幫你指出每段代碼所要做的工作。


在代碼運行階段,很多時候類型提示工具是不起作用的。這種情況你可以使用 enforce 等工具,強制性對代碼進行類型檢查,同時也可以協助你調試代碼。


@enforce.runtime_validation
def foo(text: str) -> None:
   print(text)
foo('Hi') # ok
foo(5)    # fails
@enforce.runtime_validation
def any2

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.