91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【連載】深度學(xué)習(xí)筆記6:神經(jīng)網(wǎng)絡(luò)優(yōu)化算法之從SGD到Adam

人工智能實訓(xùn)營 ? 2018-08-20 12:47 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

從前面的學(xué)習(xí)中,帶大家一起學(xué)會了如何手動搭建神經(jīng)網(wǎng)絡(luò),以及神經(jīng)網(wǎng)絡(luò)的正則化等實用層面的內(nèi)容。這些都使得我們能夠更深入的理解神經(jīng)網(wǎng)絡(luò)的機制,而并不是初次接觸深度學(xué)習(xí)就上手框架,雖然對外宣稱神經(jīng)網(wǎng)絡(luò)是個黑箱機制,但是作為學(xué)習(xí)者我們極度有必要搞清楚算法在每個環(huán)節(jié)到底都干了些什么。

今天講的是深度學(xué)習(xí)的一個大的主題——優(yōu)化算法。采用何種方式對損失函數(shù)進行迭代優(yōu)化,這是機器學(xué)習(xí)的一大主題之一,當(dāng)一個機器學(xué)習(xí)問題有了具體的模型和評估策略,所有的機器學(xué)習(xí)問題都可以形式化為一個最優(yōu)化問題。這也是為什么我們說優(yōu)化理論和凸優(yōu)化算法等學(xué)科是機器學(xué)習(xí)一大支柱的原因所在。從純數(shù)學(xué)的角度來看,所有的數(shù)學(xué)模型盡管形式不一,各有頭面,但到最后幾乎到可以歸約為最優(yōu)化問題。所以,有志于奮戰(zhàn)在機器學(xué)習(xí)和深度學(xué)習(xí)領(lǐng)域的各位,學(xué)好最優(yōu)化,責(zé)無旁貸啊。

要說機器學(xué)習(xí)和深度學(xué)習(xí)的優(yōu)化算法,梯度下降必然是核心所在。神經(jīng)網(wǎng)絡(luò)發(fā)展至今,優(yōu)化算法層出不窮,但大底是出不了梯度下降的框框架架。這一篇筆記,筆者就和大家一起學(xué)習(xí)和回顧深度學(xué)習(xí)中常用的優(yōu)化算法。在前面手動搭建神經(jīng)網(wǎng)絡(luò)的代碼實踐中,我們對于損失函數(shù)的優(yōu)化采用了一般的梯度下降法,所以本篇總結(jié)就從梯度下降法開始。

梯度下降法 Gradient Descent


640?wx_fmt=png

想必大家對于梯度下降是很熟悉了,選擇負梯度方向進行參數(shù)更新算是常規(guī)操作了。話不多說,對于多層神經(jīng)網(wǎng)絡(luò)如何執(zhí)行梯度下降:

defupdate_parameters_with_gd(parameters,grads,learning_rate):
"""
Updateparametersusingonestepofgradientdescent

Arguments:
parameters--pythondictionarycontainingyourparameterstobeupdated:
parameters['W'+str(l)]=Wl
parameters['b'+str(l)]=bl
grads--pythondictionarycontainingyourgradientstoupdateeachparameters:
grads['dW'+str(l)]=dWl
grads['db'+str(l)]=dbl
learning_rate--thelearningrate,scalar.
Returns:
parameters--pythondictionarycontainingyourupdatedparameters
"""
L=len(parameters)//2#numberoflayersintheneuralnetworks
#Updateruleforeachparameter
forlinrange(L):
parameters['W'+str(l+1)]=parameters['W'+str(l+1)]-learning_rate*grads['dW'+str(l+1)]
parameters['b'+str(l+1)]=parameters['b'+str(l+1)]-learning_rate*grads['db'+str(l+1)]
returnparameters

在上述代碼中,我們傳入含有權(quán)值和偏置的字典、梯度字段和更新的學(xué)習(xí)率作為參數(shù),按照開頭的公式編寫權(quán)值更新代碼,一個簡單的多層網(wǎng)絡(luò)的梯度下降算法就寫出來了。

