神經網路優化方法
- 損失函式優化
交叉熵損失函式
- 學習率優化
- 指數衰減變化
- 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)