導航:首頁 > 異常信息 > 搭建如圖所示的全連接神經網路

搭建如圖所示的全連接神經網路

發布時間:2022-08-30 02:51:25

『壹』 怎樣用python構建一個卷積神經網路

用keras框架較為方便

首先安裝anaconda,然後通過pip安裝keras


以下轉自wphh的博客。

#coding:utf-8

'''
GPUruncommand:
THEANO_FLAGS=mode=FAST_RUN,device=gpu,floatX=float32pythoncnn.py
CPUruncommand:
pythoncnn.py

2016.06.06更新:
這份代碼是keras開發初期寫的,當時keras還沒有現在這么流行,文檔也還沒那麼豐富,所以我當時寫了一些簡單的教程。
現在keras的API也發生了一些的變化,建議及推薦直接上keras.io看更加詳細的教程。

'''
#導入各種用到的模塊組件
from__future__importabsolute_import
from__future__importprint_function
fromkeras.preprocessing.imageimportImageDataGenerator
fromkeras.modelsimportSequential
fromkeras.layers.coreimportDense,Dropout,Activation,Flatten
fromkeras.layers.advanced_activationsimportPReLU
fromkeras.layers.,MaxPooling2D
fromkeras.optimizersimportSGD,Adadelta,Adagrad
fromkeras.utilsimportnp_utils,generic_utils
fromsix.movesimportrange
fromdataimportload_data
importrandom
importnumpyasnp

np.random.seed(1024)#forreprocibility
#載入數據
data,label=load_data()
#打亂數據
index=[iforiinrange(len(data))]
random.shuffle(index)
data=data[index]
label=label[index]
print(data.shape[0],'samples')

#label為0~9共10個類別,keras要求格式為binaryclassmatrices,轉化一下,直接調用keras提供的這個函數
label=np_utils.to_categorical(label,10)

###############
#開始建立CNN模型
###############

#生成一個model
model=Sequential()

#第一個卷積層,4個卷積核,每個卷積核大小5*5。1表示輸入的圖片的通道,灰度圖為1通道。
#border_mode可以是valid或者full,具體看這里說明:http://deeplearning.net/software/theano/library/tensor/nnet/conv.html#theano.tensor.nnet.conv.conv2d
#激活函數用tanh
#你還可以在model.add(Activation('tanh'))後加上dropout的技巧:model.add(Dropout(0.5))
model.add(Convolution2D(4,5,5,border_mode='valid',input_shape=(1,28,28)))
model.add(Activation('tanh'))


#第二個卷積層,8個卷積核,每個卷積核大小3*3。4表示輸入的特徵圖個數,等於上一層的卷積核個數
#激活函數用tanh
#採用maxpooling,poolsize為(2,2)
model.add(Convolution2D(8,3,3,border_mode='valid'))
model.add(Activation('tanh'))
model.add(MaxPooling2D(pool_size=(2,2)))

#第三個卷積層,16個卷積核,每個卷積核大小3*3
#激活函數用tanh
#採用maxpooling,poolsize為(2,2)
model.add(Convolution2D(16,3,3,border_mode='valid'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))

#全連接層,先將前一層輸出的二維特徵圖flatten為一維的。
#Dense就是隱藏層。16就是上一層輸出的特徵圖個數。4是根據每個卷積層計算出來的:(28-5+1)得到24,(24-3+1)/2得到11,(11-3+1)/2得到4
#全連接有128個神經元節點,初始化方式為normal
model.add(Flatten())
model.add(Dense(128,init='normal'))
model.add(Activation('tanh'))


#Softmax分類,輸出是10類別
model.add(Dense(10,init='normal'))
model.add(Activation('softmax'))


#############
#開始訓練模型
##############
#使用SGD+momentum
#model.compile里的參數loss就是損失函數(目標函數)
sgd=SGD(lr=0.05,decay=1e-6,momentum=0.9,nesterov=True)
model.compile(loss='categorical_crossentropy',optimizer=sgd,metrics=["accuracy"])


