1. 程式人生 > >[吃藥深度學習隨筆] 損失函數

[吃藥深度學習隨筆] 損失函數

global flow SQ oss 網絡層 訓練 dom AD atm

神經元模型

技術分享圖片

技術分享圖片

常用的激活函數(激勵函數):

技術分享圖片

神經網絡(NN)復雜度:多用神經網絡層數和神經網絡參數個數來表示

  層數 = 隱藏層層數+1個輸出層

  參數個數 = 總W(權重) + 總B(偏置)

  比如

  技術分享圖片

  技術分享圖片

損失函數(loss):預測值y 和已知答案y_ 的差距

  神經網絡優化目標:使損失函數loss 達到最小

  常用loss計算方法:均方誤差MSE

  公式:技術分享圖片

  在TensorFlow中代碼:

 loss_MSE = tf.reduce_mean(tf.square(y-y_))

例子:

技術分享圖片

import tensorflow as tf
import numpy as np BATCH_SIZE = 8 SEED = 23333 #X1和X2在影響Y的關系系數 Px1 = 3 Px2 = 2 rdm = np.random.RandomState(SEED) X = rdm.rand(320, 2) #此處用關系系數加權得到Y Y_ = [[Px1*x1+Px2*x2+(rdm.rand()/10.0 -0.05)]for (x1, x2) in X] #定義神經網絡的輸入、參數和輸出,定義前向傳播過程 x = tf.placeholder(tf.float32, shape=(None, 2)) y_ = tf.placeholder(tf.float32, shape=(None, 1)) w1
= tf.Variable(tf.random_normal([2, 1], stddev=1)) y = tf.matmul(x, w1) #定義損失函數和反向傳播方法 loss_mse = tf.reduce_mean(tf.square(y_ - y)) train_step = tf.train.GradientDescentOptimizer(0.01).minimize(loss_mse) #生成會話 訓練 with tf.Session() as sess: init_op = tf.global_variables_initializer() sess.run(init_op)
for i in range(10000): start = (i*BATCH_SIZE) % 320 end = start + BATCH_SIZE sess.run(train_step, feed_dict={x: X[start:end], y_: Y_[start:end]}) if i % 500 == 0: print ("w1:", sess.run(w1), "loss:", sess.run(loss_mse, feed_dict={x: X[start:end], y_: Y_[start:end]}))

最終得到接近於開始設定的Px1 = 3 Px2 =2

w1: [[2.9960208]
 [1.9995174]] loss: 0.00053528405

[吃藥深度學習隨筆] 損失函數