Argparse 教程

2021-03-02 AI精神小夥

這篇教程旨在作為 argparse 的入門介紹,此模塊是 Python 標準庫中推薦的命令行解析模塊。

註解

 

還有另外兩個模塊可以完成同樣的任務,稱為 getopt (對應於 C 語言中的 getopt() 函數) 和被棄用的 optparse。還要注意 argparse 是基於 optparse 的,因此用法與其非常相似。

概念

讓我們利用 ls 命令來展示我們將要在這篇入門教程中探索的功能:

$ ls
cpython devguide prog.py pypy rm-unused-function.patch
$ ls pypy
ctypes_configure demo dotviewer include lib_pypy lib-python ...
$ ls -l
total 20
drwxr-xr-x 19 wena wena 4096 Feb 18 18:51 cpython
drwxr-xr-x 4 wena wena 4096 Feb 8 12:04 devguide
-rwxr-xr-x 1 wena wena 535 Feb 19 00:05 prog.py
drwxr-xr-x 14 wena wena 4096 Feb 7 00:59 pypy
-rw-r--r-- 1 wena wena 741 Feb 18 01:01 rm-unused-function.patch
$ ls --help
Usage: ls [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.
...

我們可以從這四個命令中學到幾個概念:

ls 是一個即使在運行的時候沒有提供任何選項,也非常有用的命令。在默認情況下他會輸出當前文件夾包含的文件和文件夾。

如果我們想要使用比它默認提供的更多功能,我們需要告訴該命令更多信息。在這個例子裡,我們想要查看一個不同的目錄,pypy。我們所做的是指定所謂的位置參數。之所以這樣命名,是因為程序應該如何處理該參數值,完全取決於它在命令行出現的位置。更能體現這個概念的命令如 cp,它最基本的用法是 cp SRC DEST。第一個位置參數指的是*你想要複製的*,第二個位置參數指的是*你想要複製到的位置*。

現在假設我們想要改變這個程序的行為。在我們的例子中,我們不僅僅只是輸出每個文件的文件名,還輸出了更多信息。在這個例子中,-l 被稱為可選參數。

這是一段幫助文檔的文字。它是非常有用的,因為當你遇到一個你從未使用過的程序時,你可以通過閱讀它的幫助文檔來弄清楚它是如何運行的。

基礎

讓我們從一個簡單到(幾乎)什麼也做不了的例子開始:

import argparse
parser = argparse.ArgumentParser()
parser.parse_args()

以下是該代碼的運行結果:

$ python3 prog.py
$ python3 prog.py --help
usage: prog.py [-h]

optional arguments:
-h, --help show this help message and exit
$ python3 prog.py --verbose
usage: prog.py [-h]
prog.py: error: unrecognized arguments: --verbose
$ python3 prog.py foo
usage: prog.py [-h]
prog.py: error: unrecognized arguments: foo

程序運行情況如下:

在沒有任何選項的情況下運行腳本不會在標準輸出顯示任何內容。這沒有什麼用處。

第二行代碼開始展現出 argparse 模塊的作用。我們幾乎什麼也沒有做,但已經得到一條很好的幫助信息。

--help 選項,也可縮寫為 -h,是唯一一個可以直接使用的選項(即不需要指定該選項的內容)。指定任何內容都會導致錯誤。即便如此,我們也能直接得到一條有用的用法信息。

位置參數介紹

舉個例子:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("echo")
args = parser.parse_args()
print(args.echo)

運行此程序:

$ python3 prog.py
usage: prog.py [-h] echo
prog.py: error: the following arguments are required: echo
$ python3 prog.py --help
usage: prog.py [-h] echo

positional arguments:
echo

optional arguments:
-h, --help show this help message and exit
$ python3 prog.py foo
foo

程序運行情況如下:

我們增加了 add_argument() 方法,該方法用於指定程序能夠接受哪些命令行選項。在這個例子中,我將選項命名為 echo,與其功能一致。

現在調用我們的程序必須要指定一個選項。

The parse_args() method actually returns some data from the options specified, in this case, echo.

這一變量是 argparse 免費施放的某種 「魔法」(即是說,不需要指定哪個變量是存儲哪個值的)。你也可以注意到,這一名稱與傳遞給方法的字符串參數一致,都是 echo。

然而請注意,儘管顯示的幫助看起來清楚完整,但它可以比現在更有幫助。比如我們可以知道 echo 是一個位置參數,但我們除了靠猜或者看原始碼,沒法知道它是用來幹什麼的。所以,我們可以把它改造得更有用:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("echo", help="echo the string you use here")
args = parser.parse_args()
print(args.echo)

然後我們得到:

$ python3 prog.py -h
usage: prog.py [-h] echo

positional arguments:
echo echo the string you use here

optional arguments:
-h, --help show this help message and exit

現在,來做一些更有用的事情:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", help="display a square of a given number")
args = parser.parse_args()
print(args.square**2)

以下是該代碼的運行結果:

$ python3 prog.py 4
Traceback (most recent call last):
File "prog.py", line 5, in <module>
print(args.square**2)
TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int'

進展不太順利。那是因為 argparse 會把我們傳遞給它的選項視作為字符串,除非我們告訴它別這樣。所以,讓我們來告訴 argparse 來把這一輸入視為整數:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", help="display a square of a given number",
type=int)
args = parser.parse_args()
print(args.square**2)