#調用fit方法,就是一個訓練過程.訓練的epoch數設為10,batch_size為100.
#數據經過隨機打亂shuffle=True。verbose=1,訓練過程中輸出的信息,0、1、2三種方式都可以,無關緊要。show_accuracy=True,訓練時每一個epoch都輸出accuracy。
#validation_split=0.2,將20%的數據作為驗證集。
model.fit(data,label,batch_size=100,nb_epoch=10,shuffle=True,verbose=1,validation_split=0.2)


"""
#使用dataaugmentation的方法
#一些參數和調用的方法,請看文檔
datagen=ImageDataGenerator(
featurewise_center=True,#setinputmeanto0overthedataset
samplewise_center=False,#seteachsamplemeanto0
featurewise_std_normalization=True,#divideinputsbystdofthedataset
samplewise_std_normalization=False,#divideeachinputbyitsstd
zca_whitening=False,#applyZCAwhitening
rotation_range=20,#(degrees,0to180)
width_shift_range=0.2,#(fractionoftotalwidth)
height_shift_range=0.2,#randomlyshiftimagesvertically(fractionoftotalheight)
horizontal_flip=True,#randomlyflipimages
vertical_flip=False)#randomlyflipimages

#
#(std,mean,)
datagen.fit(data)

foreinrange(nb_epoch):
print('-'*40)
print('Epoch',e)
print('-'*40)
print("Training...")
#
progbar=generic_utils.Progbar(data.shape[0])
forX_batch,Y_batchindatagen.flow(data,label):
loss,accuracy=model.train(X_batch,Y_batch,accuracy=True)
progbar.add(X_batch.shape[0],values=[("trainloss",loss),("accuracy:",accuracy)])

"""


『貳』 什麼是全連接神經網路,怎麼理解「全連接」

1、全連接神經網路解析:對n-1層和n層而言,n-1層的任意一個節點,都和第n層所有節點有連接。即第n層的每個節點在進行計算的時候,激活函數的輸入是n-1層所有節點的加權。

2、全連接的神經網路示意圖:


3、「全連接」是一種不錯的模式,但是網路很大的時候,訓練速度回很慢。部分連接就是認為的切斷某兩個節點直接的連接,這樣訓練時計算量大大減小。

『叄』 構造一個全連接的具有5個神經元但沒有自反饋的遞歸電路

摘要 遞歸神經網路( RNN),是兩種人工神經網路的總稱,一種是 時間遞歸神經網路(recurrent neural network),另一種是 結構遞歸神經網路(recursive neural network)。現在大多數人把recurrent neural network稱作循環神經網路,一般RNNs都指循環神經網路,也就是recurrent neural network。時間遞歸神經網路的神經元間連接構成有向圖。,而結構遞歸神經網路利用相似的神經網路結構遞歸構造更為復雜的深度網路(大多數為無向圖)

『肆』 Hopfield神經網路用python實現講解

神經網路結構具有以下三個特點:

神經元之間全連接,並且為單層神經網路。

每個神經元既是輸入又是輸出,導致得到的權重矩陣相對稱,故可節約計算量。

在輸入的激勵下,其輸出會產生不斷的狀態變化,這個反饋過程會一直反復進行。假如Hopfield神經網路是一個收斂的穩定網路,則這個反饋與迭代的計算過程所產生的變化越來越小,一旦達到了穩定的平衡狀態,Hopfield網路就會輸出一個穩定的恆值。

Hopfield網路可以儲存一組平衡點,使得當給定網路一組初始狀態時,網路通過自行運行而最終收斂於這個設計的平衡點上。當然,根據熱力學上,平衡狀態分為stable state和metastable state, 這兩種狀態在網路的收斂過程中都是非常可能的。

為遞歸型網路,t時刻的狀態與t-1時刻的輸出狀態有關。之後的神經元更新過程也採用的是非同步更新法(Asynchronous)。

Hopfield神經網路用python實現

『伍』 物體識別 機器學習

