一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

3天內不再提示

如何使用Numpy搭建神經(jīng)網(wǎng)絡

電子工程師 ? 來源:未知 ? 2019-05-18 11:02 ? 次閱讀

很多同學入門機器學習之后,直接用TensorFlow調包實現(xiàn)神經(jīng)網(wǎng)絡,對于神經(jīng)網(wǎng)絡內在機理知之甚少。

編程語言與技術框架變化更新非常之快,理解背后的原理才是王道。下面文摘菌和大家一起用Numpy實現(xiàn)一步一步實現(xiàn)神經(jīng)網(wǎng)絡。

此篇文章旨在幫大家梳理神經(jīng)網(wǎng)絡知識點,且此篇文章是第一部分,只是簡單搭一個簡單的框架。暫時不涉及梯度下降、學習率調參等知識點。

最簡單的神經(jīng)網(wǎng)絡包含三個要素,輸入層,隱藏層以及輸出層。關于其工作機理其完全可以類比成一個元函數(shù):Y=W*X+b。

一個簡單的神經(jīng)網(wǎng)絡可以理解為兩次一元函數(shù)的輸入和輸出。

第一次:Y1=A1(W1*X+b1) ,其中X是原始數(shù)據(jù)的輸入,A1代表激活函數(shù)。

第二次:Y2=A2(W2*Y1+b2),其中Y1是第一次的輸出,A2是激活函數(shù)。參數(shù)W1、W2、b1、b2原則上各不相同。

本篇文章我們用到的激活函數(shù)有兩個,一個是tan(x),另一個是softmax。兩者的函數(shù)曲線如下。

兩個函數(shù)都有相同的特點,即函數(shù)值在零點左右變化較大,當輸入值遠離零點,其輸出較穩(wěn)定。

首先導入相關的庫,需要兩個庫,一個用于科學計算的Numpy,另一個是math。

importnumpyasnpimport math

然后定義激活函數(shù),

def tanh(x): return np.tanh(x)def softmax(x): exp=np.exp(x-x.max()) return exp/exp.sum()

這兩個激活函數(shù),其中tanh函數(shù),Numpy直接內嵌。softmax根據(jù)數(shù)學定義進行設置。第二個激活函數(shù)因為是指數(shù)函數(shù),其值會變化較大,所以我們用x-x.max 縮小其變化范圍,這對結果不影響。

我們使用的圖片大小是 28*28像素。以后會用手寫數(shù)字數(shù)據(jù)集訓練網(wǎng)絡,所以會有10個數(shù)字輸入,分別是[1,2,3,4,5,6,7,8,9,10]。所以要先定義三個列表。

dinensions=[28*28,10]activation=[tanh,softmax]distribution=[{'b':[0,0]},{'b':[0,0],'w':[-math.sqrt(6/(dinensions[0]+dinensions[1])),math.sqrt(6/(dinensions[0]+dinensions[1]))]}]

dinensions列表里面包含兩個數(shù),第一個是圖片的像素大小,第二個是數(shù)字的輸入變化量。

activation列表包含兩個激活函數(shù),分別為tanh,softmax。

distribution 列表里面對應的是字典格式的數(shù)據(jù),分別對應神經(jīng)網(wǎng)絡參數(shù)取值范圍。

其中第一層不包含參數(shù)W。

definit_parameters_b(layer):dist=distribution[layer]['b'] return np.random.rand(dinensions[layer])*(dist[1]-dist[0])+dist[0] #使得生成的隨機數(shù)在 b 的區(qū)間內definit_parameters_w(layer):dist=distribution[layer]['w'] return np.random.rand(dinensions[layer-1],dinensions[layer])*(dist[1]-dist[0])+dist[0] #使得生成的隨機數(shù)在 b 的區(qū)間內

上面代碼是對b和w這兩個參數(shù)初始化,因為我們輸入的是28*28個數(shù)字,輸出的是10個數(shù)字。所以第一層的 b 也有28*28個數(shù)字組成。根據(jù)矩陣的乘法規(guī)則,第二層的時候,w的維度只有是28*28行,10列才能滿足輸出的10個數(shù)字。因此第二層的b是10個數(shù)字。

dinensions[X] 意思是取切片,dinensions[1] 取得是10,dinensions[0],取得是28*28。

又因為np.random.rand()這一函數(shù)輸出值的范圍在[0,1],括號里面的參數(shù)(即dinensions[layer]只是確保輸出的數(shù)字個數(shù)滿足要求),所以為了讓輸出的值在一開始設置的 b 的區(qū)間內,我們設置先乘(dist[1]-dist[0])然后加上dist[0]。dist[1]和dist[0]分別對應參數(shù)的上下限。

definit_parameters():parameters=[]foriinrange(len(distribution)):layer_parameters={}forjindistribution[i].keys():ifj=='b':layer_parameters['b']=init_parameters_b(i)continueifj=='w':layer_parameters['w']=init_parameters_w(i)continueparameters.append(layer_parameters) return parameters

