導航:首頁 > 異常信息 > 搭建全連接神經網路

搭建全連接神經網路

發布時間:2022-07-24 06:16:50

1. 全連接神經網路參數個數怎麼計算

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

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

2. 卷積神經網路為什麼最後接一個全連接層

在常見的卷積神經網路的最後往往會出現一兩層全連接層,全連接一般會把卷積輸出的二維特徵圖(feature map)轉化成(N*1)一維的一個向量
全連接的目的是什麼呢?因為傳統的端到到的卷積神經網路的輸出都是分類(一般都是一個概率值),也就是幾個類別的概率甚至就是一個數--類別號,那麼全連接層就是高度提純的特徵了,方便交給最後的分類器或者回歸。

但是全連接的參數實在是太多了,你想這張圖里就有20*12*12*100個參數,前面隨便一層卷積,假設卷積核是7*7的,厚度是64,那也才7*7*64,所以現在的趨勢是盡量避免全連接,目前主流的一個方法是全局平均值。也就是最後那一層的feature map(最後一層卷積的輸出結果),直接求平均值。有多少種分類就訓練多少層,這十個數字就是對應的概率或者叫置信度。

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

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

4. 如何用Tensorflow 快速搭建神經網路

在MNIST數據集上,搭建一個簡單神經網路結構,一個包含ReLU單元的非線性化處理的兩層神經網路。在訓練神經網路的時候,使用帶指數衰減的學習率設置、使用正則化來避免過擬合、使用滑動平均模型來使得最終的模型更加健壯。
程序將計算神經網路前向傳播的部分單獨定義一個函數inference,訓練部分定義一個train函數,再定義一個主函數main。

二、分析與改進設計
1. 程序分析改進
第一,計算前向傳播的函數inference中需要將所有的變數以參數的形式傳入函數,當神經網路結構變得更加復雜、參數更多的時候,程序的可讀性將變得非常差。
第二,在程序退出時,訓練好的模型就無法再利用,且大型神經網路的訓練時間都比較長,在訓練過程中需要每隔一段時間保存一次模型訓練的中間結果,這樣如果在訓練過程中程序死機,死機前的最新的模型參數仍能保留,杜絕了時間和資源的浪費。
第三,將訓練和測試分成兩個獨立的程序,將訓練和測試都會用到的前向傳播的過程抽象成單獨的庫函數。這樣就保證了在訓練和預測兩個過程中所調用的前向傳播計算程序是一致的。
2. 改進後程序設計
mnist_inference.py
該文件中定義了神經網路的前向傳播過程,其中的多次用到的weights定義過程又單獨定義成函數。
通過tf.get_variable函數來獲取變數,在神經網路訓練時創建這些變數,在測試時會通過保存的模型載入這些變數的取值,而且可以在變數載入時將滑動平均值重命名。所以可以直接通過同樣的名字在訓練時使用變數自身,在測試時使用變數的滑動平均值。
mnist_train.py
該程序給出了神經網路的完整訓練過程。
mnist_eval.py
在滑動平均模型上做測試。
通過tf.train.get_checkpoint_state(mnist_train.MODEL_SAVE_PATH)獲取最新模型的文件名,實際是獲取checkpoint文件的所有內容。

5. 怎樣用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)])

"""


6. 卷積神經網路用全連接層的參數是怎麼確定的

卷積神經網路用全連接層的參數確定:卷積神經網路與傳統的人臉檢測方法不同,它是通過直接作用於輸入樣本,用樣本來訓練網路並最終實現檢測任務的。

它是非參數型的人臉檢測方法,可以省去傳統方法中建模、參數估計以及參數檢驗、重建模型等的一系列復雜過程。本文針對圖像中任意大小、位置、姿勢、方向、膚色、面部表情和光照條件的人臉。

輸入層

卷積神經網路的輸入層可以處理多維數據,常見地,一維卷積神經網路的輸入層接收一維或二維數組,其中一維數組通常為時間或頻譜采樣;二維數組可能包含多個通道;二維卷積神經網路的輸入層接收二維或三維數組;三維卷積神經網路的輸入層接收四維數組。

由於卷積神經網路在計算機視覺領域應用較廣,因此許多研究在介紹其結構時預先假設了三維輸入數據,即平面上的二維像素點和RGB通道。

7. 什麼是全連接神經網路怎麼理解「全連接」

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

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


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

8. 什麼是全連接神經網路,怎麼理解「全連接」

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

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


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

9. 神經網路控制器怎樣搭建

你先用PID控製得到訓練數據,然後用訓練數據去訓練神經網路,最後能生成一個神經網路控制器,這樣就可以了!

10. 怎樣用python構建一個卷積神經網路

用keras框架較為方便

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

閱讀全文

與搭建全連接神經網路相關的資料

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