摘要:今天百度開源深度學(xué)習(xí)平臺(tái)。百度一直說(shuō)自己深耕深度學(xué)習(xí),其技術(shù)水平如何,本次開源或可提供一些線索。深度學(xué)習(xí)平臺(tái)實(shí)際上變化得非??斓鹊?,都是過(guò)去個(gè)月間出現(xiàn)的??偟膩?lái)說(shuō),是百度使用了多年的深度學(xué)習(xí)平臺(tái),并且已經(jīng)做出了一些實(shí)際的產(chǎn)品,較為成熟。
今天百度開源深度學(xué)習(xí)平臺(tái)Paddle。業(yè)內(nèi)人士紛紛點(diǎn)贊:Paddle代碼簡(jiǎn)潔、設(shè)計(jì)干凈,沒(méi)有太多的abstraction,速度比Tensorflow、Theano快,顯存占用小,可多機(jī)多卡并行,支持CPU和GPU、文檔比較全……Hacker News有評(píng)論,在不支持TensorFlow的中國(guó),百度的Paddle或有機(jī)會(huì)獲勝。百度一直說(shuō)自己深耕深度學(xué)習(xí),其技術(shù)水平如何,本次開源或可提供一些線索。
百度深度學(xué)習(xí) PaddlePaddle (Parallel Distributed Deep Learning)是一個(gè)云端托管的分布式深度學(xué)習(xí)平臺(tái),對(duì)于序列輸入、稀疏輸入和大規(guī)模數(shù)據(jù)的模型訓(xùn)練有著良好的支持,支持GPU運(yùn)算,支持?jǐn)?shù)據(jù)并行和模型并行,僅需少量代碼就能訓(xùn)練深度學(xué)習(xí)模型,大大降低了用戶使用深度學(xué)習(xí)技術(shù)的成本。
根據(jù)百度官方網(wǎng)站的介紹,Paddle 有以下優(yōu)勢(shì):
Github 上介紹,PaddlePaddle有以下特點(diǎn):
靈活
PaddlePaddle支持大量的神經(jīng)網(wǎng)絡(luò)架構(gòu)和優(yōu)化算法。很容易安裝復(fù)雜的模型,比如擁有注意力(attention)機(jī)制或者復(fù)雜記憶連接的神經(jīng)機(jī)器翻譯模型。
高效
為了利用異構(gòu)計(jì)算資源的能力,PaddlePaddle中的每一級(jí)都會(huì)進(jìn)行優(yōu)化,其中包括計(jì)算、內(nèi)存、架構(gòu)和通信。以下 是幾個(gè)例子:
通過(guò)SSE/AVX 內(nèi)聯(lián)函數(shù)、BLAS數(shù)據(jù)庫(kù)(例如MKL,ATLAS,cuBLAS)或者定制化的CPU/GPU 核優(yōu)化數(shù)字。
高度優(yōu)化的遞歸網(wǎng)絡(luò),在沒(méi)有padding 的情況下,也能處理不同長(zhǎng)度的序列。
對(duì)擁有高維稀疏數(shù)據(jù)的模型進(jìn)行局部?jī)?yōu)化和分布式訓(xùn)練。
可擴(kuò)展
有了PaddlePaddle,使用多個(gè)CPU和GPU以及機(jī)器來(lái)加速訓(xùn)練可以變得很輕松。 PaddlePaddle 能通過(guò)優(yōu)化通信,獲得高吞吐量和性能。
與產(chǎn)品的連接
PaddlePaddle的部署也很簡(jiǎn)單。在百度,PaddlePaddle 已經(jīng)被用于產(chǎn)品和服務(wù)中,擁有大量用戶。應(yīng)用場(chǎng)景包括廣告點(diǎn)擊率(CTR)預(yù)測(cè)、大規(guī)模圖像分類、光學(xué)字符識(shí)別、搜索排名、計(jì)算機(jī)病毒檢測(cè)、推薦等等。PaddlePaddle 在百度有著巨大的影響。
PaddlePaddle地址:Github:https://github.com/baidu/paddle 官方:http://www.paddlepaddle.org/doc_cn/(中文)
評(píng)價(jià) :賈揚(yáng)清在知乎上的技術(shù)點(diǎn)評(píng)
Facebook 深度學(xué)習(xí)研究員賈揚(yáng)清在知乎上評(píng)價(jià)說(shuō):今天剛看到的,簡(jiǎn)單說(shuō)一些第一印象(以目前的github repo為準(zhǔn))。整體的設(shè)計(jì)感覺(jué)和Caffe心有靈犀,同時(shí)解決了Caffe早期設(shè)計(jì)當(dāng)中的一些問(wèn)題(比如說(shuō)default stream)。
1. 很高質(zhì)量的GPU代碼
2. 非常好的RNN設(shè)計(jì)
3. 設(shè)計(jì)很干凈,沒(méi)有太多的abstraction,這一點(diǎn)比TensorFlow好很多。
4. 高速RDMA的部分貌似沒(méi)有開源(可能是因?yàn)镽DMA對(duì)于cluster design有一定要求):Paddle/RDMANetwork.h at master · baidu/Paddle · GitHub
5. 設(shè)計(jì)思路比較像第一代的DL框架,不過(guò)考慮到paddle已經(jīng)有年頭了,這樣設(shè)計(jì)還是有歷史原因的。
5.1 config是hard-code的protobuf message,這對(duì)擴(kuò)展性可能會(huì)有影響。
5.2 可以看到很多有意思的類似歷史遺留的設(shè)計(jì):采用了STREAM_DEFAULT macro,然后通過(guò)TLS的方式定向到非default stream:Paddle/hl_base.h at 4fe7d833cf0dd952bfa8af8d5d7772bbcd552c58 · baidu/Paddle · GitHub (所以Paddle off-the-shelf不支持mac?)
5.3 在梯度計(jì)算上采用了傳統(tǒng)的粗粒度f(wàn)orward/backward設(shè)計(jì)(類似Caffe)??赡苡腥藭?huì)說(shuō)“所以paddle沒(méi)有auto gradient generation”,這是不對(duì)的,autograd的存在與否和op的粒度粗細(xì)無(wú)關(guān)。事實(shí)上,TensorFlow在意識(shí)到細(xì)粒度operator超級(jí)慢的速度以后,也在逐漸轉(zhuǎn)回粗粒度的operator上。
目前只看到這里。總之是一個(gè)非常solid的框架,百度的開發(fā)功底還是不錯(cuò)的。
影響力評(píng)價(jià) :Hack News的評(píng)論
cs702: 又一個(gè)深度學(xué)習(xí)框架,這次來(lái)自百度。
鑒于TensorFlow在AI研究者和實(shí)踐者中的統(tǒng)治力逐漸增強(qiáng),加上擁有大量使用基礎(chǔ)的既有框架,比如Theano,Torch和Caffe,我并不認(rèn)為這一新的框架在美國(guó)或者其他西方的市場(chǎng)會(huì)獲得大范圍的采用。在我看來(lái),TensorFlow的勢(shì)力在當(dāng)下很難戰(zhàn)勝。
但是,Paddle在中國(guó)可能會(huì)獲得大范圍的采用,因?yàn)槟鞘前俣鹊哪竾?guó)市場(chǎng)。
Vonnik:使用TensorFlow的大部分都是來(lái)自Udacity 課程的學(xué)生。所以,“Tensor Flow崛起” 這這種說(shuō)法并不正確,這些人中95%都是沒(méi)用什么經(jīng)驗(yàn)的,更不用說(shuō)在實(shí)際產(chǎn)品中應(yīng)用了。從技術(shù)層面上來(lái)說(shuō),TensorFlow并沒(méi)有比其他的框架好很多。它有一個(gè)很漂亮的網(wǎng)站,有幾個(gè)教學(xué)視頻,但是它性能并不是很好,比如,在大型產(chǎn)品的環(huán)境中。深度學(xué)習(xí)平臺(tái)實(shí)際上變化得非??欤篢ensorFlow、CNTK、DSSTNE等等,都是過(guò)去10個(gè)月間出現(xiàn)的。所以說(shuō),Paddle 還是有機(jī)會(huì)的,尤其是在中國(guó),因?yàn)槟抢锏娜瞬荒苁褂霉雀柙啤鞘荰ensorFlow較佳的訓(xùn)練平臺(tái)。
HackerNews上,曾有一個(gè)關(guān)于更受歡迎的深度學(xué)習(xí)工具的投票,時(shí)間范圍是7月15日到8月15日,當(dāng)時(shí),TensorFlow獲得了第一。
總的來(lái)說(shuō), Paadle是百度使用了多年的深度學(xué)習(xí)平臺(tái),并且已經(jīng)做出了一些實(shí)際的產(chǎn)品,較為成熟。在性能和各項(xiàng)指標(biāo)上,比如:代碼簡(jiǎn)潔、設(shè)計(jì)很干凈,沒(méi)有太多的abstraction、 速度比tensorflow,theano快,顯存占用小、可多機(jī)多卡并行,支持cpu和gpu、文檔比較全等等,Paddle也獲得了較高的肯定,是一個(gè)不錯(cuò)的深度學(xué)習(xí)工具,在國(guó)內(nèi)有較大的應(yīng)用潛力。
附:PaddlePaddle快速入門教程 http://www.paddlepaddle.org/doc_cn/
我們以文本分類問(wèn)題作為背景,介紹PaddlePaddle使用流程和常用的網(wǎng)絡(luò)基礎(chǔ)單元的配置方法。
安裝(Install)
首先請(qǐng)參考安裝教程安裝PaddlePaddle。
使用概述(Overview)
文本分類問(wèn)題:對(duì)于給定的一條文本, 我們從提前給定的類別集合中選擇其所屬類 別。比如通過(guò)用戶對(duì)電子商務(wù)網(wǎng)站評(píng)論,評(píng)估產(chǎn)品的質(zhì)量:
這個(gè)顯示器很棒! (好評(píng))
用了兩個(gè)月之后這個(gè)顯示器屏幕碎了。(差評(píng))
每一個(gè)任務(wù)流程都可以分為如下5個(gè)基礎(chǔ)部分。
數(shù)據(jù)格式準(zhǔn)備
每行保存一條樣本,類別Id 和文本信息用Tab間隔, 文本中的單詞用空格分隔(如果不切詞,則字與字之間用空格分隔),例如:類別Id‘ ’ 這 個(gè) 顯 示 器 很 棒 !
數(shù)據(jù)向模型傳送
PaddlePaddle可以讀取Python寫的傳輸數(shù)據(jù)腳本,所有字符都將轉(zhuǎn)換為連續(xù)整數(shù)表示的Id傳給模型
網(wǎng)絡(luò)結(jié)構(gòu)(由易到難展示4種不同的網(wǎng)絡(luò)配置)
邏輯回歸模型
詞向量模型
卷積模型
時(shí)序模型
優(yōu)化算法
訓(xùn)練模型
預(yù)測(cè)
數(shù)據(jù)格式準(zhǔn)備(Data Preparation)
在本問(wèn)題中,我們使用Amazon電子產(chǎn)品評(píng)論數(shù)據(jù), 將評(píng)論分為好評(píng)(正樣本)和差評(píng)(負(fù)樣本)兩類。demo/quick_start里提供了數(shù)據(jù)下載腳本 和預(yù)處理腳本。
cd demo/quick_start
./data/get_data.sh
pip install -r requirements.txt
./preprocess.sh
數(shù)據(jù)向模型傳送(Transfer Data to Model)
Python數(shù)據(jù)加載腳本(Data Provider Script)
下面dataprovider_bow.py文件給出了完整例子,主要包括兩部分:
initalizer: 定義文本信息、類別Id的數(shù)據(jù)類型。
process: yield文本信息和類別Id,和initalizer里定義順序一致。
from paddle.trainer.PyDataProvider2 import *# id of the word not in dictionaryUNK_IDX = 0# initializer is called by the framework during initialization.# It allows the user to describe the data types and setup the# necessary data structure for later use.# `settings` is an object. initializer need to properly fill settings.input_types.# initializer can also store other data structures needed to be used at process().# In this example, dictionary is stored in settings.# `dictionay` and `kwargs` are arguments passed from trainer_config.lr.pydef initializer(settings, dictionary, **kwargs): ? ?# Put the word dictionary into settings
? ? settings.word_dict = dictionary ? ?# setting.input_types specifies what the data types the data provider
? ? # generates.
? ? settings.input_types = [ ? ? ? ?# The first input is a sparse_binary_vector,
? ? ? ? # which means each dimension of the vector is either 0 or 1. It is the
? ? ? ? # bag-of-words (BOW) representation of the texts.
? ? ? ? sparse_binary_vector(len(dictionary)), ? ? ? ?# The second input is an integer. It represents the category id of the
? ? ? ? # sample. 2 means there are two labels in the dataset.
? ? ? ? # (1 for positive and 0 for negative)
? ? ? ? integer_value(2)]# Delaring a data provider. It has an initializer "data_initialzer".# It will cache the generated data of the first pass in memory, so that# during later pass, no on-the-fly data generation will be needed.# `setting` is the same object used by initializer()# `file_name` is the name of a file listed train_list or test_list file given# to define_py_data_sources2(). See trainer_config.lr.py.@provider(init_hook=initializer, cache=CacheType.CACHE_PASS_IN_MEM)def process(settings, file_name): ? ?# Open the input data file.
? ? with open(file_name, "r") as f: ? ? ? ?# Read each line.
? ? ? ? for line in f: ? ? ? ? ? ?# Each line contains the label and text of the comment, separated by .
? ? ? ? ? ? label, comment = line.strip().split(" ") ? ? ? ? ? ?# Split the words into a list.
? ? ? ? ? ? words = comment.split() ? ? ? ? ? ?# convert the words into a list of ids by looking them up in word_dict.
? ? ? ? ? ? word_vector = [settings.word_dict.get(w, UNK_IDX) for w in words] ? ? ? ? ? ?# Return the features for the current comment. The first is a list
? ? ? ? ? ? # of ids representing a 0-1 binary sparse vector of the text,
? ? ? ? ? ? # the second is the integer id of the label.
? ? ? ? ? ? yield word_vector, int(label)
配置中的數(shù)據(jù)加載定義(Data Provider in Configure)
在模型配置中利用define_py_data_sources2加載數(shù)據(jù):
from paddle.trainer_config_helpers import *file = "data/dict.txt"word_dict = dict()with open(dict_file, "r") as f: ? ?for i, line in enumerate(f):
? ? ? ? w = line.strip().split()[0]
? ? ? ? word_dict[w] = i# define the data sources for the model.# We need to use different process for training and prediction.# For training, the input data includes both word IDs and labels.# For prediction, the input data only includs word Ids.define_py_data_sources2(train_list="data/train.list",
? ? ? ? ? ? ? ? ? ? ? ? test_list="data/test.list",
? ? ? ? ? ? ? ? ? ? ? ? module="dataprovider_bow",
? ? ? ? ? ? ? ? ? ? ? ? obj="process",
? ? ? ? ? ? ? ? ? ? ? ? args={"dictionary": word_dict})
data/train.list,data/test.list: 指定訓(xùn)練、測(cè)試數(shù)據(jù)
module=”dataprovider”: 數(shù)據(jù)處理Python文件名
obj=”process”: 指定生成數(shù)據(jù)的函數(shù)
args={“dictionary”: word_dict}: 額外的參數(shù),這里指定詞典
更詳細(xì)用例請(qǐng)參考文檔Python Use Case, 數(shù)據(jù)格式和詳細(xì)文檔請(qǐng)參考 PyDataProviderWrapper。
網(wǎng)絡(luò)結(jié)構(gòu)(Network Architecture)
本節(jié)我們將專注于網(wǎng)絡(luò)結(jié)構(gòu)的介紹。
我們將以基本的邏輯回歸網(wǎng)絡(luò)作為起點(diǎn),并逐漸展示更加深入的功能。更詳細(xì)的網(wǎng)絡(luò)配置 連接請(qǐng)參考Layer文檔。 所有配置在demo/quick_start目錄,首先列舉邏輯回歸網(wǎng)絡(luò)。
邏輯回歸模型(Logistic Regression)
流程如下:
獲取利用one-hot vector表示的每個(gè)單詞,維度是詞典大小
word = data_layer(name="word", ?size=word_dim)
獲取該條樣本類別Id,維度是類別個(gè)數(shù)。
label = data_layer(name="label", size=label_dim)
利用邏輯回歸模型對(duì)該向量進(jìn)行分類,同時(shí)會(huì)計(jì)算分類準(zhǔn)確率
# Define a fully connected layer with logistic activation (also called softmax activation).output = fc_layer(input=word,
? ? ? ? ? ? ? ? ? size=label_dim,
? ? ? ? ? ? ? ? ? act_type=SoftmaxActivation())# Define cross-entropy classification loss and error.classification_cost(input=output, label=label)
input: 除過(guò)data層,每個(gè)層都有一個(gè)或多個(gè)input,多個(gè)input以list方式輸入
size: 該層神經(jīng)元個(gè)數(shù)
act_type: 激活函數(shù)類型
效果總結(jié):我們將在后面介紹訓(xùn)練和預(yù)測(cè)的流程的腳本。在此為方便對(duì)比不同網(wǎng)絡(luò)結(jié)構(gòu), 我們隨時(shí)總結(jié)了各個(gè)網(wǎng)絡(luò)的復(fù)雜度和效果。
詞向量模型(Word Vector)
embeding模型需要稍微改變數(shù)據(jù)提供的腳本,即dataprovider_emb.py,詞向量模型、 卷積模型、時(shí)序模型均使用該腳
文本輸入類型定義為整數(shù)類型integer_value
設(shè)置文本輸入類型seq_type為SequenceType.SEQUENCE
def initializer(settings, dictionary, **kwargs):
? ? settings.word_dict = dictionary
? ? settings.input_types = [ ? ? ? ?# Define the type of the first input as sequence of integer.
? ? ? ? integer_value(len(dictionary), seq_type=SequenceType.SEQUENCE), ? ? ? ?# Define the second input for label id
? ? ? ? integer_value(2)]@provider(init_hook=initializer)def process(settings, file_name): ? ?...
? ? # omitted, it is same as the data provider for LR model
該模型依然是使用邏輯回歸分類網(wǎng)絡(luò)的框架, 只是將句子利用連續(xù)向量表示替換稀疏 向量表示, 即對(duì)第3步進(jìn)行替換。句子表示的計(jì)算更新為2步:
利用單詞Id查找對(duì)應(yīng)的該單詞的連續(xù)表示向量(維度為word_dim), 輸入N個(gè)單詞,輸出為N個(gè)word_dim維度向量
emb = embedding_layer(input=word, size=word_dim)
將該句話包含的所有單詞向量求平均得到句子的表示
avg = pooling_layer(input=emb, pooling_type=AvgPooling())
其它部分和邏輯回歸網(wǎng)絡(luò)結(jié)構(gòu)一致。 效果總結(jié):
卷積模型(Convolution)
卷積網(wǎng)絡(luò)是一種特殊的從詞向量表示到句子表示的方法, 也就是將詞向量模型額步 驟3-2進(jìn)行進(jìn)一步演化, 變?yōu)?個(gè)新的子步驟。
文本卷積分為三個(gè)步驟:
獲取每個(gè)單詞左右各k個(gè)近鄰, 拼接成一個(gè)新的向量表示;
對(duì)該表示進(jìn)行非線性變換 (例如Sigmoid變換), 成為維度為hidden_dim的新的向量;
在每個(gè)維度上取出在該句話新的向量集合上該維度的較大值作為最后的句子表示向量。 這3個(gè)子步驟可配置為:
text_conv = sequence_conv_pool(input=emb,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?context_start=k,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?context_len=2 * k + 1)
效果總結(jié):
時(shí)序模型(Time Sequence)
時(shí)序模型即為RNN模型, 包括簡(jiǎn)單的RNN模型、GRU模型、LSTM模型等。
GRU模型配置:
gru = simple_gru(input=emb, size=gru_size)
LSTM模型配置:
lstm = simple_lstm(input=emb, size=lstm_size)
針對(duì)本問(wèn)題,我們采用單層LSTM模型,并使用了Dropout,效果總結(jié):
優(yōu)化算法(Optimization Algorithm)
優(yōu)化算法包括 Momentum, RMSProp,AdaDelta,AdaGrad,ADAM,Adamax等,這里采用Adam優(yōu)化方法,加了L2正則和梯度截?cái)唷?/p>
settings(batch_size=128,
? ? ? ? ?learning_rate=2e-3,
? ? ? ? ?learning_method=AdamOptimizer(),
? ? ? ? ?regularization=L2Regularization(8e-4),
? ? ? ? ?gradient_clipping_threshold=25)
訓(xùn)練模型(Training Model)
在完成了數(shù)據(jù)和網(wǎng)絡(luò)結(jié)構(gòu)搭建之后, 我們進(jìn)入到訓(xùn)練部分。
訓(xùn)練腳本:我們將訓(xùn)練的命令行保存在了 train.sh文件中。訓(xùn)練時(shí)所需設(shè)置的主要參數(shù)如下:
paddle train --config=trainer_config.py --log_period=20 --save_dir=./output --num_passes=15 --use_gpu=false
這里沒(méi)有介紹多機(jī)分布式訓(xùn)練,可以參考分布式訓(xùn)練的demo學(xué)習(xí)如何進(jìn)行多機(jī)訓(xùn)練。
預(yù)測(cè)(Prediction)
可以使用訓(xùn)練好的模型評(píng)估帶有l(wèi)abel的驗(yàn)證集,也可以預(yù)測(cè)沒(méi)有l(wèi)abel的測(cè)試集。
測(cè)試腳本如下,將會(huì)測(cè)試配置文件中test.list指定的數(shù)據(jù)。
paddle train --use_gpu=false --job=test --init_model_path=./output/pass-0000x
可以參考Python API預(yù)測(cè) 教程,或其他demo的Python預(yù)測(cè)過(guò)程。也可以通過(guò)如下方式預(yù)測(cè)。
預(yù)測(cè)腳本(predict.sh):
model="output/pass-00003"paddle train
? ? --config=trainer_config.lstm.py
? ? --use_gpu=false
? ? --job=test
? ? --init_model_path=$model
? ? --config_args=is_predict=1
? ? --predict_output_dir=. mv rank-00000 result.txt
與訓(xùn)練網(wǎng)絡(luò)配置不同的是:無(wú)需label相關(guān)的層,指定outputs輸出概率層(softmax輸出), 指定batch_size=1,數(shù)據(jù)傳輸無(wú)需label數(shù)據(jù),預(yù)測(cè)數(shù)據(jù)指定test_list的位置。
is_predict = get_config_arg("is_predict", bool, False)trn = "data/train.list" if not is_predict else Nonetst = "data/test.list" if not is_predict else "data/pred.list"obj = "process" if not is_predict else "process_pre"batch_size = 128 if not is_predict else 1if is_predict:
? ? maxid = maxid_layer(output)
? ? outputs([maxid,output])else:
? ? label = data_layer(name="label", size=2)
? ? cls = classification_cost(input=output, label=label)
? ? outputs(cls)
總體效果總結(jié)(Summary)
這些流程中的數(shù)據(jù)下載、網(wǎng)絡(luò)配置、訓(xùn)練腳本在/demo/quick_start目錄,我們?cè)诖丝?結(jié)上述網(wǎng)絡(luò)結(jié)構(gòu)在Amazon-Elec測(cè)試集(25k)上的效果:
附錄(Appendix)
命令行參數(shù)(Command Line Argument)
–config:網(wǎng)絡(luò)配置
–save_dir:模型存儲(chǔ)路徑
–log_period:每隔多少batch打印一次日志
–num_passes:訓(xùn)練輪次,一個(gè)pass表示過(guò)一遍所有訓(xùn)練樣本
–config_args:命令指定的參數(shù)會(huì)傳入網(wǎng)絡(luò)配置中。
–init_model_path:指定初始化模型路徑,可用在測(cè)試或訓(xùn)練時(shí)指定初始化模型。
默認(rèn)一個(gè)pass保存一次模型,也可以通過(guò)saving_period_by_batches設(shè)置每隔多少batch保存一次模型。 可以通過(guò)show_parameter_stats_period設(shè)置打印參數(shù)信息等。 其他參數(shù)請(qǐng)參考令行參數(shù)文檔。
輸出日志(Log)
TrainerInternal.cpp:160] ?Batch=20 samples=2560 AvgCost=0.628761 CurrentCost=0.628761 Eval: classification_error_evaluator=0.304297 ?CurrentEval: classification_error_evaluator=0.304297
模型訓(xùn)練會(huì)看到這樣的日志,詳細(xì)的參數(shù)解釋如下面表格:
歡迎加入本站公開興趣群商業(yè)智能與數(shù)據(jù)分析群
興趣范圍包括各種讓數(shù)據(jù)產(chǎn)生價(jià)值的辦法,實(shí)際應(yīng)用案例分享與討論,分析工具,ETL工具,數(shù)據(jù)倉(cāng)庫(kù),數(shù)據(jù)挖掘工具,報(bào)表系統(tǒng)等全方位知識(shí)
QQ群:81035754
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/4408.html
摘要:而道器相融,在我看來(lái),那煉丹就需要一個(gè)好的丹爐了,也就是一個(gè)優(yōu)秀的機(jī)器學(xué)習(xí)平臺(tái)。因此,一個(gè)機(jī)器學(xué)習(xí)平臺(tái)要取得成功,最好具備如下五個(gè)特點(diǎn)精辟的核心抽象一個(gè)機(jī)器學(xué)習(xí)平臺(tái),必須有其靈魂,也就是它的核心抽象。 *本文首發(fā)于 AI前線 ,歡迎轉(zhuǎn)載,并請(qǐng)注明出處。 摘要 2017年6月,騰訊正式開源面向機(jī)器學(xué)習(xí)的第三代高性能計(jì)算平臺(tái) Angel,在GitHub上備受關(guān)注;2017年10月19日,騰...
摘要:本文內(nèi)容節(jié)選自由主辦的第七屆,北京一流科技有限公司首席科學(xué)家袁進(jìn)輝老師木分享的讓簡(jiǎn)單且強(qiáng)大深度學(xué)習(xí)引擎背后的技術(shù)實(shí)踐實(shí)錄。年創(chuàng)立北京一流科技有限公司,致力于打造分布式深度學(xué)習(xí)平臺(tái)的事實(shí)工業(yè)標(biāo)準(zhǔn)。 本文內(nèi)容節(jié)選自由msup主辦的第七屆TOP100summit,北京一流科技有限公司首席科學(xué)家袁進(jìn)輝(老師木)分享的《讓AI簡(jiǎn)單且強(qiáng)大:深度學(xué)習(xí)引擎OneFlow背后的技術(shù)實(shí)踐》實(shí)錄。 北京一流...
閱讀 465·2023-04-25 23:00
閱讀 3496·2021-11-22 13:54
閱讀 1899·2021-10-27 14:14
閱讀 1487·2019-08-30 13:59
閱讀 3512·2019-08-23 16:15
閱讀 1959·2019-08-23 16:06
閱讀 3328·2019-08-23 15:26
閱讀 1258·2019-08-23 13:48