小批量梯度下降法 mini-batch Gradient Descent

在工業(yè)數(shù)據(jù)環(huán)境下,直接對大數(shù)據(jù)執(zhí)行梯度下降法訓(xùn)練往往處理速度緩慢,這時候?qū)⒂?xùn)練集分割成小一點的子集進行訓(xùn)練就非常重要了。這個被分割成的小的子集就叫做 mini-batch,意為小批量。對每一個小批量同時執(zhí)行梯度下降會大大提高訓(xùn)練效率。在實際利用代碼實現(xiàn)的時候,小批量梯度下降算法通常包括兩個步驟:充分打亂數(shù)據(jù)(shuffle)和分組組合數(shù)據(jù)(partition)。如下圖所示。

640?wx_fmt=png
shuffle
640?wx_fmt=png
partition

具體代碼實現(xiàn)為:

def random_mini_batches(X, Y, mini_batch_size = 64, seed = 0):
  """
  Creates a list of random minibatches from (X, Y)

  Arguments:
  X -- input data, of shape (input size, number of examples)
  Y -- true "label" vector (1 for blue dot / 0 for red dot), of shape (1, number of examples)
  mini_batch_size -- size of the mini-batches, integer

  Returns:
  mini_batches -- list of synchronous (mini_batch_X, mini_batch_Y)
  """

  np.random.seed(seed)    
  m = X.shape[1]         
  mini_batches = []  # Step 1: Shuffle (X, Y)
  permutation = list(np.random.permutation(m))
  shuffled_X = X[:, permutation]
  shuffled_Y = Y[:, permutation].reshape((1,m))  # Step 2: Partition (shuffled_X, shuffled_Y). Minus the end case.
  num_complete_minibatches = math.floor(m/mini_batch_size) 
  for k in range(0, num_complete_minibatches):
    mini_batch_X = shuffled_X[:, 0:mini_batch_size]
    mini_batch_Y = shuffled_Y[:, 0:mini_batch_size]

    mini_batch = (mini_batch_X, mini_batch_Y)
    mini_batches.append(mini_batch)  # Handling the end case (last mini-batch < mini_batch_size)
  if m % mini_batch_size != 0:
    mini_batch_X = shuffled_X[:, 0: m-mini_batch_size*math.floor(m/mini_batch_size)]
    mini_batch_Y = shuffled_Y[:, 0: m-mini_batch_size*math.floor(m/mini_batch_size)]

    mini_batch = (mini_batch_X, mini_batch_Y)
    mini_batches.append(mini_batch)  
return mini_batches

小批量梯度下降的實現(xiàn)思路非常清晰,先打亂數(shù)據(jù)在分組數(shù)據(jù),需要注意的細節(jié)在于最后一個小批量所含的訓(xùn)練樣本數(shù),通常而言最后一個小批量會少于前面批量所含樣本數(shù)。

隨機梯度下降 Stochastic Gradient Descent

當(dāng)小批量所含的訓(xùn)練樣本數(shù)為 1 的時候,小批量梯度下降法就變成了隨機梯度下降法(SGD)。SGD雖然以單個樣本為訓(xùn)練單元訓(xùn)練速度會很快,但犧牲了向量化運算所帶來的便利性,在較大數(shù)據(jù)集上效率并不高。
我們可以看一下梯度下降和隨機梯度下降在實現(xiàn)上的差異:

# GD
X = data_input Y = labels parameters = initialize_parameters(layers_dims)
for i in range(0, num_iterations): # Forward propagation a, caches = forward_propagation(X, parameters) # Compute cost. cost = compute_cost(a, Y) # Backward propagation. grads = backward_propagation(a, caches, parameters) # Update parameters. parameters = update_parameters(parameters, grads)

