1. 程式人生 > >Tensorflow-模組化神經網路

Tensorflow-模組化神經網路

以模組化的方式來定義一個NN

inference():

定義前向傳播過程,即FP過程。因為tensorflow的NN構建可以理解為實際上前期工作都是在定義一張計算圖,只有到session處才是開始圖的運算。所以前向過程反映了整個NN的框架,包括多少層,有哪些層,各個層由哪些引數,使用什麼啟用函式都是在這個inference函式中完成的。

最終返回的是前向傳播FP的結果,即輸入通過前向傳播NN的輸出結果logits。

注意,這裡前向的函式能傳遞的引數是有限的。因為本身其就不是一個用於整個NN自定義的通用的函式。其更多的是對一個給定的NN進行一些結構引數的配置。也就是說,對於一個inference函式,其對應的NN的結構從型別上來說是在這個函式的內部確定下來的,並不能作為引數進行傳遞,而傳遞的引數應該是一些反應整個NN結構大小的引數,例如第幾層有幾個神經節點等。

loss():

定義了用於NN的訓練的loss function。包括資料項,正則項等等,最終返回的就是一個loss_func。可以有cross_entropy等形式

train():

定義了訓練過程,包括訓練過程中需要的一些操作(tensorflow在session之前的操作實際上可以理解為是不停地向計算圖中加入操作,最後在session中完成這些操作的運算)。所以包括加入優化器Optimizer等操作,最後返回train_step。在這裡,實際上相當於定義了反向傳播梯度運算。這都是有tensorflow提供api去完成的。

evaluation():

定義了準確率的計算的操作:accuracy。最終返回的是測試的準確率。

placeholder_inputs():

定義了各個輸入的佔位符,用於資料集和標籤的傳遞。用於最終的NN的訓練。

define_constants():

定義各種NN所需要的常數。例如BATCH_SIZE、TRAINING_STEPS等等

=======================以上幾個函式都只是向計算圖中加入操作=======================

==============================並沒有真正地去運算===============================

run_training():

在這個函式中,完成training的過程的運算。即在這裡使用session會話。

main():

主函式。一切操作從主函式而起。這是為了和過程性程式設計的思想匹配。python是解釋性語言,所以實際上並沒有什麼主函式之分,在這裡強行按照過程性程式設計的思想規範化程式程式碼。一切都從main而起。最後還需要定義一個主函式入口。