上面代碼是將三個參數(shù)的初始化集成達到一個函數(shù)里面。

先定義一個空列表(不要寫錯成空字典)是為了將三個參數(shù)統(tǒng)一輸出。

注:字典類型不能用append,列表可以用,列表.append(字典) 也是可以的。

然后從零開始遍歷distribution。用if循環(huán)語句,目的是把參數(shù)全部包含進來。

第二層for循環(huán)和if語句是判斷,并正確添加參數(shù)。

parameters=init_parameters() #將參數(shù)賦值給新的變量。defpredict(img,parameters):I0_in=img+parameters[0]['b']I0_out=activation[0](I0_in)I1_in=np.dot(I0_out,parameters[1]['w']+parameters[1]['b'])I1_out=activation[1](I1_in) return I1_out

定義輸出函數(shù),思路是這樣的:輸入數(shù)據(jù)后,根據(jù)函數(shù):y=wx+b,進行變換,第一層w全為1。然后經(jīng)過激活函數(shù)(第一個激活函數(shù)是tanh,所以用activation[0]),得出第一層的輸入I0_out。 然后進入第二層,第一層的輸出作為輸入,根據(jù)函數(shù):y=wx+b,進行變換,第二層的w為parameters[1]['w'],第二層的b為parameters[1]['b']。然后再經(jīng)過激活函數(shù)softmax,得到輸出。

predict(np.random.rand(784),parameters).argmax()

最后,隨便輸入一個784維數(shù)據(jù)(像素),都可以輸出一個圖片標簽

預測圖片中的數(shù)字

好了,我們第一個簡單的神經(jīng)網(wǎng)絡就搭建好了,關于如何使用梯度下降和學習率,如何訓練網(wǎng)絡以及如何加載圖片數(shù)據(jù),我們在以后的文章中會介紹。

注:此篇文章受B站up主大野喵渣的啟發(fā),并參考了其代碼,感興趣的同學可以去B站觀看他關于神經(jīng)網(wǎng)絡的教學視頻。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴

原文標題:TensorFlow什么的都弱爆了,強者只用Numpy搭建神經(jīng)網(wǎng)絡

