graph1=tf.graph()
with graph1.as_default():
x=tf.constant([[2.0,1.0]],dtype=tf.float32)
y=tf.constant([0.0],dtype=tf.float32)
梯度下降法解線性方程就是不斷輸入係數x=[2,1]和結果y=[3],作為訓練資料來訓練引數w1, w2, b,所以先給出訓練資料:
with graph1.as_default():
w=tf.variable(tf.constant([[1.0],[2.0]],dtype=tf.float32),name='w',trainable=true)
b=tf.variable(tf.constant([0,0],dtype=tf.float32),name='b',trainable=true)
y_train=tf.matmul(x,w)+b
with graph1.as_default():
loss=tf.reduce_mean((y-y_train)**2)
lr=0.05
with graph1.as_default():
global_step=tf.variable(0,trainable=false)
learning_rate=tf.compat.v1.train.exponential_decay(learning_rate=lr,
global_step=global_step,
decay_rate=0.9,
decay_steps=100
)optimmizer=tf.compat.v1.train.gradientdescentoptimizer(learning_rate=learning_rate)
以下用兩種方法來進行梯度下降,但都不是用現成的optimizer.minimize(loss)方法,而是用tensorflow提供的兩種符號求偏導的方法來分部實現:
生成優化器:
with graph1.as_default():
# 1, 函式列表ys裡的每乙個函式對xs中的每乙個變數求偏導,
# 返回乙個梯度張量的列表
# 而非compute_gradients函式那樣返回乙個tuple列表
var_list=tf.compat.v1.trainable_variables()
# 獲得單獨的梯度張量列表
grad_list=tf.gradients(ys=loss,xs=var_list)
print(grad_list)
# 梯度(雅可比矩陣)各個元素的平方和
# 梯度逐步迭代到全為0張量時,達到極值
grad_sses = [tf.reduce_sum(var**2) for var in grad_list]
# 2, 進行bp演算法
[, ]訓練
with tf.compat.v1.session(graph=graph1) as sess:sess.run(w.initializer)
sess.run(b.initializer)
sess.run(global_step.initializer)
grad_sses_list=
steps=10
for i in range(steps+1):
print(grad_sses_list[i])
print(sess.run(y_train))
print("###")
sess.run(train)
[320.0, 32.0]作圖[[4. 4.]]
###[64.799995, 6.4799995]
[[1.8 1.8]]
###[13.155804, 1.3155804]
[[0.81104267 0.81104267]]
###[2.6777744, 0.26777744]
[[0.3659081 0.3659081]]
###[0.5464407, 0.05464407]
[[0.16529378 0.16529378]]
###[0.11179476, 0.011179476]
[[0.07476455 0.07476455]]
###[0.02293007, 0.002293007]
[[0.03386006 0.03386006]]
###[0.0047151307, 0.00047151305]
[[0.01535437 0.01535437]]
###[0.0009720302, 9.7203025e-05]
[[0.00697148 0.00697148]]
###[0.00020089658, 2.0089657e-05]
[[0.00316936 0.00316936]]
###[4.1624262e-05, 4.162426e-06]
[[0.00144264 0.00144264]]
###
Tensorflow 2 0 梯度計算
tensorflow 提供了gradienttape函式,實現梯度的計算。gradienttape 意思為梯度帶 persistent 預設是false.如果是false,那麼gradient 函式最多只能呼叫一次。反之可以呼叫多次,watch accessed variables 預設值是true...
tensorflow2 0 維度變換
a tf.random.normal 4,28,28,3 a 1 tf.reshape a,4,784,3 shape 1 a 1 tf.reshape a,4,1,3 shape 和1等價 a 2 tf.reshape a,4,784 3 shape 2 a 2 tf.reshape a,4,1 ...
TensorFlow實戰系列5 梯度下降演算法
本文將介紹優化訓練神經網路模型的一些常用方法,並給出使用tensorflow 實現深度學習的最佳實踐樣例 為了更好的介紹優化神經網路訓練過程,我們將首先介紹優化神經網路的演算法 梯度下降演算法。然後在後面的部分中,我們將圍繞該演算法中的一些元素來優化模型訓練過程。梯度下降演算法 梯度下降演算法主要用...