以下是該代碼的運行結果:

$ python3 prog.py 4
16
$ python3 prog.py four
usage: prog.py [-h] square
prog.py: error: argument square: invalid int value: 'four'

做得不錯。當這個程序在收到錯誤的無效的輸入時,它甚至能在執行計算之前先退出,還能顯示很有幫助的錯誤信息。

可選參數介紹

到目前為止,我們一直在研究位置參數。讓我們看看如何添加可選的:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--verbosity", help="increase output verbosity")
args = parser.parse_args()
if args.verbosity:
print("verbosity turned on")

和輸出:

$ python3 prog.py --verbosity 1
verbosity turned on
$ python3 prog.py
$ python3 prog.py --help
usage: prog.py [-h] [--verbosity VERBOSITY]

optional arguments:
-h, --help show this help message and exit
--verbosity VERBOSITY
increase output verbosity
$ python3 prog.py --verbosity
usage: prog.py [-h] [--verbosity VERBOSITY]
prog.py: error: argument --verbosity: expected one argument

程序運行情況如下:

這一程序被設計為當指定 --verbosity 選項時顯示某些東西,否則不顯示。

不添加這一選項時程序沒有提示任何錯誤而退出,表明這一選項確實是可選的。注意,如果一個可選參數沒有被使用時,相關變量被賦值為 None,在此例中是 args.verbosity,這也就是為什麼它在 if 語句中被當作邏輯假。

幫助信息有點不同。

使用 --verbosity 選項時,必須指定一個值,但可以是任何值。

上述例子接受任何整數值作為 --verbosity 的參數,但對於我們的簡單程序而言,只有兩個值有實際意義:True 或者 False。讓我們據此修改代碼:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--verbose", help="increase output verbosity",
action="store_true")
args = parser.parse_args()
if args.verbose:
print("verbosity turned on")

和輸出:

$ python3 prog.py --verbose
verbosity turned on
$ python3 prog.py --verbose 1
usage: prog.py [-h] [--verbose]
prog.py: error: unrecognized arguments: 1
$ python3 prog.py --help
usage: prog.py [-h] [--verbose]

optional arguments:
-h, --help show this help message and exit
--verbose increase output verbosity

程序運行情況如下:

短選項

如果你熟悉命令行的用法,你會發現我還沒講到這一選項的短版本。這也很簡單:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-v", "--verbose", help="increase output verbosity",
action="store_true")
args = parser.parse_args()
if args.verbose:
print("verbosity turned on")

效果就像這樣:

$ python3 prog.py -v
verbosity turned on
$ python3 prog.py --help
usage: prog.py [-h] [-v]

optional arguments:
-h, --help show this help message and exit
-v, --verbose increase output verbosity

可以注意到,這一新的能力也反映在幫助文本裡。

結合位置參數和可選參數

