新的算法理論不斷湧現的同時,各種深度學習框架也不斷出現在人們視野,比如Torch,Caffe等等。TensorFlow是Google開發的第二代機器學習係統,於2015年底開源,成為了新一代流行的機器學習的算法框架。這一章節美女直播全婐APP免费下载將tensorFlow怎麽實現深度神經網絡(DNN)。深度神經網絡(DNNs)是擁有多層感知器的架構,用來解決複雜的學習問題。
DNN的基本結構
神經網絡是基於感知機的擴展,而DNN可以理解為有很多隱藏層的神經網絡。多層神經網絡和深度神經網絡DNN其實也是指的一個東西,DNN有時也叫做多層感知機(Multi-Layer perceptron,MLP)。
從DNN按不同層的位置劃分,DNN內部的神經網絡層可以分為三類,輸入層,隱藏層和輸出層,如下圖示例,一般來說第一層是輸入層,最後一層是輸出層,而中間的層數都是隱藏層。

層與層之間是全連接的,也就是說,第i層的任意一個神經元一定與第i+1層的任意一個神經元相連。雖然DNN看起來很複雜,但是從小的局部模型來說,還是和感知機一樣,即一個線性關係Z=Wi*Xi+B加上一個激活函數。DNN的參數定義:


從DNN按不同層的位置劃分,DNN內部的神經網絡層可以分為三類,輸入層,隱藏層和輸出層,如下圖示例,一般來說第一層是輸入層,最後一層是輸出層,而中間的層數都是隱藏層。
層與層之間是全連接的,也就是說,第i層的任意一個神經元一定與第i+1層的任意一個神經元相連。雖然DNN看起來很複雜,但是從小的局部模型來說,還是和感知機一樣,即一個線性關係Z=Wi*Xi+B加上一個激活函數。DNN的參數定義:
DNN前向傳播算法數學原理
假設選擇的激活函數是sigma(z),隱藏層和輸出層的輸出值為a,則對於下圖的三層DNN,利用和感知機一樣的思路,美女直播全婐APP免费下载可以利用上一層的輸出計算下一層的輸出,也就是所謂的DNN前向傳播算法。


上麵可以看出,使用代數法一個個的表示輸出比較複雜,而如果使用矩陣法則比較的簡潔。假設第l−1層共有m個神經元,而第l層共有n個神經元,則第l層的線性係數w組成了一個n×m的矩陣W。第l層的偏倚b組成了一個n的向量b ,第l-1層的輸出a組成了一個m的向量a,第l層的未激活前線性輸出z組成了一個 n的向量z ,第l層的輸出a組成了一個n的向量a。用矩陣法表示,第l層的輸出為:

上麵可以看出,使用代數法一個個的表示輸出比較複雜,而如果使用矩陣法則比較的簡潔。假設第l−1層共有m個神經元,而第l層共有n個神經元,則第l層的線性係數w組成了一個n×m的矩陣W。第l層的偏倚b組成了一個n的向量b ,第l-1層的輸出a組成了一個m的向量a,第l層的未激活前線性輸出z組成了一個 n的向量z ,第l層的輸出a組成了一個n的向量a。用矩陣法表示,第l層的輸出為:
DNN前向傳播算法
所謂的DNN前向傳播算法就是利用若幹個權重係數矩陣W,偏倚向量b來和輸入值向量x進行一係列線性運算和激活運算,從輸入層開始,一層層的向後計算,一直到運算到輸出層,得到輸出結果為值。
輸入: 總層數L,所有隱藏層和輸出層對應的矩陣W,偏倚向量b,輸入值向量x
輸出:輸出層的輸出。

輸入: 總層數L,所有隱藏層和輸出層對應的矩陣W,偏倚向量b,輸入值向量x
輸出:輸出層的輸出。
DNN反向傳播算法
在進行DNN反向傳播算法前,美女直播全婐APP免费下载需要選擇一個損失函數,來度量訓練樣本計算出的輸出和真實的訓練樣本輸出之間的損失。DNN可選擇的損失函數有不少,為了專注算法,這裏使用最常見的均方差來度量損失。即對於每個樣本,美女直播全婐APP免费下载期望最小化下式:

損失函數有了,用梯度下降法迭代求解每一層的w,b。
首先是輸出層第 L 層。注意到輸出層的W,b滿足下式:

對於輸出層的參數,損失函數變為:

求解W,b的梯度:



由於梯度下降法有批量(Batch),小批量(mini-Batch),隨機三個變種,為了簡化描述,這裏美女直播全婐APP免费下载以最基本的批量梯度下降法為例來描述反向傳播算法。實際上在業界使用最多的是mini-Batch的梯度下降法。

