單變數線性回歸(二)

2022-06-08 08:39:08 字數 3930 閱讀 4562

本文針對單變數線性回歸(一)中的案例進行拓展延伸

#開始訓練,輪數為epoch,採用sgd優化方法

step = 0 #記錄訓練步數

loss_list = #用於儲存loss值的列表

for epoch in range(train_epochs):

for xs,ys in zip(x_data, y_data):

_, loss=sess.run([optimizer,loss_function], feed_dict=)

# 顯示損失值1oss

# display_step:控制報告的粒度

# 例如,如果display_step 設為2,則將每誠練2個樣本輸出一次損失值

# 與超多數不同,修改display_step 不會更改模型所學習的規律

step += 1

if step % display_step == 0:

print('train epoch:', '%02d' % (epoch+1), 'step: %03d' % (step), 'loss=', ''.format(loss))

b0temp=b.eval(session=sess)

w0temp=w.eval(session=sess)

輸出結果:

圖形化顯示損失值:
plt.plot(loss_list, 'r+')

篩選損失結果

print([x for x in loss_list if x>1]) #篩選出損失列表中大於1的結果

#

相比於lr5.1.py 增加了顯示損失值等內容

import

tensorflow as tf

import

numpy as np

import

matplotlib.pyplot as plt

np.random.seed(5)

x_data = np.linspace(-1, 1, 100)

y_data = 2 * x_data + 1.0 + np.random.randn(*x_data.shape) * 0.4

#plt.scatter(x_data, y_data)

#plt.plot(x_data, 2 * x_data + 1.0, color = 'red', linewidth = 3)

#plt.show()

x = tf.placeholder('

float

', name = 'x'

)y = tf.placeholder('

float

', name = 'y'

)def

model(x, w, b):

return tf.multiply(x, w) +b

w = tf.variable(1.0, name='w0'

)b = tf.variable(0.0 , name='b0'

)pred =model(x, w, b)

train_epochs = 10 #

迭代次數(訓練輪數)

learning_rate = 0.05 #

學習率,設定為經驗值。

display_step = 10 #

控制顯示loss值的粒度

loss_function = tf.reduce_mean(tf.square(y - pred)) #

採用均方差作為損失函式

optimizer = tf.train.gradientdescentoptimizer(learning_rate).minimize(loss_function) #

梯度下降優化器

sess =tf.session()

init =tf.global_variables_initializer()

sess.run(init)

#開始訓練,輪數為epoch,採用sgd優化方法

step = 0 #

記錄訓練步數

loss_list = #

用於儲存loss值的列表

for epoch in

range(train_epochs):

for xs,ys in

zip(x_data, y_data):

_, loss=sess.run([optimizer,loss_function], feed_dict=)

#顯示損失值1oss

#display_step:控制報告的粒度

#例如,如果display_step 設為2,則將每誠練2個樣本輸出一次損失值

#與超多數不同,修改display_step 不會更改模型所學習的規律

step += 1

if step % display_step ==0:

print('

train epoch:

', '

%02d

' % (epoch+1), '

step: %03d

' % (step), '

loss=

', '

'.format(loss))

b0temp=b.eval(session=sess)

w0temp=w.eval(session=sess)

#plt.plot(x_data, w0temp * x_data + b0temp)

#plt.show()

print('

w:', sess.run(w)) #

w的值應在2附近

print('

b:', sess.run(b)) #

b的值應在1附近

print([x for x in loss_list if x>1]) #

篩選出損失列表中大於1的結果

#plt.plot(loss_list, 'r+')

#plt.show()

#plt.scatter(x_data, y_data, label='original data')

#plt.plot(x_data, x_data * sess.run(w) + sess.run(b), label='fitted line', color='r', linewidth=3)

#plt.legend(loc=2) #通過引數loc指定圖例位置

#plt.show()

#進行**

#x_test = 3.21

## predict = sess.run(pred, feed_dict=)

#predict = sess.run(w) * x_test + sess.run(b)

#print("**值:%f" % predict)##

target =2 * x_test +1.0

#print("目標值:%f" % target)

lr5.2 code

在梯度下降法中,批量指的是用於在單次迭代中計算梯度的樣本總數。假定批量是指整個資料集,資料集通常包含很大樣本(數萬甚至數千億),此外,資料集通常包含多個特徵。因此,乙個批量可能相當巨大。如果是超大批量,則單次迭代就可能要花費很長時間進行計算。

隨機梯度下降法(sgd)每次迭代只使用乙個樣本(批量大小為1),如果進行足夠的迭代,sgd也可以發揮作用。「隨機」這一術語表示構成各個批量的乙個樣本都是隨機選擇的

小批量隨機梯度下降法(小批量sgd)是介於全批量迭代與sgd之間的折衷方案。小批量通常包含10-1000個隨機選擇的樣本。小批量sgd可以減少gd中的雜亂樣本數量,但仍然比全批量更高效

單變數線性回歸

參考 模型表示 線性回歸 linear regression 是利用稱為線性回歸方程的最小平方函式對乙個或多個自變數和因變數之間關係進行建模的一種回歸分析。這種函式是乙個或多個稱為回歸係數的模型引數的線性組合。只有乙個自變數的情況稱為簡單回歸,大於乙個自變數情況的叫做多元回歸。詳細描述 之前的房屋交...

單變數線性回歸

線性回歸模型 linear regression model 包括線性假設 linear hypothesis 和平方差代價函式 squared error cost function 字母的含義 m number of training examples 訓練樣本的數量 x input varia...

單變數線性回歸

這是乙個單變數 房子的面積 問題。這是乙個監督學習的問題,對於每乙個資料我們都給出了乙個正確的price。準備工作 在書中他的表示是 h x 0 1x1,它的意思是因為只有乙個變數x1所以稱之為單變數線性回歸。這些都目前看來沒有什麼問題。下一步提出了乙個代價函式的感念,也就是說。每一次 出的誤差都是...