我們的程序變得越來越複雜了:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", type=int,
help="display a square of a given number")
parser.add_argument("-v", "--verbose", action="store_true",
help="increase output verbosity")
args = parser.parse_args()
answer = args.square**2
if args.verbose:
print("the square of {} equals {}".format(args.square, answer))
else:
print(answer)

接著是輸出:

$ python3 prog.py
usage: prog.py [-h] [-v] square
prog.py: error: the following arguments are required: square
$ python3 prog.py 4
16
$ python3 prog.py 4 --verbose
the square of 4 equals 16
$ python3 prog.py --verbose 4
the square of 4 equals 16

我們帶回了一個位置參數,結果發生了報錯。

注意順序無關緊要。

給我們的程序加上接受多個冗長度的值,然後實際來用用:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", type=int,
help="display a square of a given number")
parser.add_argument("-v", "--verbosity", type=int,
help="increase output verbosity")
args = parser.parse_args()
answer = args.square**2
if args.verbosity == 2:
print("the square of {} equals {}".format(args.square, answer))
elif args.verbosity == 1:
print("{}^2 == {}".format(args.square, answer))
else:
print(answer)

和輸出:

$ python3 prog.py 4
16
$ python3 prog.py 4 -v
usage: prog.py [-h] [-v VERBOSITY] square
prog.py: error: argument -v/--verbosity: expected one argument
$ python3 prog.py 4 -v 1
4^2 == 16
$ python3 prog.py 4 -v 2
the square of 4 equals 16
$ python3 prog.py 4 -v 3
16

除了最後一個,看上去都不錯。最後一個暴露了我們的程序中有一個 bug。我們可以通過限制 --verbosity 選項可以接受的值來修復它:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", type=int,
help="display a square of a given number")
parser.add_argument("-v", "--verbosity", type=int, choices=[0, 1, 2],
help="increase output verbosity")
args = parser.parse_args()
answer = args.square**2
if args.verbosity == 2:
print("the square of {} equals {}".format(args.square, answer))
elif args.verbosity == 1:
print("{}^2 == {}".format(args.square, answer))
else:
print(answer)

和輸出:

$ python3 prog.py 4 -v 3
usage: prog.py [-h] [-v {0,1,2}] square
prog.py: error: argument -v/--verbosity: invalid choice: 3 (choose from 0, 1, 2)
$ python3 prog.py 4 -h
usage: prog.py [-h] [-v {0,1,2}] square

positional arguments:
square display a square of a given number

optional arguments:
-h, --help show this help message and exit
-v {0,1,2}, --verbosity {0,1,2}
increase output verbosity

注意這一改變同時反應在錯誤信息和幫助信息裡。

現在,讓我們使用另一種的方式來改變冗長度。這種方式更常見,也和 CPython 的可執行文件處理它自己的冗長度參數的方式一致(參考 python --help 的輸出):

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", type=int,
help="display the square of a given number")
parser.add_argument("-v", "--verbosity", action="count",
help="increase output verbosity")
args = parser.parse_args()
answer = args.square**2
if args.verbosity == 2:
print("the square of {} equals {}".format(args.square, answer))
elif args.verbosity == 1:
print("{}^2 == {}".format(args.square, answer))
else:
print(answer)

我們引入了另一種動作 count,來數某一個可選參數出現了幾次:

$ python3 prog.py 4
16
$ python3 prog.py 4 -v
4^2 == 16
$ python3 prog.py 4 -vv
the square of 4 equals 16
$ python3 prog.py 4 --verbosity --verbosity
the square of 4 equals 16
$ python3 prog.py 4 -v 1
usage: prog.py [-h] [-v] square
prog.py: error: unrecognized arguments: 1
$ python3 prog.py 4 -h
usage: prog.py [-h] [-v] square

positional arguments:
square display a square of a given number

optional arguments:
-h, --help show this help message and exit
-v, --verbosity increase output verbosity
$ python3 prog.py 4 -vvv
16

是的,它現在比前一版本更像是一個標誌(和 action="store_true" 相似)。這能解釋它為什麼報錯。

它也表現得與 「store_true」 的行為相似。

這給出了一個關於 count 動作的效果的演示。你之前很可能應該已經看過這種用法。

如果你不添加 -v 標誌,這一標誌的值會是 None。

