1. 程式人生 > >神經網路優化方法

神經網路優化方法

  • 損失函式優化

交叉熵損失函式

  • 學習率優化
  • 指數衰減變化
  • LEARNING_RATE_BASE = 0.1 #最初學習率
      7 LEARNING_RATE_DECAY = 0.99 #學習率衰減率
      8 LEARNING_RATE_STEP = 1  #喂入多少輪BATCH_SIZE後,更新一次學習率,一般設為:>    總樣本數/BATCH_SIZE
      9
     10 #運行了幾輪BATCH_SIZE的計數器,初值給0, 設為不被訓練
     11 global_step = tf.Variable(0, trainable=False)
     12 #定義指數下降學習率
     13 learning_rate = tf.train.exponential_decay(LEARNING_RATE_BASE, global_step,     LEARNING_RATE_STEP, LEARNING_RATE_DECAY, staircase=True)

coding:utf-8
  2 #設損失函式 loss=(w+1)^2, 令w初值是常數10。反向傳播就是求最優w,即求最小loss    對應的w值
  3 #使用指數衰減的學習率,在迭代初期得到較高的下降速度,可以在較小的訓練輪數下>    取得更有收斂度。
  4 import tensorflow as tf
  5
  6 LEARNING_RATE_BASE = 0.1 #最初學習率
  7 LEARNING_RATE_DECAY = 0.99 #學習率衰減率
  8 LEARNING_RATE_STEP = 1  #喂入多少輪BATCH_SIZE後,更新一次學習率,一般設為:>    總樣本數/BATCH_SIZE
  9
 10 #運行了幾輪BATCH_SIZE的計數器,初值給0, 設為不被訓練
 11 global_step = tf.Variable(0, trainable=False)
 12 #定義指數下降學習率
 13 learning_rate = tf.train.exponential_decay(LEARNING_RATE_BASE, global_step,     LEARNING_RATE_STEP, LEARNING_RATE_DECAY, staircase=True)
 14 #定義待優化引數,初值給10
 15 w = tf.Variable(tf.constant(5, dtype=tf.float32))
 16 #定義損失函式loss
 17 loss = tf.square(w+1)
 18 #定義反向傳播方法
train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss,     global_step=global_step)
 20 #生成會話,訓練40輪
 21 with tf.Session() as sess:
 22     init_op=tf.global_variables_initializer()
 23     sess.run(init_op)
 24     for i in range(40):
 25         sess.run(train_step)
 26         learning_rate_val = sess.run(learning_rate)
 27         global_step_val = sess.run(global_step)
 28         w_val = sess.run(w)
 29         loss_val = sess.run(loss)
 30         print "After %s steps: global_step is %f, w is %f, learning rate is     %f, loss is %f" % (i, global_step_val, w_val, learning_rate_val, loss_val)