tensorflow2 0 梯度下降的實現

2021-09-29 02:08:29 字數 3004 閱讀 7728

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 實現深度學習的最佳實踐樣例 為了更好的介紹優化神經網路訓練過程,我們將首先介紹優化神經網路的演算法 梯度下降演算法。然後在後面的部分中,我們將圍繞該演算法中的一些元素來優化模型訓練過程。梯度下降演算法 梯度下降演算法主要用...