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,不考慮正則化
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í)別