損失函數有了,用梯度下降法迭代求解每一層的w,b。
首先是輸出層第 L 層。注意到輸出層的W,b滿足下式:
對於輸出層的參數,損失函數變為:
求解W,b的梯度:
由於梯度下降法有批量(Batch),小批量(mini-Batch),隨機三個變種,為了簡化描述,這裏美女直播全婐APP免费下载以最基本的批量梯度下降法為例來描述反向傳播算法。實際上在業界使用最多的是mini-Batch的梯度下降法。
DNN代碼
import input_data
mnist = input_data.read_data_sets("/tmp/data/", one_hot=True)import tensorflow as tf# Parameters
learning_rate = 0.001
training_iters = 200000
batch_size = 64
display_step = 20# Network Parameters
n_input = 784 # MNIST data input (img shape: 28*28)
n_classes = 10 # MNIST total classes (0-9 digits)
dropout = 0.8 # Dropout, probability to keep units# tf Graph input
x = tf.placeholder(tf.float32, [None, n_input])
y = tf.placeholder(tf.float32, [None, n_classes])
keep_prob = tf.placeholder(tf.float32) # dropout (keep probability)
def init_weights(shape):
return tf.Variable(tf.random_normal(shape, stddev=0.01))
# Create custom model
def conv2d(name, l_input, w, b):
return tf.nn.relu(tf.nn.bias_add(tf.nn.conv2d(l_input, w, strides=[1, 1, 1, 1], padding='SAME'),b), name=name)def max_pool(name, l_input, k):
return tf.nn.max_pool(l_input, ksize=[1, k, k, 1], strides=[1, k, k, 1], padding='SAME', name=name)def norm(name, l_input, lsize=4):
return tf.nn.lrn(l_input, lsize, bias=1.0, alpha=0.001 / 9.0, beta=0.75, name=name)def dnn(_X, _weights, _biases, _dropout):
# Reshape input picture _X = tf.nn.dropout(_X, _dropout)#//這裏可以讓dropout都不同 我就一樣了
d1 = tf.nn.relu(tf.nn.bias_add(tf.matmul(_X,_weights['wd1']),_biases['bd1']), name="d1") d2x = tf.nn.dropout(d1, _dropout)
d2 = tf.nn.relu(tf.nn.bias_add(tf.matmul(d2x,_weights['wd2']),_biases['bd2']), name="d2") #dense1 = tf.nn.relu(tf.matmul(dense1, _weights['wd1']) + _biases['bd1'], name='fc1') # Relu activation #dense2 = tf.nn.relu(tf.matmul(dense1, _weights['wd2']) + _biases['bd2'], name='fc2') # Relu activation
dout =tf.nn.dropout(d2,_dropout)
# Output, class prediction
out = tf.matmul(dout, _weights['out']) + _biases['out']
return out# Store layers weight & bias
weights = {
'wd1': tf.Variable(tf.random_normal([784,600], stddev=0.01)),
'wd2': tf.Variable(tf.random_normal([600,480], stddev=0.01)),
'out': tf.Variable(tf.random_normal([480, 10]))
}
biases = {
'bd1': tf.Variable(tf.random_normal([600])),
'bd2': tf.Variable(tf.random_normal([480])),
'out': tf.Variable(tf.random_normal([10])),
}# Construct model
pred = dnn(x, weights, biases, keep_prob)# Define loss and optimizer
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(pred, y))
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)# evalsuate model
correct_pred = tf.equal(tf.argmax(pred,1), tf.argmax(y,1))
accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))# Initializing the variables
init = tf.initialize_all_variables()# Launch the graph
with tf.Session() as sess:
sess.run(init) step = 1
# Keep training until reach max iterations
while step * batch_size < training_iters:
batch_xs, batch_ys = mnist.train.next_batch(batch_size)
# Fit training using batch data
sess.run(optimizer, feed_dict={x: batch_xs, y: batch_ys, keep_prob: dropout})
if step % display_step == 0:
# Calculate batch accuracy
acc = sess.run(accuracy, feed_dict={x: batch_xs, y: batch_ys, keep_prob: 1.})
# Calculate batch loss
loss = sess.run(cost, feed_dict={x: batch_xs, y: batch_ys, keep_prob: 1.})
print "Iter " + str(step*batch_size) + ", Minibatch Loss= " + "{:.6f}".format(loss) + ", Training Accuracy= " + "{:.5f}".format(acc) step += 1
print "Optimization Finished!"
# Calculate accuracy for 256 mnist test images
print "Testing Accuracy:", sess.run(accuracy, feed_dict={x: mnist.test.images[:256], y: mnist.test.labels[:256], keep_prob: 1.})星空人工智能美女福利导航網 倡導尊重與保護知識產權。如發現本站文章存在版權等問題,煩請30天內提供版權疑問、身份證明、版權證明、聯係方式等發郵件至1851688011@qq.com美女直播全婐APP免费下载將及時溝通與處理。!:首頁 > 新聞 » DNN深度神經網絡的學習與實現