如期望的那樣,添加該標誌的長形態能夠獲得相同的輸出。

可惜的是,對於我們的腳本獲得的新能力,我們的幫助輸出並沒有提供很多信息,但我們總是可以通過改善文檔來修復這一問題(比如通過 help 關鍵字參數)。

最後一個輸出暴露了我們程序中的一個 bug。

讓我們修復一下:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", type=int,
help="display a square of a given number")
parser.add_argument("-v", "--verbosity", action="count",
help="increase output verbosity")
args = parser.parse_args()
answer = args.square**2

# bugfix: replace == with >=
if args.verbosity >= 2:
print("the square of {} equals {}".format(args.square, answer))
elif args.verbosity >= 1:
print("{}^2 == {}".format(args.square, answer))
else:
print(answer)

這是它給我們的輸出:

$ python3 prog.py 4 -vvv
the square of 4 equals 16
$ python3 prog.py 4 -vvvv
the square of 4 equals 16
$ python3 prog.py 4
Traceback (most recent call last):
File "prog.py", line 11, in <module>
if args.verbosity >= 2:
TypeError: '>=' not supported between instances of 'NoneType' and 'int'

讓我們修復那個 bug:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", type=int,
help="display a square of a given number")
parser.add_argument("-v", "--verbosity", action="count", default=0,
help="increase output verbosity")
args = parser.parse_args()
answer = args.square**2
if args.verbosity >= 2:
print("the square of {} equals {}".format(args.square, answer))
elif args.verbosity >= 1:
print("{}^2 == {}".format(args.square, answer))
else:
print(answer)

我們剛剛引入了又一個新的關鍵字 default。我們把它設置為 0 來讓它可以與其他整數值相互比較。記住,默認情況下如果一個可選參數沒有被指定,它的值會是 None,並且它不能和整數值相比較(所以產生了 TypeError 異常)。

然後:

$ python3 prog.py 4
16

憑藉我們目前已學的東西你就可以做到許多事情,而我們還僅僅學了一些皮毛而已。 argparse 模塊是非常強大的,在結束篇教程之前我們將再探索更多一些內容。

進行一些小小的改進

如果我們想擴展我們的簡短程序來執行其他冪次的運算,而不僅是乘方:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("x", type=int, help="the base")
parser.add_argument("y", type=int, help="the exponent")
parser.add_argument("-v", "--verbosity", action="count", default=0)
args = parser.parse_args()
answer = args.x**args.y
if args.verbosity >= 2:
print("{} to the power {} equals {}".format(args.x, args.y, answer))
elif args.verbosity >= 1:
print("{}^{} == {}".format(args.x, args.y, answer))
else:
print(answer)

輸出:

$ python3 prog.py
usage: prog.py [-h] [-v] x y
prog.py: error: the following arguments are required: x, y
$ python3 prog.py -h
usage: prog.py [-h] [-v] x y

positional arguments:
x the base
y the exponent

optional arguments:
-h, --help show this help message and exit
-v, --verbosity
$ python3 prog.py 4 2 -v
4^2 == 16

請注意到目前為止我們一直在使用詳細級別來 更改 所顯示的文本。以下示例則使用詳細級別來顯示 更多的 文本:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("x", type=int, help="the base")
parser.add_argument("y", type=int, help="the exponent")
parser.add_argument("-v", "--verbosity", action="count", default=0)
args = parser.parse_args()
answer = args.x**args.y
if args.verbosity >= 2:
print("Running '{}'".format(__file__))
if args.verbosity >= 1:
print("{}^{} == ".format(args.x, args.y), end="")
print(answer)

輸出:

$ python3 prog.py 4 2
16
$ python3 prog.py 4 2 -v
4^2 == 16
$ python3 prog.py 4 2 -vv
Running 'prog.py'
4^2 == 16

矛盾的選項

到目前為止,我們一直在使用 argparse.ArgumentParser 實例的兩個方法。讓我們再介紹第三個方法 add_mutually_exclusive_group()。它允許我們指定彼此相互衝突的選項。讓我們再更改程序的其餘部分以便使用新功能更有意義:我們將引入 --quiet 選項,它將與 --verbose 正好相反:

import argparse

parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group()
group.add_argument("-v", "--verbose", action="store_true")
group.add_argument("-q", "--quiet", action="store_true")
parser.add_argument("x", type=int, help="the base")
parser.add_argument("y", type=int, help="the exponent")
args = parser.parse_args()
answer = args.x**args.y

if args.quiet:
print(answer)
elif args.verbose:
print("{} to the power {} equals {}".format(args.x, args.y, answer))
else:
print("{}^{} == {}".format(args.x, args.y, answer))

我們的程序現在變得更簡潔了,我們出於演示需要略去了一些功能。無論如何,輸出是這樣的:

$ python3 prog.py 4 2
4^2 == 16
$ python3 prog.py 4 2 -q
16
$ python3 prog.py 4 2 -v
4 to the power 2 equals 16
$ python3 prog.py 4 2 -vq
usage: prog.py [-h] [-v | -q] x y
prog.py: error: argument -q/--quiet: not allowed with argument -v/--verbose
$ python3 prog.py 4 2 -v --quiet
usage: prog.py [-h] [-v | -q] x y
prog.py: error: argument -q/--quiet: not allowed with argument -v/--verbose

這應該很容易理解。我添加了末尾的輸出這樣你就可以看到其所達到的靈活性,即混合使用長和短兩種形式的選項。

在我們收尾之前,你也許希望告訴你的用戶這個程序的主要目標,以免他們還不清楚:

import argparse

parser = argparse.ArgumentParser(description="calculate X to the power of Y")
group = parser.add_mutually_exclusive_group()
group.add_argument("-v", "--verbose", action="store_true")
group.add_argument("-q", "--quiet", action="store_true")
parser.add_argument("x", type=int, help="the base")
parser.add_argument("y", type=int, help="the exponent")
args = parser.parse_args()
answer = args.x**args.y

if args.quiet:
print(answer)
elif args.verbose:
print("{} to the power {} equals {}".format(args.x, args.y, answer))
else:
print("{}^{} == {}".format(args.x, args.y, answer))

請注意用法文本中有細微的差異。注意 [-v | -q],它的意思是說我們可以使用 -v 或 -q,但不能同時使用兩者:

$ python3 prog.py --help
usage: prog.py [-h] [-v | -q] x y

calculate X to the power of Y

positional arguments:
x the base
y the exponent

optional arguments:
-h, --help show this help message and exit
-v, --verbose
-q, --quiet

後記

除了這裡顯示的內容,argparse 模塊還提供了更多功能。它的文檔相當詳細和完整,包含大量示例。完成這個教程之後,你應該能毫不困難地閱讀該文檔。