# SGDX = data_input Y = labels parameters = initialize_parameters(layers_dims)
for i in range(0, num_iterations):
for j in range(0, m): # Forward propagation a, caches = forward_propagation(X[:,j], parameters) # Compute cost cost = compute_cost(a, Y[:,j]) # Backward propagation grads = backward_propagation(a, caches, parameters) # Update parameters. parameters = update_parameters(parameters, grads)

所以,從本質(zhì)上看,梯度下降法、小批量梯度下降法和隨機梯度下降法,并沒有區(qū)別。唯一的區(qū)別就在于它們執(zhí)行一次訓(xùn)練過程所需要用到的訓(xùn)練樣本數(shù)。梯度下降法用到的是全集訓(xùn)練數(shù)據(jù),隨機梯度下降則是單個樣本數(shù)據(jù),而小批量則是介于二者之間。

帶動量的梯度下降法(momentum)


正如上圖中看到的一樣,我們假設(shè)梯度下降的橫向為參數(shù) W 的下降方向,而偏置 b 的下降方向為縱軸,我們總是希望在縱軸上的震蕩幅度小一點,學(xué)習(xí)速度慢一點,而在橫軸上學(xué)習(xí)速度快一點,無論是小批量梯度下降還是隨機梯度下降,好像都不能避免這個問題。為了解決這個問題,帶動量的梯度下降法來了。帶動量的梯度下降考慮歷史梯度的加權(quán)平均值作為速率進行優(yōu)化。執(zhí)行公式如下:

640?wx_fmt=png
根據(jù)上述公式編寫帶動量的梯度下降法實現(xiàn)代碼:

defupdate_parameters_with_momentum(parameters,grads,v,beta,learning_rate):
"""
UpdateparametersusingMomentum

Arguments:
parameters--pythondictionarycontainingyourparameters:
parameters['W'+str(l)]=Wl
parameters['b'+str(l)]=bl
grads--pythondictionarycontainingyourgradientsforeachparameters:
grads['dW'+str(l)]=dWl
grads['db'+str(l)]=dbl
v--pythondictionarycontainingthecurrentvelocity:
v['dW'+str(l)]=...
v['db'+str(l)]=...
beta--themomentumhyperparameter,scalar
learning_rate--thelearningrate,scalar

Returns:
parameters--pythondictionarycontainingyourupdatedparameters
v--pythondictionarycontainingyourupdatedvelocities
"""

L=len(parameters)//2#numberoflayersintheneuralnetworks

#Momentumupdateforeachparameter
forlinrange(L):#computevelocities
v['dW'+str(l+1)]=beta*v['dW'+str(l+1)]+(1-beta)*grads['dW'+str(l+1)]
v['db'+str(l+1)]=beta*v['db'+str(l+1)]+(1-beta)*grads['db'+str(l+1)]#updateparameters
parameters['W'+str(l+1)]=parameters['W'+str(l+1)]-learning_rate*v['dW'+str(l+1)]
parameters['b'+str(l+1)]=parameters['b'+str(l+1)]-learning_rate*v['db'+str(l+1)]
returnparameters,v

實現(xiàn)帶動量的梯度下降的關(guān)鍵點有兩個:一是動量是考慮歷史梯度進行梯度下降的,二是這里的需要指定的超參數(shù)變成了兩個:一個是學(xué)習(xí)率 learning_rate,一個是梯度加權(quán)參數(shù)beta

Adam算法

Adam 全稱為 Adaptive Moment Estimation,是在帶動量的梯度下降法的基礎(chǔ)上融合了一種稱為 RMSprop(加速梯度下降)的算法而成的。相較于帶動量的梯度下降法,無論是RMSprop 還是 Adam,其中的改進思路都在于如何讓橫軸上的學(xué)習(xí)更快以及讓縱軸上的學(xué)習(xí)更慢。RMSprop 和 Adam 在帶動量的梯度下降法的基礎(chǔ)上,引入了平方梯度,并對速率進行了偏差糾正。具體計算公式如下:

640?wx_fmt=png

實現(xiàn)代碼如下:

def update_parameters_with_adam(parameters, grads, v, s, t, learning_rate = 0.01,
                beta1 = 0.9, beta2 = 0.999, epsilon = 1e-8):
  """
  Update parameters using Adam

  Arguments:
  parameters -- python dictionary containing your parameters:
          parameters['W' + str(l)] = Wl
          parameters['b' + str(l)] = bl
  grads -- python dictionary containing your gradients for each parameters:
          grads['dW' + str(l)] = dWl
          grads['db' + str(l)] = dbl
  v -- Adam variable, moving average of the first gradient, python dictionary
  s -- Adam variable, moving average of the squared gradient, python dictionary
  learning_rate -- the learning rate, scalar.
  beta1 -- Exponential decay hyperparameter for the first moment estimates 
  beta2 -- Exponential decay hyperparameter for the second moment estimates 
  epsilon -- hyperparameter preventing division by zero in Adam updates

  Returns:
  parameters -- python dictionary containing your updated parameters 
  v -- Adam variable, moving average of the first gradient, python dictionary
  s -- Adam variable, moving average of the squared gradient, python dictionary
  """

  L = len(parameters) // 2         
  v_corrected = {}            
  s_corrected = {}             

  # Perform Adam update on all parameters
  for l in range(L):
    v["dW" + str(l+1)] = beta1 * v["dW" + str(l+1)] + (1 - beta1) * grads['dW'+str(l+1)]
    v["db" + str(l+1)] = beta1 * v["db" + str(l+1)] + (1 - beta1) * grads['db'+str(l+1)]    # Compute bias-corrected first moment estimate. Inputs: "v, beta1, t". Output: "v_corrected".  
    v_corrected["dW" + str(l+1)] = v["dW" + str(l+1)] / (1 - beta1**t)
    v_corrected["db" + str(l+1)] = v["db" + str(l+1)] / (1 - beta1**t)    # Moving average of the squared gradients. Inputs: "s, grads, beta2". Output: "s".
    s["dW" + str(l+1)] = beta2 * s["dW" + str(l+1)] + (1 - beta2) * (grads["dW" + str(l+1)])**2
    s["db" + str(l+1)] = beta2 * s["db" + str(l+1)] + (1 - beta2) * (grads["db" + str(l+1)])**2


    # Compute bias-corrected second raw moment estimate. Inputs: "s, beta2, t". Output: "s_corrected".
    s_corrected["dW" + str(l+1)] = s["dW" + str(l+1)] / (1 - beta2**t)
    s_corrected["db" + str(l+1)] = s["db" + str(l+1)] / (1 - beta2**t)    # Update parameters. Inputs: "parameters, learning_rate, v_corrected, s_corrected, epsilon". Output: "parameters".

    parameters["W" + str(l+1)] = parameters["W" + str(l+1)] - learning_rate * v_corrected["dW" + str(l+1)] / (np.sqrt(s_corrected["dW" + str(l+1)]) + epsilon)
    parameters["b" + str(l+1)] = parameters["b" + str(l+1)] - learning_rate * v_corrected["db" + str(l+1)] / (np.sqrt(s_corrected["db" + str(l+1)]) + epsilon)  
return parameters, v, s

除了以上這些算法,還有一些像 Adadelta 之類的算法我們沒有提到,有需要了解的同學(xué)可以自行查找相關(guān)資料。最后用一個圖來展示各種優(yōu)化算法的效果:




本文來自《自興動腦人工智能》項目部:凱文




聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    面向嵌入式部署的神經(jīng)網(wǎng)絡(luò)優(yōu)化:模型壓縮深度解析

    1.為什么需要神經(jīng)網(wǎng)絡(luò)模型壓縮? 神經(jīng)網(wǎng)絡(luò)已經(jīng)成為解決復(fù)雜機器學(xué)習(xí)問題的強大工具。然而,這種能力往往伴隨著模型規(guī)模和計算復(fù)雜度的增加。當(dāng)輸入維度較大(例如長時序窗口、高分辨率特征空間)時,模型需要
    的頭像 發(fā)表于 02-24 15:37 ?4597次閱讀
    面向嵌入式部署的<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b><b class='flag-5'>優(yōu)化</b>:模型壓縮<b class='flag-5'>深度</b>解析

    神經(jīng)網(wǎng)絡(luò)的初步認識

    日常生活中的智能應(yīng)用都離不開深度學(xué)習(xí),而深度學(xué)習(xí)則依賴于神經(jīng)網(wǎng)絡(luò)的實現(xiàn)。什么是神經(jīng)網(wǎng)絡(luò)
    的頭像 發(fā)表于 12-17 15:05 ?323次閱讀
    <b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>的初步認識

    自動駕駛中常提的卷積神經(jīng)網(wǎng)絡(luò)是個啥?

    在自動駕駛領(lǐng)域,經(jīng)常會聽到卷積神經(jīng)網(wǎng)絡(luò)技術(shù)。卷積神經(jīng)網(wǎng)絡(luò),簡稱為CNN,是一種專門用來處理網(wǎng)格狀數(shù)據(jù)(比如圖像)的深度學(xué)習(xí)模型。CNN在圖像處理中尤其常見,因為圖像本身就可以看作是由像
    的頭像 發(fā)表于 11-19 18:15 ?2072次閱讀
    自動駕駛中常提的卷積<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>是個啥?

    CNN卷積神經(jīng)網(wǎng)絡(luò)設(shè)計原理及在MCU200T上仿真測試

    數(shù)的提出很大程度的解決了BP算法優(yōu)化深層神經(jīng)網(wǎng)絡(luò)時的梯度耗散問題。當(dāng)x&gt;0 時,梯度恒為1,無梯度耗散問題,收斂快;當(dāng)x&lt;0 時,該層的輸出為0。 CNN
    發(fā)表于 10-29 07:49

    NMSIS神經(jīng)網(wǎng)絡(luò)庫使用介紹

    () riscv_fully_connected_q7()   在NS上跑時和arm的神經(jīng)網(wǎng)絡(luò)庫一致,可在github上下載CMSIS的庫,然后加入自己庫所在的路徑下即可。
    發(fā)表于 10-29 06:08

    構(gòu)建CNN網(wǎng)絡(luò)模型并優(yōu)化的一般化建議

    :Dropout層隨機跳過神經(jīng)網(wǎng)絡(luò)模型中某些神經(jīng)元之間的連接,通過隨機制造缺陷進行訓(xùn)練提升整個神經(jīng)網(wǎng)絡(luò)的魯棒性。 6)指定合理的學(xué)習(xí)率策
    發(fā)表于 10-28 08:02

    在Ubuntu20.04系統(tǒng)中訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型的一些經(jīng)驗

    , batch_size=512, epochs=20)總結(jié) 這個核心算法中的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)和訓(xùn)練過程,是用來對MNIST手寫數(shù)字圖像進行分類的。模型將圖像作為輸入,通過卷積和池化層提取圖像的特征,然后通過全連接層進行分類預(yù)測。訓(xùn)練過程中,模型通過最小化損失函數(shù)來
    發(fā)表于 10-22 07:03

    CICC2033神經(jīng)網(wǎng)絡(luò)部署相關(guān)操作

    在完成神經(jīng)網(wǎng)絡(luò)量化后,需要將神經(jīng)網(wǎng)絡(luò)部署硬件加速器上。首先需要將所有權(quán)重數(shù)據(jù)以及輸入數(shù)據(jù)導(dǎo)入存儲器內(nèi)。 在仿真環(huán)境下,可將其存于一個文件,并在 Verilog 代碼中通過 read
    發(fā)表于 10-20 08:00

    人工智能工程師高頻面試題匯總:循環(huán)神經(jīng)網(wǎng)絡(luò)篇(題目+答案)

    ,提前準備一些面試常問的問題,比如概率論與統(tǒng)計知識、機器學(xué)習(xí)的那些算法,或者深度學(xué)習(xí)的框架,還有怎么優(yōu)化模型,循環(huán)
    的頭像 發(fā)表于 10-17 16:36 ?703次閱讀
    人工智能工程師高頻面試題匯總:循環(huán)<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>篇(題目+答案)

    液態(tài)神經(jīng)網(wǎng)絡(luò)(LNN):時間連續(xù)性與動態(tài)適應(yīng)性的神經(jīng)網(wǎng)絡(luò)

    1.算法簡介液態(tài)神經(jīng)網(wǎng)絡(luò)(LiquidNeuralNetworks,LNN)是一種新型的神經(jīng)網(wǎng)絡(luò)架構(gòu),其設(shè)計理念借鑒自生物神經(jīng)系統(tǒng),特別是秀麗隱桿線蟲的
    的頭像 發(fā)表于 09-28 10:03 ?1197次閱讀
    液態(tài)<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>(LNN):時間連續(xù)性與動態(tài)適應(yīng)性的<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>

    如何在機器視覺中部署深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)

    圖 1:基于深度學(xué)習(xí)的目標(biāo)檢測可定位已訓(xùn)練的目標(biāo)類別,并通過矩形框(邊界框)對其進行標(biāo)識。 在討論人工智能(AI)或深度學(xué)習(xí)時,經(jīng)常會出現(xiàn)“神經(jīng)網(wǎng)絡(luò)
    的頭像 發(fā)表于 09-10 17:38 ?900次閱讀
    如何在機器視覺中部署<b class='flag-5'>深度</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>

    AI的核心操控:算法硬件的協(xié)同進化

    到頂層的應(yīng)用算法,共同構(gòu)成AI的“智能引擎”。 算法層:模型架構(gòu)與訓(xùn)練控制 現(xiàn)代AI的核心是深度學(xué)習(xí)算法,其操控依賴于
    的頭像 發(fā)表于 09-08 17:51 ?983次閱讀

    無刷電機小波神經(jīng)網(wǎng)絡(luò)轉(zhuǎn)子位置檢測方法的研究

    摘要:論文通過對無刷電機數(shù)學(xué)模型的推導(dǎo),得出轉(zhuǎn)角:與三相相電壓之間存在映射關(guān)系,因此構(gòu)建了一個以三相相電壓為輸人,轉(zhuǎn)角為輸出的小波神經(jīng)網(wǎng)絡(luò)來實現(xiàn)轉(zhuǎn)角預(yù)測,并采用改進遺傳算法來訓(xùn)練網(wǎng)絡(luò)結(jié)構(gòu)與參數(shù),借助
    發(fā)表于 06-25 13:06

    神經(jīng)網(wǎng)絡(luò)專家系統(tǒng)在電機故障診斷中的應(yīng)用

    摘要:針對傳統(tǒng)專家系統(tǒng)不能進行自學(xué)習(xí)、自適應(yīng)的問題,本文提出了基于種經(jīng)網(wǎng)絡(luò)專家系統(tǒng)的并步電機故障診斷方法。本文將小波神經(jīng)網(wǎng)絡(luò)和專家系統(tǒng)相結(jié)合,充分發(fā)揮了二者故障診斷的優(yōu)點,很大程度上降低了對電機
    發(fā)表于 06-16 22:09

    嵌入式AI技術(shù)深度學(xué)習(xí):數(shù)據(jù)樣本預(yù)處理過程中使用合適的特征變換對深度學(xué)習(xí)的意義

    ? 作者:蘇勇Andrew 使用神經(jīng)網(wǎng)絡(luò)實現(xiàn)機器學(xué)習(xí),網(wǎng)絡(luò)的每個層都將對輸入的數(shù)據(jù)做一次抽象,多層神經(jīng)網(wǎng)絡(luò)構(gòu)成深度
    的頭像 發(fā)表于 04-02 18:21 ?1516次閱讀