1、搭建物體識別神經網路,設計好網路的結構;
2、訓練神經網路,優化網路參數;
3、識別新的圖片。

『陸』 汽車發動機開環和閉環的區別

動態系統建模被各領域廣泛應用,例如電動汽車,能源系統,航空航天。我們本文提到動態系統主要是被控對象,對被控對象進行建模是因為我們希望了解這個系統(被控對象)的物理特性以及接受一些外部輸入(力,扭矩,電流等等)時會有什麼樣的動態響應,基於此從而可以更好的給出控制輸入得到我們期望的系統的輸出,以及理解系統的退化或最大化提升系統效率。

這些動態系統的行為是由多物理場復雜的交互作用決定的,因此系統行為和系統響應建模通常需要復雜的第一原理支撐,模擬時也需要大量的計算(例如有限元模型)。

這也是本文的出發點,提供數據驅動(主要介紹深度學習和系統辨識)的模型降階(Reced Order Modeling)提速的方法,通過數據得到具有一定保真度的數據模型,在捕捉到系統動態特性的同時也提升模擬速度。

本文中將涉及多個 demo,數據以及腳本文件,若您感興趣進一步獲取這些鏈接,可以在文末填寫反饋問卷,獲取這些鏈接。

動態系統

動態系統包含狀態空間 S, 時間集 T 和一個映射(規則)來描述狀態隨時間的演變規則 R:S×T→S。例如給定一個時刻 t 的狀態 st ,通過這個規則可以計算後面一個或幾個時刻狀態 st+1=R(st),st+2=R(R(st)) 等等。動態系統通常可以用隨時間變化的方程或方程組來描述。尤其對於連續時間系統,可以通過微分方程來表示。

我們先看一個簡單的常微分系統(ODE), [鏈接1]

其中 y(t) 是系統狀態。例如:一個簡單二自由度線性系統,

其中 A 是一個 2x2 的矩陣。初始條件 x0 = [2; 0], 可以通過求解 ODE 方程得到的相應的二維輸出 x(t),包含兩個狀態,時序和動態圖如下:

圖表 1 系統輸出x(t):

x0 = [2; 0];

A = [-0.1 -1; 1 -0.1];

trueModel = @(t,y) A*y; % 定義系統函數,此處就是一個狀態空間方程

numTimeSteps = 2000;

T = 15;

odeOptions = odeset(RelTol=1.e-7);

t = linspace(0, T, numTimeSteps);

[~, xTrain] = ode45(trueModel, t, x0, odeOptions);

後面(在介紹 Neural ODE 部分)我們會嘗試利用這個系統的數據 xTrain 進行深度學習模型的訓練來得到這個系統的數據代理模型(Surrogate Model),這種思路也可以同樣用於復雜系統。

既然數據驅動,有很多機器學習和深度學習演算法可以用,那動態系統建模有什麼特殊性呢,不是都適用嗎?

目前工程中已經用到很多穩態(靜態)模型。例如在發動機排放標定,通過 DoE 試驗時我們會將發動機維持在不同的穩態工況(轉速恆定,扭矩恆定等等),通過試驗數據建模得到用於標定的穩態數據模型[鏈接2]。

穩態工況下,對於方程(1)這樣一個簡單系統,其中 y(t)' 可以看作 0,到達平衡點,於是 y(t) 和 u(t) 關系恆定,不再在時間維度上與歷史狀態 y(t-1),y(t-2) 等等有關,因此穩態模型針對穩態工況是非常準的。

而在瞬態工況下通常 y(t)' 非零,因此方程(1)在求解系統輸出 y(t) 時不僅由當前時刻的輸入 u(t) 決定,還取決於 y(t-1),y(t-2),u(t-1), u(t-2) 等等,這就是動態系統的特殊性,當前輸出不僅依賴於當前的輸入,還依賴於系統過去的行為(歷史輸入和歷史輸出)。我們在下一篇關於系統辨識的文章中會基於示例詳細說明這一點。

不考慮動態系統,單純從系統建模來說,通常有如下的兩個方向:基於第一原理的和基於數據驅動的。

