神經網路常見概念總結
阿新 • • 發佈:2018-12-06
啟用函式:將神經網路上一層的輸入,經過神經網路層的非線性變換轉換後,通過啟用函式,得到輸出。常見的啟用函式包括:sigmoid, tanh, relu等。https://blog.csdn.net/u013250416/article/details/80991831
為什麼要引入非線性啟用函式
如果不使用非線性啟用函式,啟用函式本質上相當於f(x)=ax+b。在這種情況下,神經網路每一層的輸出都是上層輸入的線性函式。此時,不管神經網路有多少層,輸出與輸入都是線性關係,與沒有隱層是一樣的。也就相當於最原始的感知機,連最基本的異或問題都無法解決,更別說其他更復雜的非線性問題。
損失函式:度量神經網路的輸出的預測值,與實際值之間的差距的一種方式。常見的損失函式包括:最小二乘損失函式、交叉熵損失函式、迴歸中使用的smooth L1損失函式等。
優化函式:也就是如何把損失值從神經網路的最外層傳遞到最前面。如最基礎的梯度下降演算法,隨機梯度下降演算法,批量梯度下降演算法,帶動量的梯度下降演算法,Adagrad,Adadelta,Adam等:https://blog.csdn.net/u013250416/article/details/81090059
梯度下降法:反向求導,調整w和b權重值,使得損失函式
手寫數字mnist資料集分類程式碼示例:
# coding: utf-8 # In[2]: import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data # In[3]: #載入資料集 mnist = input_data.read_data_sets("MNIST_data",one_hot=True) #每個批次的大小 batch_size = 100 # 一次性將100張圖片放入這個神經網路中訓練(以矩陣的形式放入) #計算一共有多少個批次 n_batch = mnist.train.num_examples // batch_sizeView Code#定義兩個placeholder x = tf.placeholder(tf.float32,[None,784]) # 按批次傳入值,那麼none就會變成100 y = tf.placeholder(tf.float32,[None,10]) # y是標籤 #建立一個簡單的神經網路(只有輸入和輸出層,沒有隱藏層)。784個輸入和10個輸出神經元 W = tf.Variable(tf.zeros([784,10])) b = tf.Variable(tf.zeros([10])) prediction = tf.nn.softmax(tf.matmul(x,W)+b) #二次代價函式 loss = tf.reduce_mean(tf.square(y-prediction)) #使用梯度下降法 train_step = tf.train.GradientDescentOptimizer(0.2).minimize(loss) #初始化變數 init = tf.global_variables_initializer() #結果存放在一個布林型列表中 correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(prediction,1))#(equal函式的作用是比較其內的2個引數,相同返回true,不同返回false)argmax返回一維張量中最大的值所在的位置 #求準確率 accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))#cast函式的作用是型別轉換,把布林型轉換為32位浮點型(true變為1.0,false變為0.0) with tf.Session() as sess: sess.run(init) for epoch in range(21):#執行完一次這個for迴圈,相當於把訓練集的圖片計算了二十一次 for batch in range(n_batch):#執行完一次這個for迴圈,相當於把訓練集的圖片計算了一次 batch_xs,batch_ys = mnist.train.next_batch(batch_size)#獲得每個批次的100張圖片,圖片資料存在xs裡,標籤存在ys裡 sess.run(train_step,feed_dict={x:batch_xs,y:batch_ys})#獲得一個批次的資料進行一次訓練,再獲得下一個批次的資料再訓練······ acc = sess.run(accuracy,feed_dict={x:mnist.test.images,y:mnist.test.labels})#feed傳進去的是測試集的圖片以及對應標籤 print("Iter " + str(epoch) + ",Testing Accuracy " + str(acc))#每訓練一次,列印準確率 # In[ ]: