什么是Keras?
什么是Keras
Keras是一個用Python編寫的開源神經(jīng)網(wǎng)絡(luò)庫,運行在Theano或Tensorflow之上。它采用模塊化設(shè)計,速度快,易于使用。由Google工程師Fran?oisChollet開發(fā)。
Keras不處理低級計算。相反,它使用另一個庫來執(zhí)行它,稱為"后端。因此Keras是低級API的高級API包裝器,能夠在TensorFlow,CNTK或Theano之上運行。
Keras高級API處理我們制作模型,定義圖層或設(shè)置多個輸入輸出模型的方式。在這個級別,Keras還使用損失和優(yōu)化函數(shù)編譯我們的模型,使用擬合函數(shù)訓(xùn)練過程。Keras不處理低級API,例如圖層,張量或其他變量的底層操作,因為它已由"Backend"引擎處理。
Backend是Keras中的一個術(shù)語,它可以在其他庫(如Tensorflow或Theano)的幫助下執(zhí)行所有低級計算,如張量積,卷積和許多其他事物。因此,"Backend引擎"將執(zhí)行模型的計算和開發(fā)。Tensorflow是默認的"Backend引擎",但可以在配置中更改它。
Theano是一個開源項目,由加拿大魁北克省蒙特利爾大學(xué)的MILA小組開發(fā)。這是第一個廣泛使用的框架。它是一個Python庫,可以幫助使用Numpy或Scipy進行數(shù)學(xué)運算的多維數(shù)組。Theano可以使用GPU進行更快的計算,它還可以自動構(gòu)建用于計算梯度的符號圖。在其網(wǎng)站上,Theano聲稱它可以識別數(shù)值不穩(wěn)定的表達式并使用更穩(wěn)定的算法計算它們,這對靈活的表達式非常有用。
Tensorflow是深度學(xué)習(xí)框架中的后起之秀。由Google的Brain團隊開發(fā),它是最受歡迎的深度學(xué)習(xí)工具。具有許多功能,研究人員有助于為深度學(xué)習(xí)目的開發(fā)此框架。
Keras的另一個引擎是Microsoft Cognitive Toolkit或CNTK。它是由Microsoft團隊開發(fā)的開源深度學(xué)習(xí)框架。它可以在多GPU或多機上運行,??用于大規(guī)模培訓(xùn)深度學(xué)習(xí)模型。在某些情況下,據(jù)報道CNTK比其他框架如Tensorflow或Theano更快。
快速部署,易于理解
Keras可以非常快速地建立網(wǎng)絡(luò)模型。如果你想用幾行制作一個簡單的網(wǎng)絡(luò)模型,Keras可以幫助你。
1. from keras.models import Sequential
2. from keras.layers import Dense, Activation
3.
4. model = Sequential()
5. model.add(Dense(64, activation='relu', input_dim=50)) #input shape of 50
6. model.add(Dense(28, activation='relu')) #input shape of 50
7. model.add(Dense(10, activation='softmax'))
基于調(diào)用方便的API,這個調(diào)用過程可以容易理解。
大型社區(qū)支持
有很多AI社區(qū)使用Keras進行深度學(xué)習(xí)框架,并向公眾發(fā)布他們的代碼以及教程。
有多個后端
您可以選擇Tensorflow,CNTK和Theano作為Keras的后端。您可以根據(jù)需要為不同的項目選擇不同的后端。每個后端都有自己獨特的優(yōu)勢。
跨平臺且易于模型部署
通過各種支持的設(shè)備和平臺,您可以在任何設(shè)備上部署Keras
· iOS與CoreML
· Android版采用Tensorflow Android,
· 支持.js的Web瀏覽器
· 云引擎
跨平臺且易于模型部署
多GPU支持
您可以在單個GPU上訓(xùn)練Keras或一次使用多個GPU。因為Keras內(nèi)置了對數(shù)據(jù)并行性的支持,因此它可以處理大量數(shù)據(jù)并加快培訓(xùn)所需的時間。
要使用Tensorflow作為后端引擎啟用Keras,需要先安裝Tensorflow。運行此命令以使用CPU安裝tensorflow(無GPU)
pip install --upgrade tensorflow
如果要為tensorflow啟用GPU支持,可以使用此命令
pip install --upgrade tensorflow-gpu
進入Python以查看tensorflow的安裝是否成功
$ python Python 3.6.4 (default, Mar 20 2018, 11:10:20) [GCC 5.4.0 20160609] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import tensorflow >>>
如果沒有錯誤消息,則安裝過程成功
安裝Tensorflow之后,開始安裝keras。在終端中鍵入此命令
pip install keras
它將開始安裝Keras以及它的所有依賴項。你應(yīng)該看到這樣的東西:
標志著已經(jīng)在系統(tǒng)中安裝了Keras!
在開始使用Keras之前,應(yīng)該檢查Keras是否配置使用Tensorflow作為后端:
cat ~ / .keras / keras.json
你應(yīng)該看到如下:
{ "floatx": "float32", "epsilon": 1e-07, "backend": "tensorflow", "image_data_format": "channels_last" }
如你所見,"后端"使用tensorflow。
這意味著keras使用Tensorflow作為后端
現(xiàn)在通過鍵入在終端上運行它
user@user:~$ python3 Python 3.6.4 (default, Mar 20 2018, 11:10:20) [GCC 5.4.0 20160609] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import keras Using TensorFlow backend. >>>
如何在Windows上安裝Keras
在安裝Tensorflow和Keras之前,應(yīng)該安裝Python,pip和virtualenv。如果您已經(jīng)安裝了這些庫,則應(yīng)繼續(xù)執(zhí)行下一步,否則請執(zhí)行以下操作:
百度搜索下載安裝Python 3。
直接瀏覽器訪問下載。
然后運行命令:
python get-pip.py
安裝pip
使用此命令安裝virtualenv
pip3 install -U pip virtualenv
安裝Microsoft Visual C ++ 2015 Redistributable Update 3
· 轉(zhuǎn)到Visual Studio下載站點https://www.microsoft.com/en-us/download/details.aspx?id=53587
· 選擇Redistributables和Build Tools
· 下載并安裝Microsoft Visual C ++ 2015 Redistributable Update 3
然后運行此腳本
pip3 install virtualenv
設(shè)置虛擬環(huán)境
這用于將工作系統(tǒng)與主系統(tǒng)隔離。
virtualenv --system-site-packages -p python3 ./venv
激活環(huán)境
.\venv\Scripts\activate
環(huán)境安裝好后,Tensorflow和Keras的使用與Linux一致。
Tensorflow和Keras的使用與Linux一致
讓我們輕松的踏上Python AI之旅吧。
目錄
在前面幾篇博客中我們介紹了容器的使用(博客1、博客2、博客3、博客4、博客5),容器是一種系統(tǒng)級的隔離方案,更多的強調(diào)資源上的隔離。而這里我們要介紹的python的虛擬環(huán)境,更加強調(diào)的是依賴的管理。假如一個python項目需要依賴于numpy==1.20.1的版本,另一個python項目必須依賴于numpy==1.20.2的版本。雖然我們也可以直接使用docker或者其他的容器方案來隔離編程環(huán)境,但是這會消耗比較大的資源,因為我們并不需要重新構(gòu)造一整個系統(tǒng)。因此python也提供了一種更加優(yōu)雅的解決方案:使用virtualenv來構(gòu)造一個虛擬的python庫的環(huán)境,這里面我們可以定制化自己所需的python依賴的版本。比較詳細的virtualenv使用方法可以參考官方文檔,這里我們僅做一些簡單的使用方法的介紹和演示。
virtualenv可以直接通過pip來安裝和管理,這也大大簡化了我們的操作:
[dechin@dechin-manjaro virtualenv]$ python3 -m pip install virtualenv
Collecting virtualenv
Downloading virtualenv-20.4.3-py2.py3-none-any.whl (7.2 MB)
|████████████████████████████████| 7.2 MB 7.5 MB/s
Requirement already satisfied: appdirs<2,>=1.4.3 in /home/dechin/anaconda3/lib/python3.8/site-packages (from virtualenv) (1.4.4)
Collecting distlib<1,>=0.3.1
Downloading distlib-0.3.1-py2.py3-none-any.whl (335 kB)
|████████████████████████████████| 335 kB 8.5 MB/s
Requirement already satisfied: filelock<4,>=3.0.0 in /home/dechin/anaconda3/lib/python3.8/site-packages (from virtualenv) (3.0.12)
Requirement already satisfied: six<2,>=1.9.0 in /home/dechin/anaconda3/lib/python3.8/site-packages (from virtualenv) (1.15.0)
Installing collected packages: distlib, virtualenv
Successfully installed distlib-0.3.1 virtualenv-20.4.3
需要注意的是,這里雖然我們可以通過virtualenv來構(gòu)造一個純凈的python編程環(huán)境,但是python的版本是直接依賴于系統(tǒng)里面所包含的python版本的,我們不能通過virtualenv去構(gòu)造一個不同的python版本。
virtualenv的使用步驟基本上可以簡單劃分為:創(chuàng)建環(huán)境-激活環(huán)境-配置和使用環(huán)境-關(guān)閉環(huán)境,以下分別進行演示。
首先我們進入到一個空的目錄:
[dechin@dechin-manjaro virtualenv]$ ll
總用量 0
然后直接執(zhí)行virtualenv envname的命令來構(gòu)建一個虛擬環(huán)境,這里因為我們系統(tǒng)中只有一個python版本,多個python版本的環(huán)境需要使用-p選項來進行配置。
[dechin@dechin-manjaro virtualenv]$ virtualenv test_env
created virtual environment CPython3.8.5.final.0-64 in 295ms
creator CPython3Posix(dest=/home/dechin/projects/2021-python/virtualenv/test_env, clear=False, no_vcs_ignore=False, global=False)
seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/dechin/.local/share/virtualenv)
added seed packages: pip==21.0.1, setuptools==54.1.2, wheel==0.36.2
activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
執(zhí)行完成上述指令之后,我們發(fā)現(xiàn)在剛才的目錄下生成了一個與虛擬環(huán)境名稱一致的目錄名:
[dechin@dechin-manjaro virtualenv]$ ll
總用量 4
drwxr-xr-x 4 dechin dechin 4096 4月 1 21:06 test_env
這就代表虛擬環(huán)境已經(jīng)創(chuàng)建成功了。
在使用一個指定的虛擬環(huán)境時,我們需要先激活這個虛擬環(huán)境,在虛擬環(huán)境目錄下的bin目錄中,有一個名為activate的可執(zhí)行文件,就是用來激活虛擬環(huán)境的:
[dechin@dechin-manjaro virtualenv]$ source test_env/bin/activate
(test_env)[dechin@dechin-20n2s01200 virtualenv]$ python3 -m pip list
Package Version
---------- -------
pip 21.0.1
setuptools 54.1.2
wheel 0.36.2
我們可以發(fā)現(xiàn)一個特點,在激活虛擬環(huán)境后,在Linux的命令行之前都會帶有一個虛擬環(huán)境的名稱,用于區(qū)分當(dāng)前所在的虛擬環(huán)境。而這里虛擬環(huán)境中的python第三方庫是幾乎沒有的,是一個非常純凈的環(huán)境,需要我們自己去手動安裝與配置環(huán)境。
在虛擬環(huán)境中的操作跟在實際環(huán)境中的安裝操作是一致的,我們一樣也可以使用pip來進行安裝包的管理,只是這時候安裝所執(zhí)行的變更只會保存到當(dāng)前的虛擬環(huán)境下,不影響實際環(huán)境和其他的虛擬環(huán)境。
(test_env)[dechin@dechin-manjaro virtualenv]$ python3 -m pip install numpy
Collecting numpy
Downloading numpy-1.20.2-cp38-cp38-manylinux2010_x86_64.whl (15.4 MB)
|████████████████████████████████| 15.4 MB 295 kB/s
Installing collected packages: numpy
Successfully installed numpy-1.20.2
(test_env)[dechin@dechin-manjaro virtualenv]$ python3 -m pip list
Package Version
---------- -------
numpy 1.20.2
pip 21.0.1
setuptools 54.1.2
wheel 0.36.2
安裝完成后,我們看到當(dāng)前安裝的numpy版本號是1.20.2。讓我們再打開一個新的終端窗口看下實際環(huán)境中的numpy的版本號:
[dechin@dechin-manjaro virtualenv]$ python3 -m pip show numpy
Name: numpy
Version: 1.20.1
Summary: NumPy is the fundamental package for array computing with Python.
Home-page: https://www.numpy.org
Author: Travis E. Oliphant et al.
Author-email: None
License: BSD
Location: /home/dechin/anaconda3/lib/python3.8/site-packages
Requires:
Required-by: xarray, vaex-core, tifffile, tables, statsmodels, seaborn, scipy, scikit-learn, scikit-image, PyWavelets, pytools, pythreejs, pyscf, pyarrow, projectq, plotdigitizer, patsy, pandas, opencv-python, numexpr, numba, mkl-random, mkl-fft, matplotlib, ipyvolume, ipydatawidgets, imageio, hiq-projectq, h5py, cupy, bqplot, Bottleneck, bokeh, bkcharts, astropy, ts, hiqfermion
這里可以區(qū)分的是,實際環(huán)境中命令行的前面不帶有虛擬環(huán)境的名稱。我們可以看到實際環(huán)境下的numpy版本是1.20.1,這樣一來我們就用這么一個開銷并不是很高的方式,實現(xiàn)了兩個不同的numpy版本的共存。
在當(dāng)前的虛擬環(huán)境下,可以直接執(zhí)行deactivate退出。我們可以測試這樣的一個場景:先退出虛擬環(huán)境,然后再次進入,以確認剛才的操作被自動的保存到了虛擬環(huán)境中:
(test_env)[dechin@dechin-manjaro virtualenv]$ deactivate
[dechin@dechin-manjaro virtualenv]$ source test_env/bin/activate
(test_env)[dechin@dechin-manjaro virtualenv]$ python3 -m pip list
Package Version
---------- -------
numpy 1.20.2
pip 21.0.1
setuptools 54.1.2
wheel 0.36.2
(test_env)[dechin@dechin-manjaro virtualenv]$ deactivate
在上述的執(zhí)行結(jié)果中可以看到,對python環(huán)境的變更是永久保存下來了的。這一點上來說操作也比docker容器更加容易,在docker中如果需要持久化的保存一個操作,需要在對容器鏡像操作之后,執(zhí)行額外的commit指令才能保存。因此我們認為virtualenv是一個更加優(yōu)雅、更加輕量級的,python環(huán)境差異化管理的解決方案。
在前面幾篇博客中我們介紹過docker等容器的編程環(huán)境解決方案,但是容器作為一個系統(tǒng)級的隔離方案,其實更加強調(diào)的是用戶間的隔離,這一點也得益其對NameSpace技術(shù)的推廣和使用。但是在一部分的場景下,比如快速構(gòu)造一個純凈的python環(huán)境、輕量級的操作實現(xiàn)不同python包的共存,容器技術(shù)雖然也可以完成,但是功能顯得過于冗余,這就需要使用到本文所介紹的virtualenv這樣的一個python依賴管理解決方案。文中我們介紹了virtualenv的安裝與基本的使用方法,做了一遍比較完整的演示。
本文首發(fā)鏈接為:https://www.cnblogs.com/dechinphy/p/virtualenv.html
作者ID:DechinPhy
更多原著文章請參考:https://www.cnblogs.com/dechinphy/