Tensorflow上使用簡(jiǎn)單神經(jīng)網(wǎng)絡(luò)

Tensorflow上使用簡(jiǎn)單神經(jīng)網(wǎng)絡(luò)

當(dāng)我們回頭去看Tensorflow線(xiàn)性模型的簡(jiǎn)單應(yīng)用時(shí)候,你會(huì)發(fā)現(xiàn),他的模型如下:

這長(zhǎng)得多像神經(jīng)網(wǎng)絡(luò)啊....沒(méi)錯(cuò),你可以理解這就是一個(gè)簡(jiǎn)化版本的升級(jí)網(wǎng)絡(luò).
看了一下之前的思路,我們只需要在模型選擇上動(dòng)刀子就好.

1.引用庫(kù)
2.加載一系列的數(shù)字圖片
3.Tensorflow圖構(gòu)造
  3.1 模型選擇
    3.1.1 喂入數(shù)據(jù)準(zhǔn)備
    3.1.2 等待優(yōu)化的參數(shù)
    3.1.3 構(gòu)造初步的模型
  3.2 等待優(yōu)化的損失函數(shù)
  3.3 創(chuàng)建優(yōu)化器
  3.4 評(píng)價(jià)性能
4.Run
  4.1 初始化變量
  4.2 裝載數(shù)據(jù)源
  4.3 開(kāi)始run訓(xùn)練模型
  4.4 訓(xùn)練之后,對(duì)模型進(jìn)行評(píng)價(jià)

3.1 模型選擇

我們打算使用一個(gè)三層的神經(jīng)網(wǎng)絡(luò),其中包含一個(gè)輸入層(具有784個(gè)節(jié)點(diǎn),這是由于圖片數(shù)據(jù)是28*28=784),一個(gè)隱藏層(500個(gè)節(jié)點(diǎn)),輸出層(10個(gè)節(jié)點(diǎn))

INPUT_NODE = 784
OUTPUT_NODE = 10
LAYER1_NODE = 500
3.1.1 喂入數(shù)據(jù)準(zhǔn)備

這個(gè)步驟目前來(lái)看不需要變更

3.1.2 等待優(yōu)化的參數(shù)

我們需要優(yōu)化的參數(shù)是層和層之間的權(quán)重以及bias,
所以在 輸入層和hidden layer之間會(huì)有weight_1, bias1需要關(guān)注;hidden layer和輸出層之間是weight_2, bias2
但是升級(jí)網(wǎng)絡(luò)的擬合能力實(shí)在太強(qiáng)大了,為了防止參數(shù)過(guò)多,學(xué)習(xí)過(guò)了,出現(xiàn)過(guò)擬合的情況,我們對(duì)參數(shù)進(jìn)行了正則化.所以我們按照下面的方式來(lái)創(chuàng)建權(quán)重

REGULARAZTION_RATE = 0.0001
def get_weight_variable(shape, regularizer):
   weights = tf.get_variable("weights", shape,initializer=tf.truncated_normal_initializer(stddev=0.1)) #生成截?cái)嗾龖B(tài)分布的隨機(jī)數(shù),標(biāo)準(zhǔn)差為0.1
   if regularizer != None:
       tf.add_to_collection('losses', regularizer(weights))
   return weights
3.1.3 構(gòu)造初步的模型
#define the forward network
def inference(input_tensor, regularizer):
    with tf.variable_scope('layer1'):#聲明第一層神經(jīng)網(wǎng)絡(luò)的變量并完成前向傳播過(guò)程
        weights = get_weight_variable([INPUT_NODE, LAYER1_NODE], regularizer)
        biases = tf.get_variable("biases", [LAYER1_NODE], initializer=tf.constant_initializer(0.0))
        layer1 = tf.nn.relu(tf.matmul(input_tensor, weights) + biases)  #tf.nn.relu是作為激活函數(shù)

    with tf.variable_scope('layer2'):#聲明第二層神經(jīng)網(wǎng)絡(luò)的變量并完成前向傳播過(guò)程
        weights = get_weight_variable([LAYER1_NODE, OUTPUT_NODE], regularizer)
        biases = tf.get_variable("biases", [OUTPUT_NODE], initializer=tf.constant_initializer(0.0))
        layer2 = tf.matmul(layer1, weights) + biases
    return layer2
regularizer = tf.contrib.layers.l2_regularizer(REGULARAZTION_RATE)  
logits = inference(x, None) #這個(gè)地方暫時(shí)傳入None,不考慮正則化

對(duì)應(yīng)代碼

Refer

tensorflow中的關(guān)鍵字global_step使用
什么是 L1 L2 正規(guī)化 正則化 Regularization (深度學(xué)習(xí) deep learning)
使用TensorFlow實(shí)現(xiàn)的神經(jīng)網(wǎng)絡(luò)進(jìn)行MNIST手寫(xiě)體數(shù)字識(shí)別

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容