文章出處:【微信號:BigDataDigest,微信公眾號:大數(shù)據(jù)文摘】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    神經(jīng)網(wǎng)絡教程(李亞非)

      第1章 概述  1.1 人工神經(jīng)網(wǎng)絡研究與發(fā)展  1.2 生物神經(jīng)元  1.3 人工神經(jīng)網(wǎng)絡的構成  第2章人工神經(jīng)網(wǎng)絡基本模型  2.1 MP模型  2.2 感知器模型  2.3
    發(fā)表于 03-20 11:32

    【PYNQ-Z2試用體驗】神經(jīng)網(wǎng)絡基礎知識

    語言,使用numpy.dot方法即可計算矩陣乘法。 以上便是一個簡單神經(jīng)網(wǎng)絡的基本原理,對神經(jīng)網(wǎng)絡有了基本的認識之后,我們才能進行復雜的神經(jīng)網(wǎng)絡設計。總結本文講解了
    發(fā)表于 03-03 22:10

    【PYNQ-Z2試用體驗】基于PYNQ-Z2的神經(jīng)網(wǎng)絡圖形識別[結項]

    前言前面我們簡單講解了神經(jīng)網(wǎng)絡的基本概念和工作原理,接下來,將通過具體的python代碼來完成基于神經(jīng)網(wǎng)絡的圖形識別。這里使用手寫的數(shù)字圖像作為輸入,神經(jīng)網(wǎng)絡將輸出圖像所對應的數(shù)字。獲取神經(jīng)網(wǎng)
    發(fā)表于 03-18 21:51

    卷積神經(jīng)網(wǎng)絡如何使用

    卷積神經(jīng)網(wǎng)絡(CNN)究竟是什么,鑒于神經(jīng)網(wǎng)絡在工程上經(jīng)歷了曲折的歷史,您為什么還會在意它呢? 對于這些非常中肯的問題,我們似乎可以給出相對簡明的答案。
    發(fā)表于 07-17 07:21

    【案例分享】ART神經(jīng)網(wǎng)絡與SOM神經(jīng)網(wǎng)絡

    今天學習了兩個神經(jīng)網(wǎng)絡,分別是自適應諧振(ART)神經(jīng)網(wǎng)絡與自組織映射(SOM)神經(jīng)網(wǎng)絡。整體感覺不是很難,只不過一些最基礎的概念容易理解不清。首先ART神經(jīng)網(wǎng)絡是競爭學習的一個代表,
    發(fā)表于 07-21 04:30

    如何構建神經(jīng)網(wǎng)絡

    原文鏈接:http://tecdat.cn/?p=5725 神經(jīng)網(wǎng)絡是一種基于現(xiàn)有數(shù)據(jù)創(chuàng)建預測的計算系統(tǒng)。如何構建神經(jīng)網(wǎng)絡?神經(jīng)網(wǎng)絡包括:輸入層:根據(jù)現(xiàn)有數(shù)據(jù)獲取輸入的層隱藏層:使用反向傳播優(yōu)化輸入變量權重的層,以提高模型的預測
    發(fā)表于 07-12 08:02

    基于BP神經(jīng)網(wǎng)絡的PID控制

    最近在學習電機的智能控制,上周學習了基于單神經(jīng)元的PID控制,這周研究基于BP神經(jīng)網(wǎng)絡的PID控制。神經(jīng)網(wǎng)絡具有任意非線性表達能力,可以通過對系統(tǒng)性能的學習來實現(xiàn)具有最佳組合的PID控制。利用BP
    發(fā)表于 09-07 07:43

    輕量化神經(jīng)網(wǎng)絡的相關資料下載

    視覺任務中,并取得了巨大成功。然而,由于存儲空間和功耗的限制,神經(jīng)網(wǎng)絡模型在嵌入式設備上的存儲與計算仍然是一個巨大的挑戰(zhàn)。前面幾篇介紹了如何在嵌入式AI芯片上部署神經(jīng)網(wǎng)絡:【嵌入式AI開發(fā)】篇五|實戰(zhàn)篇一:STM32cubeIDE上部署
    發(fā)表于 12-14 07:35

    使用keras搭建神經(jīng)網(wǎng)絡實現(xiàn)基于深度學習算法的股票價格預測

    本文使用keras搭建神經(jīng)網(wǎng)絡,實現(xiàn)基于深度學習算法的股票價格預測。本文使用的數(shù)據(jù)來源為tushare,一個免費開源接口;且只取開票價進行預測。import numpy as npimport
    發(fā)表于 02-08 06:40

    基于Numpy實現(xiàn)同態(tài)加密神經(jīng)網(wǎng)絡

    在分布式AI環(huán)境下,同態(tài)加密神經(jīng)網(wǎng)絡有助于保護商業(yè)公司知識產(chǎn)權和消費者隱私。本文介紹了如何基于Numpy實現(xiàn)同態(tài)加密神經(jīng)網(wǎng)絡。
    的頭像 發(fā)表于 03-27 14:52 ?8169次閱讀
    基于<b class='flag-5'>Numpy</b>實現(xiàn)同態(tài)加密<b class='flag-5'>神經(jīng)網(wǎng)絡</b>

    基于Numpy實現(xiàn)神經(jīng)網(wǎng)絡:反向傳播

    和DeepMind數(shù)據(jù)科學家、Udacity深度學習導師Andrew Trask一起,基于Numpy手寫神經(jīng)網(wǎng)絡,更深刻地理解反向傳播這一概念。
    的頭像 發(fā)表于 04-01 09:29 ?5316次閱讀
    基于<b class='flag-5'>Numpy</b>實現(xiàn)<b class='flag-5'>神經(jīng)網(wǎng)絡</b>:反向傳播

    【連載】深度學習筆記7:Tensorflow入門

    從前面的學習筆記中,和大家一起使用了 numpy 一步一步從感知機開始到兩層網(wǎng)絡以及最后實現(xiàn)了深度神經(jīng)網(wǎng)絡的算法搭建。而后我們又討論了改善深度神經(jīng)網(wǎng)
    的頭像 發(fā)表于 08-20 12:47 ?3415次閱讀

    如何使用numpy搭建一個卷積神經(jīng)網(wǎng)絡詳細方法和程序概述

    內容將繼續(xù)秉承之前 DNN 的學習路線,在利用Tensorflow搭建神經(jīng)網(wǎng)絡之前,先嘗試利用numpy手動搭建卷積神經(jīng)網(wǎng)絡,以期對卷積
    的頭像 發(fā)表于 10-20 10:55 ?6207次閱讀

    卷積神經(jīng)網(wǎng)絡模型搭建

    卷積神經(jīng)網(wǎng)絡模型搭建 卷積神經(jīng)網(wǎng)絡模型是一種深度學習算法。它已經(jīng)成為了計算機視覺和自然語言處理等各種領域的主流算法,具有很大的應用前景。本篇文章將詳細介紹卷積神經(jīng)網(wǎng)絡模型的
    的頭像 發(fā)表于 08-21 17:11 ?1140次閱讀

    使用NumPy實現(xiàn)前饋神經(jīng)網(wǎng)絡

    要使用NumPy實現(xiàn)一個前饋神經(jīng)網(wǎng)絡(Feedforward Neural Network),我們需要從基礎開始構建,包括初始化網(wǎng)絡參數(shù)、定義激活函數(shù)及其導數(shù)、實現(xiàn)前向傳播、計算損失函數(shù)、以及實現(xiàn)
    的頭像 發(fā)表于 07-11 16:30 ?2930次閱讀