Tensorflow之單變數線性回歸問題的解決方法

2021-09-10 10:10:08 字數 4868 閱讀 4888

跟著網易雲課堂上面的免費公開課深度學習應用開發tensorflow實踐學習,學到線性回歸這裡感覺有很多需要總結,梳理記錄下階段性學習內容。

題目:通過生**工資料集合,基於tensorflow實現y=2*x+1線性回歸

使用tensorflow進行演算法設計與訓練的核心步驟

(1)準備資料

(2)構建模型

(3)訓練模型

(4)進行**

#線性回歸問題

#******************一、準備資料:**********************

#生**工資料集

# 在jupter中,使用matplotlib顯示影象需要設定為inline模式,否則不會顯示影象

%matplotlib inline

import matplotlib.pyplot as plt #載入matplotlib,用於繪圖

import numpy as np #載入numpy,numpy是python進行科學計算時的基礎模組

import tensorflow as tf #載入tensorflow

#設定隨機種子。訓練之後結果隨機,隨機種子起到固定初始值的作用,為了訓練之後得到一樣的結果

np.random.seed(5)

#直接採用np生成等差數列的方法,生成100個點,每個點的取值在-1~1之間

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

# y = 2x +1 + 雜訊,其中,雜訊的維度與x_data一致

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

#***********************二、構建線性模型*************************

#定義訓練資料的佔位符,x是特徵,y是標籤值

x = tf.placeholder("float",name= "x")

y = tf.placeholder("float",name = "y")

#定義模型函式

def model(x,w,b):

return tf.multiply(x,w) + b

#定義模型結構

#tensorflow變數的宣告函式是tf.variable。tf.variable的作用是儲存和更新函式,變數的初始值可以是隨機數、常數,或是通過其他變數的初始值計算得到

#構建線性函式的斜率,變數w

w = tf.variable(1.0,name = "w0")

#構建線性函式的截距,變數b

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

#pred是**值,前向計算

pred = model(x,w,b)

#************************三、訓練模型*******************************

#設定訓練引數

#迭代次數(訓練輪數)

train_epochs = 10

#學習率

learning_rate = 0.05

#定義優化器、最小損失函式

#定義損失函式,損失函式用於描述**值與真實值之間的差別,從而指導模型收斂方向。常見損失函式:均方差、交叉熵

#採用均方差作為損失函式

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

#定義優化器

#定義優化器optimizer,初始化乙個gradientdescentoptimizer(梯度下降優化器)

#設定學習率和優化目標:最小化損失

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

#建立會話

#宣告會話

sess = tf.session()

#變數初始化

#在真正執行計算前,需要將所有變數初始化。通過tf.global_variables_initializer函式可實現對所有變數的初始化

init = tf.global_variables_initializer()

sess.run(init)

#迭代訓練

#模型訓練階段,設定迭代輪次,每次通過將樣本逐個輸入模型,進行梯度下降優化操作。每輪迭代後,繪製出模型曲線

#開始訓練,輪次為epoch,採用sgd隨機梯度下降優化方法

for epoch in range(train_epochs):

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

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

b0temp = b.eval(session=sess)

w0temp = w.eval(session=sess)

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

#結果檢視。當訓練完成後,列印檢視引數。資料每次執行都可能會有所不同

print("w:",sess.run(w)) #w的值應該在2附近

print("b:",sess.run(b)) #b的值應該在1附近

#結果視覺化

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指定圖例位置

#*********************四、利用學習到的模型進行*********************

x_test = 3.21

predict = sess.run(pred,feed_dict=)

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

target = 2 * x_test + 1.0

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

題目二:通過生**工資料集合,基於tensorflow實現y=3.1234*x+2.98線性回歸

# 在jupter中,使用matplotlib顯示影象需要設定為inline模式,否則不會顯示影象

%matplotlib inline

import matplotlib.pyplot as plt #載入matplotlib

import numpy as np #載入numpy

import tensorflow as tf #載入tensorflow

#設定隨機種子

np.random.seed(5)

#直接採用np生成等差數列的方法,生成100個點,每個點的取值在-1~1之間

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

# y = 3.1234x +2.98 + 雜訊, 其中, 雜訊的唯度與x_data一致

y_data = 3.1234*x_data + 2.98 + np.random.randn(*x_data.shape)*0.4

x = tf.placeholder("float",name = "x")

y = tf.placeholder("float",name = "y")

def model(x,w,b):

return tf.multiply(x,w)+b

# 構建線性函式的斜率, 變數w

w = tf.variable(1.0,name="w")

# 構建線性函式的截距,變數b

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

#pred是**值,前向計算

pred = model(x,w,b)

# 迭代次數(訓練輪數)

train_epochs = 10

# 學習率

learning_rate = 0.05

# 採用均方差作為損失函式

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隨機梯度下降優化方法

#zip為組裝,x,y都為一維陣列. zip 把x,y組裝起來也為一維陣列,每個單元為(x,y)

for epoch in range(train_epochs):

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

#優化器給了乙個下劃線,loss_function 給了loss

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

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指定圖例位置

print("w: ", sess.run(w)) #w的值應該在3.1234附近

print("b: ",sess.run(b)) #b的值應該在2.98附近

tensorflow實戰 單變數線性回歸

encoding utf 8 import matplotlib.pyplot as plt import tensorflow as tf import numpy as np trx np.linspace 1,1,101 在1和1之間建立乙個101點的線性空間 注意 在元組 trx.shape...

tensorflow 綜合學習系列例項之線性回歸

tf是現在比較流行的深度學習框架之一,從今天開始我會把tf由簡入深到進行講解,不對的地方還請大家諒解,因為tf的版本現在更新的速度很快,不同的版本對應的api也是有所區別的,所以需要找到對應的版本,後面我所講解的例項都是基於1.2版本 在使用tf的一般正常幾個核心步驟如下 1 首先定義引數,一般使用...

Tensor flow小案例 01單變數線性回歸

import tensorflow as tf import numpy as np import matplotlib.pyplot as plt 源資料 從1到10,分為100等分 data x np.linspace 1,10,100 噪音,使資料更加真實,均值為0,標準差為1.5 noise...