相關焦點

  • python之Argparse模塊
    程序定義它需要的參數,然後 argparse 將弄清如何從 sys.argv 解析出那些參數。argparse 模塊還會自動生成幫助和使用手冊,並在用戶給程序傳入無效參數時報出錯誤信息。argparse簡單使用流程主要有三個步驟:創建 ArgumentParser() 對象調用 add_argument() 方法添加參數使用 parse_args() 解析添加的參數創建解析器對象parser = argparse.ArgumentParser()一般這樣即可,全部可選參數如下。
  • Python 命令行之旅:深入 argparse(二)
    劇照 | 《仙劍奇俠傳》前言在上一篇「深入 argparse (一)」的文章中,我們深入了解了 argparse 的包括參數動作和參數類別在內的基本功能,具備了編寫一個簡單命令行程序的能力。本文將繼續深入了解 argparse 的進階玩法,一窺探其全貌,助力我們擁有實現複雜命令行程序的能力。
  • Python 命令行參數解析庫argparse
    >print(zone,input_source_dir,output_source_dir,features,levels)參數有zone,input_source_dir,output_source_dir,feature,levels,但是該函數print不能在命令行運行,只能在腳本內部調用,於是我們需要python標準庫內的argparse
  • 如何使用argparse模塊批量修改文件後綴
    如何使用argparse模塊批量修改文件後綴?今天番茄加速就來分享argparse模塊的主要用法。導入模塊import argparseimport os定義腳本參數def get_parser():parser = argparse.ArgumentParser(description='工作目錄中文件後綴名修改')parser.add_argument('work_dir', metavar
  • 輕鬆編寫命令行接口,argparse模塊你值得擁有!
    $ python main.py arg1 arg2Python中的argparse模塊能解決這個問題。argparse 模塊可以讓人輕鬆編寫用戶友好的命令行接口。程序定義它需要的參數,然後argparse將弄清如何從sys.argv解析出那些參數。argparse模塊還會自動生成幫助和使用手冊,並在用戶給程序傳入無效參數時報出錯誤信息。
  • 【python】命令行參數argparse用法詳解
    作者 yarving連結 https://www.jianshu.com/p/fef2d215b91d小編:今天開始寫比賽的代碼,為了寫的更加正規一些,這次就用了argparse。第一個例子中,-v沒有指定任何參數也可,其實存的是True和False,如果出現,則其值為True,否則為False默認的參數類型為str,如果要進行數學計算,需要對參數進行解析後進行類型轉換,如果不能轉換則需要報錯,這樣比較麻煩argparse
  • python argparse 源碼閱讀
    Profile a library moduleoptparse對比getopt:option使用比較直觀,可以使用 options.outfile 獲取參數值 (注3)官方的文檔中介紹optparse難以擴展,已經被廢棄,推薦使用基於它的argparse
  • 6個精選Python教程&我的初戀故事.
    在這之前,先給大家6個教程;我粗略算了一下,目前累計有150000人學習過這6個教程;一來因為這6個教程都是免費開放,公開學習;二來因為這都是基礎教程,條理清楚易懂,大家容易學下去。(點擊下面藍色字體進入教程)。Python 圖片轉字符畫。你將學習到 Linux 命令行操作,Python 基礎,pillow 庫的使用,argparse 庫的使用。
  • 教程 | 如何在Python中快速進行語料庫搜索:近似最近鄰算法
    A plain text file with the same format as above'''import annoyimport lmdbimport osimport sysimport argparsefrom vector_utils import get_vectors
  • 史上最全 OpenCV 活體檢測教程!
    雷鋒網本教程將教授你如何使用 OpenCV 進行活性檢測。通過學習,你將能夠在人臉識別系統中創建一個可以發現偽造人臉並執行反人臉欺騙的活體檢測器。基於 OpenCV 的活體檢測在本教程的第一部分,我們將對活體檢測進行討論,包括「活體檢測是什麼?」以及「為什麼我們需要活體檢測來改進人臉識別系統?」
  • 愷明大神 Mask R-CNN 超實用教程
    在本教程的第一部分中,我們將討論圖像分類、對象檢測、實例分割和語義分割之間的區別。 這裡,我們將簡要回顧Mask R-CNN架構及其與Faster R-CNN的關係。然後,我將向您展示如何在圖像和視頻流上應用Mask R-CNN與OpenCV。圖1:圖像分類(左上),目標檢測(右上),語義分割(左下),實例分割(右下)。在本教程中,我們將使用Mask R-CNN執行實例分割。
  • 愷明大神 Mask R-CNN 超實用教程
    在本教程的第一部分中,我們將討論圖像分類、對象檢測、實例分割和語義分割之間的區別。 這裡,我們將簡要回顧Mask R-CNN架構及其與Faster R-CNN的關係。然後,我將向您展示如何在圖像和視頻流上應用Mask R-CNN與OpenCV。開始吧!
  • OpenCV+深度學習預訓練模型,簡單搞定圖像識別 | 教程
    pyimagesearch網站今天發布了一份用OpenCV+深度學習預訓練模型做圖像識別的教程,量子位編譯整理如下:最近,OpenCV 3.3剛剛正式發布,對深度學習(dnn模塊)提供了更好的支持,dnn模塊目前支持Caffe、TensorFlow、Torch、PyTorch等深度學習框架。
  • 大數據下基於Tensorflow框架的深度學習示例教程
    本文就以大數據作為場景,通過自底向上的教程詳述在大數據架構體系中如何應用深度學習這一技術。大數據架構中採用的是hadoop系統以及Kerberos安全認證,深度學習採用的是分布式的Tensorflow架構,hadoop解決了大數據的存儲問題,而分布式Tensorflow解決了大數據訓練的問題。