精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

您好,歡迎來(lái)電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊(cè)]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>數(shù)值算法/人工智能>

ios10中神經(jīng)網(wǎng)絡(luò)分析

大?。?/span>0.5 MB 人氣: 2017-10-10 需要積分:1
 長(zhǎng)期以來(lái),蘋果公司一直在其產(chǎn)品中使用了機(jī)器學(xué)習(xí):Siri回答我們的問(wèn)題,并供我們娛樂(lè);iPhoto能在我們的照片中進(jìn)行人臉識(shí)別;Mail app能檢測(cè)垃圾郵件。作為應(yīng)用開(kāi)發(fā)者,我們已經(jīng)利用了蘋果的API提供的一些功能,如人臉檢測(cè),并且從iOS10開(kāi)始,我們將獲得能用于語(yǔ)音識(shí)別和SiriKit的高級(jí)API。
  有時(shí)候,我們可能想超越平臺(tái)內(nèi)置API的限制,創(chuàng)造獨(dú)一無(wú)二的東西。但更多的時(shí)候,我們是使用了一些現(xiàn)成的庫(kù)或直接建于Accelerate或Metal的快速計(jì)算功能之上,推出自己的機(jī)器學(xué)習(xí)功能。
  例如,我的同事專為辦公室建立了一個(gè)錄入系統(tǒng),只使用一臺(tái)可檢測(cè)人臉的iPad,然后在Slack投遞一個(gè)gif,并允許用戶通過(guò)自定義命令開(kāi)門。
  ios10中神經(jīng)網(wǎng)絡(luò)分析
  但是現(xiàn)在,我們有了用于神經(jīng)網(wǎng)絡(luò)的第一方支持:在2016年的WWDC上,蘋果公司推出了兩個(gè)神經(jīng)網(wǎng)絡(luò)的API,分別稱為基礎(chǔ)神經(jīng)網(wǎng)絡(luò)子程序(BNNS)和卷積神經(jīng)網(wǎng)絡(luò)(CNN)。
  機(jī)器學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)
  AI先驅(qū)Arthur Samuel將機(jī)器學(xué)習(xí)定義為“沒(méi)有明確編程的情況下,給予計(jì)算機(jī)學(xué)習(xí)能力的研究領(lǐng)域”。人們用機(jī)器學(xué)習(xí)系統(tǒng)理解一些數(shù)據(jù)的意義,而這些數(shù)據(jù)不能很容易地使用傳統(tǒng)模型來(lái)描述。
  例如,編寫一段計(jì)算房子建筑面積的程序很容易,我們可以考慮到所有房間和其他空間的規(guī)模和形狀,但是卻不能在公式中計(jì)算房子的價(jià)值;而另一方面,機(jī)器學(xué)習(xí)系統(tǒng)卻非常適合解決這樣的問(wèn)題。通過(guò)給系統(tǒng)提供已知的具體數(shù)據(jù),如市場(chǎng)價(jià)值、房屋尺寸、臥室數(shù)量等,從而可以利用它預(yù)測(cè)價(jià)格。
  神經(jīng)網(wǎng)絡(luò)是構(gòu)建機(jī)器學(xué)習(xí)系統(tǒng)最常用的模型之一。早在半個(gè)多世紀(jì)前的1940年,已經(jīng)發(fā)展了神經(jīng)網(wǎng)絡(luò)的數(shù)學(xué)基礎(chǔ),而上世紀(jì)80年代,并行計(jì)算才使其更為可行;并且到了2000年,人們對(duì)于深度學(xué)習(xí)的興趣又引發(fā)了神經(jīng)網(wǎng)絡(luò)的回潮。
  神經(jīng)網(wǎng)絡(luò)由多個(gè)層構(gòu)造,其中每個(gè)層由一個(gè)或多個(gè)節(jié)點(diǎn)組成。最簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)具有三層:輸入、隱藏和輸出。輸入層節(jié)點(diǎn)可以代表圖像中的各個(gè)像素或一些其他參數(shù);如果我們?cè)囍詣?dòng)檢測(cè)照片的內(nèi)容,輸出層節(jié)點(diǎn)則經(jīng)常作為分類的結(jié)果,例如“狗”或“貓”;隱藏層節(jié)點(diǎn)配置為對(duì)輸入執(zhí)行操作,或配置為應(yīng)用激活函數(shù)。
  ios10中神經(jīng)網(wǎng)絡(luò)分析
  層類型
  三種常見(jiàn)的層的類型為:池化(pooling)層、卷積層和全連接層。
  池化層通常通過(guò)使用輸入的最大值或平均值來(lái)匯集數(shù)據(jù),降低其大小。一系列的卷積和池化層可以結(jié)合起來(lái),用于將照片逐步提煉成越來(lái)越高層次的特征集合。
  卷積層將卷積矩陣用于圖像的每個(gè)像素,實(shí)現(xiàn)圖像變換。如果你已經(jīng)用過(guò)Pixelmator或Photoshop濾鏡,那你很可能也用過(guò)了卷積矩陣。卷積矩陣通常是一個(gè)3×3或5×5的矩陣,被施加到輸入圖像的像素中,以計(jì)算輸出圖像中新的像素值。為獲得輸出像素值,我們就乘以原圖像中的像素值,并計(jì)算平均值。
  例如,該卷積矩陣用于圖像模糊:
  1 1 1 1 1 1 1 1 1
  而下面的矩陣能夠銳化圖像:
  0 -1 0 -15-10 -1 0
  神經(jīng)網(wǎng)絡(luò)的卷積層使用卷積矩陣處理輸入,并產(chǎn)生下一層的數(shù)據(jù)。例如,提取圖像中的諸如邊緣特征的新特性。
  全連接層可以被認(rèn)為是濾波器尺寸和原始圖像相同的卷積層。換句話說(shuō),你可以這么認(rèn)為,全連接層是一個(gè)函數(shù),能夠?yàn)槊總€(gè)像素分配權(quán)重,平均其結(jié)果,然后給出單個(gè)的輸出值。
  訓(xùn)練和推理
  每一層都需要配置適當(dāng)?shù)膮?shù)。例如,卷積層需要輸入和輸出圖像的信息(規(guī)模、通道數(shù)目等),也需要卷積層參數(shù)(內(nèi)核大小、矩陣等)。全連接層通過(guò)輸入和輸出向量、激活函數(shù)和權(quán)重來(lái)定義。
  要獲得這些參數(shù),必須訓(xùn)練神經(jīng)網(wǎng)絡(luò)。需要以下幾步才能完成:通過(guò)神經(jīng)網(wǎng)絡(luò)傳遞輸入,確定輸出,測(cè)量誤差(即實(shí)際結(jié)果與預(yù)測(cè)結(jié)果相差多遠(yuǎn)),并通過(guò)反向傳播調(diào)整權(quán)重。訓(xùn)練神經(jīng)網(wǎng)絡(luò)可能需要數(shù)百、數(shù)千甚至成千上萬(wàn)的樣本。
  目前,蘋果公司新的機(jī)器學(xué)習(xí)API,可用于構(gòu)建只做推理的神經(jīng)網(wǎng)絡(luò),而不是訓(xùn)練。這都是Big Nerd Ranch的功勞。
  Accelerate: BNNS
  第一個(gè)新的API是Accelerate框架的一部分,被稱為基礎(chǔ)神經(jīng)網(wǎng)絡(luò)子程序(BNNS,Basic Neural Network Subroutines)。BNNS補(bǔ)充了BLAS(基礎(chǔ)線性代數(shù)子程序),并用于一些第三方的機(jī)器學(xué)習(xí)應(yīng)用。
  BNNS在BNNSFilter類中定義層。Accelerate支持三種類型的層:
  卷積層(由BNNSFilterCreateConvolutionLayer函數(shù)創(chuàng)建)全連接層(BNNSFilterCreateFullyConnectedLayer)池化層(BNNSFilterCreatePoolingLayer)
  MNIST 數(shù)據(jù)庫(kù)是一個(gè)眾所周知的數(shù)據(jù)集,包含數(shù)以萬(wàn)計(jì)的手寫數(shù)字,用于掃描和調(diào)整,以適應(yīng)20乘20像素的圖像。
  一種處理圖像數(shù)據(jù)的方法是將圖像轉(zhuǎn)換成矢量,并使之通過(guò)一個(gè)全連接層。對(duì)于MNIST數(shù)據(jù),一個(gè)20×20的圖像將成為400個(gè)值的矢量。下面展示了如何將手寫的數(shù)字“1”轉(zhuǎn)換為向量:
  
  下面是配置全連接層的實(shí)例代碼,該層將大小為400的矢量作為輸入,采用S形的激活函數(shù),輸出矢量大小為25:
  // input layer deor BNNSVectorDeor i_desc = { .size= 400, .data_type = BNNSDataTypeFloat32, .data_scale = 0, .data_bias = 0, };// hidden layer deor BNNSVectorDeor h_desc = { .size= 25, .data_type = BNNSDataTypeFloat32, .data_scale = 0, .data_bias = 0, };// activation function BNNSActivation activation = { .function= BNNSActivationFunctionSigmoid, .alpha= 0, .beta= 0, };BNNSFullyConnectedLayerParameters in_layer_params = { .in_size = i_desc.size, .out_size = h_desc.size, .activation= activation, .weights.data= theta1, .weights.data_type = BNNSDataTypeFloat32, .bias.data_type = BNNSDataTypeFloat32, };// Common filter parameters BNNSFilterParameters filter_params = { .version= BNNSAPIVersion_1_0; // API version is mandatory};// Create a new fully connected layer filter (ih = input-to-hidden) BNNSFilter ih_filter = BNNSFilterCreateFullyConnectedLayer(&i_desc, &h_desc, &in_layer_params, &filter_params);float * i_stack = bir; // (float *)calloc(i_desc.size, sizeof(float));float * h_stack = (float *)calloc(h_desc.size, sizeof(float));float * o_stack = (float *)calloc(o_desc.size, sizeof(float));int ih_status = BNNSFilterApply(ih_filter, i_stack, h_stack);
  Metal!
  該部分會(huì)得到更多的Metal嗎?確實(shí)是的,因?yàn)榈诙€(gè)神經(jīng)網(wǎng)絡(luò)API是Metal Performance Shaders(MPS)框架的一部分。Accelerate是在CPU上進(jìn)行快速計(jì)算的框架,而Metal將GPU發(fā)揮了極致。Metal的特點(diǎn)是卷積神經(jīng)網(wǎng)絡(luò)(CNN,Convolution Neural Network)。
  MPS自帶了一個(gè)類似的API集。
  創(chuàng)建卷積層需要使用MPSCNNConvolutionDeor和MPSCNNConvolution函數(shù)。MPSCNNPoolingMax將為池化層提供參數(shù)。全連接層由MPSCNNFullyConnected函數(shù)創(chuàng)建。激活函數(shù)由MPSCNNNeuron的子類定義:
  MPSCNNNeuronLinearMPSCNNNeuronReLUMPSCNNNeuronSigmoidMPSCNNNeuronTanHMPSCNNNeuronAbsolute
  BNNS和CNN的比較
  下表為Accelerate和Metal激活函數(shù)列表:
  Accelerate/BNNS
  Metal Performance Shaders/CNN
  BNNSActivationFunctionIdentity
  BNNSActivationFunctionRectifiedLinear MPSCNNNeuronReLU
  MPSCNNNeuronLinear
  BNNSActivationFunctionLeakyRectifiedLinear
  BNNSActivationFunctionSigmoid MPSCNNNeuronSigmoid
  BNNSActivationFunctionTanh MPSCNNNeuronTanH
  BNNSActivationFunctionScaledTanh
  BNNSActivationFunctionAbs MPSCNNNeuronAbsolute
  池化函數(shù):
  Accelerate/BNNS
  Metal Performance Shaders/CNN
  BNNSPoolingFunctionMax MPSCNNPoolingMax
  BNNSPoolingFunctionAverage MPSCNNPoolingAverage
  Accelerate和Metal為神經(jīng)網(wǎng)絡(luò)提供的一組函數(shù)功能非常相似,所以二者選擇取決于每個(gè)應(yīng)用程序。GPU通常首選各種機(jī)器學(xué)習(xí)所需的計(jì)算,而數(shù)據(jù)局部性可能會(huì)導(dǎo)致Metal CNN的運(yùn)行性能比Accelerate BNNS版本要差。如果神經(jīng)網(wǎng)絡(luò)對(duì)已存入GPU的圖像進(jìn)行操作,例如,使用MPSImage和新MPSTemporaryImage時(shí),很明顯,這時(shí)更適合用Metal。
?

非常好我支持^.^

(0) 0%

不好我反對(duì)

(0) 0%

      發(fā)表評(píng)論

      用戶評(píng)論
      評(píng)價(jià):好評(píng)中評(píng)差評(píng)

      發(fā)表評(píng)論,獲取積分! 請(qǐng)遵守相關(guān)規(guī)定!

      ?