tf.train.momentumoptimizer(learning_rate, momentum, use_locking=
false
, name=
'momentum'
).minimize(loss)
learning_rate:學習率,資料型別為tensor或float。momentum:動量引數,momentum指數加權的超引數,資料型別為tensor或float。
use_locking:若為true,則鎖定更新。 name:優化器名字。
tf.train.rmspropoptimizer(learning_rate, decay=
0.9, momentum=
0.0, epsilon=1e-
10, use_locking=
false
, name=
'rmsprop'
).minimize(loss)
learning_rate:學習率,資料型別為tensor或float。 decay:rmsprop平方加權的超引數,歷史梯度的衰減量。momentum:乙個標量tensor,我也不知道這個引數幹嘛的。
epsilon:極小的值,防止分母為0。
use_locking:若為true,則鎖定更新。 name:優化器名字。
tf.train.adamoptimizer(learning_rate=
0.001
, beta1=
0.9, beta2=
0.999
, epsilon=1e-
08, use_locking=
false
, name=
'adam'
).minimize(loss)
learning_rate:學習率,資料型別為tensor或float。beta1:momentum指數加權的超引數。
beta2:rmsprop平方加權的超引數。 epsilon:極小的值,防止分母為0。 use_locking:若為true,則鎖定更新。
name:優化器名字。
import tensorflow as tf
import numpy as np
#創造資料集
x_data=np.linspace(-1
,1,10000
).reshape(
10000,1
)y_data=
2*x_data**2+
3#佔位符
x_p=tf.placeholder(tf.float32)
y_p=tf.placeholder(tf.float32)
#定義第乙個隱藏層layer1,輸入為x有5個神經元,無啟用函式
weights1=tf.variable(tf.ones([1
,5])
)biases1=tf.variable(tf.zeros([1
,5])
+0.001
)input1=tf.matmul(x_p,weights1)
+biases1
#定義輸出層,輸入為input1,啟用函式為tahn
weights2=tf.variable(tf.random_normal([5
,1])
)biases2=tf.variable(tf.zeros([1
,5])
+0.001
)prediction=tf.nn.tanh(tf.matmul(input1,weights2)
+biases2)
#定義損失函式,loss=均方差+正則化項
loss=tf.reduce_mean(tf.square(y_p-prediction)
)#定義優化方式為梯度下降
gradient=tf.train.gradientdescentoptimizer(
0.1)
.minimize(loss)
momentum=tf.train.momentumoptimizer(
0.1,
0.9)
.minimize(loss)
rmsprop=tf.train.rmspropoptimizer(
0.1,
0.9)
.minimize(loss)
adam=tf.train.adamoptimizer(
0.001
,0.9
,0.999
).minimize(loss)
init=tf.global_variables_initializer(
)with tf.session(
)as sess:
sess.run(init)
#普通梯度訓練200次,每隔10次輸出一次loss
print
('\nloss for gradient:'
)for i in
range
(200):
sess.run(gradient,feed_dict=
)if i %9==
0:print
(sess.run(loss,feed_dict=))
print
('\nloss for momentum:'
)# momentum梯度訓練200次,每隔10次輸出一次loss
for i in
range
(200):
sess.run(momentum, feed_dict=
)if i %9==
0:print
(sess.run(loss, feed_dict=))
print
('\nloss for rmsprop:'
)# rmsprop梯度訓練200次,每隔10次輸出一次loss
for i in
range
(200):
sess.run(rmsprop, feed_dict=
)if i %9==
0:print
(sess.run(loss, feed_dict=))
print
('\nloss for adam:'
)# adam梯度訓練200次,每隔10次輸出一次loss
for i in
range
(200):
sess.run(adam, feed_dict=
)if i %9==
0:print
(sess.run(loss, feed_dict=
))
tensorflow常用優化器總結
反向傳播演算法和梯度下降演算法用來調整神經網路中引數的取值,梯度下降演算法主要用於優化單個引數的取值,反向傳播演算法給出了高效的方式在所有引數上使用梯度下降演算法,來使得神經網路模型的損失函式盡可能小。tensorflow提供了多種方式實現反向傳播和梯度下降過程,通用的方式為 tf.train.gr...
TensorFlow三種常用的優化器
目前tensorflow支援11種不同的經典優化器 參考tensorflow api tf.train文件 下面重點介紹 tf.train.gradientdescentoptimizer tf.train.momentumoptimizer tf.train.adamoptimizer 這個優化器...
tensorflow中的優化函式
gradientdescentoptimizer adagradoptimizer adagraddaoptimizer momentumoptimizer adamoptimizer ftrloptimizer rmspropoptimizer 主要有以上幾種 用法 tf.gradientdesc...