第一原理建模是領域工程師都比較熟悉的,例如可以使用 M 腳本語言,Simulink 或 Simscape 建模語言從物理原理進行系統模型的創建。

那什麼情況下搭建系統會考慮使用或部分使用數據代理模型(Surrogate Model)?


『柒』 從零開始用Python構建神經網路

從零開始用Python構建神經網路
動機:為了更加深入的理解深度學習,我們將使用 python 語言從頭搭建一個神經網路,而不是使用像 Tensorflow 那樣的封裝好的框架。我認為理解神經網路的內部工作原理,對數據科學家來說至關重要。
這篇文章的內容是我的所學,希望也能對你有所幫助。
神經網路是什麼?
介紹神經網路的文章大多數都會將它和大腦進行類比。如果你沒有深入研究過大腦與神經網路的類比,那麼將神經網路解釋為一種將給定輸入映射為期望輸出的數學關系會更容易理解。
神經網路包括以下組成部分
? 一個輸入層,x
? 任意數量的隱藏層
? 一個輸出層,?
? 每層之間有一組權值和偏置,W and b
? 為隱藏層選擇一種激活函數,σ。在教程中我們使用 Sigmoid 激活函數
下圖展示了 2 層神經網路的結構(注意:我們在計算網路層數時通常排除輸入層)

2 層神經網路的結構
用 Python 可以很容易的構建神經網路類

訓練神經網路
這個網路的輸出 ? 為:

你可能會注意到,在上面的等式中,輸出 ? 是 W 和 b 函數。
因此 W 和 b 的值影響預測的准確率. 所以根據輸入數據對 W 和 b 調優的過程就被成為訓練神經網路。
每步訓練迭代包含以下兩個部分:
? 計算預測結果 ?,這一步稱為前向傳播
? 更新 W 和 b,,這一步成為反向傳播
下面的順序圖展示了這個過程:

前向傳播
正如我們在上圖中看到的,前向傳播只是簡單的計算。對於一個基本的 2 層網路來說,它的輸出是這樣的:

我們在 NeuralNetwork 類中增加一個計算前向傳播的函數。為了簡單起見我們假設偏置 b 為0:

但是我們還需要一個方法來評估預測結果的好壞(即預測值和真實值的誤差)。這就要用到損失函數。
損失函數
常用的損失函數有很多種,根據模型的需求來選擇。在本教程中,我們使用誤差平方和作為損失函數。
誤差平方和是求每個預測值和真實值之間的誤差再求和,這個誤差是他們的差值求平方以便我們觀察誤差的絕對值。
訓練的目標是找到一組 W 和 b,使得損失函數最好小,也即預測值和真實值之間的距離最小。
反向傳播
我們已經度量出了預測的誤差(損失),現在需要找到一種方法來傳播誤差,並以此更新權值和偏置。
為了知道如何適當的調整權值和偏置,我們需要知道損失函數對權值 W 和偏置 b 的導數。
回想微積分中的概念,函數的導數就是函數的斜率。

梯度下降法
如果我們已經求出了導數,我們就可以通過增加或減少導數值來更新權值 W 和偏置 b(參考上圖)。這種方式被稱為梯度下降法。
但是我們不能直接計算損失函數對權值和偏置的導數,因為在損失函數的等式中並沒有顯式的包含他們。因此,我們需要運用鏈式求導發在來幫助計算導數。

鏈式法則用於計算損失函數對 W 和 b 的導數。注意,為了簡單起見。我們只展示了假設網路只有 1 層的偏導數。
這雖然很簡陋,但是我們依然能得到想要的結果—損失函數對權值 W 的導數(斜率),因此我們可以相應的調整權值。
現在我們將反向傳播演算法的函數添加到 Python 代碼中

為了更深入的理解微積分原理和反向傳播中的鏈式求導法則,我強烈推薦 3Blue1Brown 的如下教程:
Youtube:https://youtu.be/tIeHLnjs5U8
整合並完成一個實例
既然我們已經有了包括前向傳播和反向傳播的完整 Python 代碼,那麼就將其應用到一個例子上看看它是如何工作的吧。

神經網路可以通過學習得到函數的權重。而我們僅靠觀察是不太可能得到函數的權重的。
讓我們訓練神經網路進行 1500 次迭代,看看會發生什麼。 注意觀察下面每次迭代的損失函數,我們可以清楚地看到損失函數單調遞減到最小值。這與我們之前介紹的梯度下降法一致。

讓我們看看經過 1500 次迭代後的神經網路的最終預測結果:

經過 1500 次迭代訓練後的預測結果
我們成功了!我們應用前向和方向傳播演算法成功的訓練了神經網路並且預測結果收斂於真實值。
注意預測值和真實值之間存在細微的誤差是允許的。這樣可以防止模型過擬合並且使得神經網路對於未知數據有著更強的泛化能力。
下一步是什麼?
幸運的是我們的學習之旅還沒有結束,仍然有很多關於神經網路和深度學習的內容需要學習。例如:
? 除了 Sigmoid 以外,還可以用哪些激活函數
? 在訓練網路的時候應用學習率
? 在面對圖像分類任務的時候使用卷積神經網路
我很快會寫更多關於這個主題的內容,敬請期待!
最後的想法
我自己也從零開始寫了很多神經網路的代碼
雖然可以使用諸如 Tensorflow 和 Keras 這樣的深度學習框架方便的搭建深層網路而不需要完全理解其內部工作原理。但是我覺得對於有追求的數據科學家來說,理解內部原理是非常有益的。
這種練習對我自己來說已成成為重要的時間投入,希望也能對你有所幫助

『捌』 sklearn神經網路節點數一般選多少

一般從1開始。
因為是全連接神經網路,所以會有很多個參數,參數右上角是下一層對應的網路層數(在吳恩達系列視屏中輸入層不作為一層。
所以右上角是從1開始的,此處是從2開始的),右下角第一個數是下一層神經元的位置,第二個數是前一層神經元的位置。

『玖』 什麼是全連接神經網路怎麼理解「全連接」

1、全連接神經網路解析:對n-1層和n層而言,n-1層的任意一個節點,都和第n層所有節點有連接。即第n層的每個節點在進行計算的時候,激活函數的輸入是n-1層所有節點的加權。

2、全連接的神經網路示意圖:


3、「全連接」是一種不錯的模式,但是網路很大的時候,訓練速度回很慢。部分連接就是認為的切斷某兩個節點直接的連接,這樣訓練時計算量大大減小。

『拾』 怎麼將兩個神經網路com

用numpy。
用numpy實現兩層神經網路,一個全連接ReLU神經網路,一個隱藏層,沒有bias。用來從x預測y,使用L2將cnn和mlp網路進行組合。

閱讀全文

與搭建如圖所示的全連接神經網路相關的資料

熱點內容
網路共享中心沒有網卡 瀏覽:527
電腦無法檢測到網路代理 瀏覽:1376
筆記本電腦一天會用多少流量 瀏覽:595
蘋果電腦整機轉移新機 瀏覽:1380
突然無法連接工作網路 瀏覽:1077
聯通網路怎麼設置才好 瀏覽:1230
小區網路電腦怎麼連接路由器 瀏覽:1054
p1108列印機網路共享 瀏覽:1215
怎麼調節台式電腦護眼 瀏覽:717
深圳天虹蘋果電腦 瀏覽:953
網路總是異常斷開 瀏覽:617
中級配置台式電腦 瀏覽:1012
中國網路安全的戰士 瀏覽:637
同志網站在哪裡 瀏覽:1420
版觀看完整完結免費手機在線 瀏覽:1464
怎樣切換默認數據網路設置 瀏覽:1113
肯德基無線網無法訪問網路 瀏覽:1290
光纖貓怎麼連接不上網路 瀏覽:1496
神武3手游網路連接 瀏覽:969
局網列印機網路共享 瀏覽:1005