TensorFlow實現(xiàn)簡單線性回歸
本文實例為大家分享了TensorFlow實現(xiàn)簡單線性回歸的具體代碼,供大家參考,具體內(nèi)容如下
簡單的一元線性回歸
一元線性回歸公式:
其中x是特征:[x1,x2,x3,…,xn,]T
w是權(quán)重,b是偏置值
代碼實現(xiàn)
導(dǎo)入必須的包
import tensorflow as tf import matplotlib.pyplot as plt import numpy as np import os # 屏蔽warning以下的日志信息 os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
產(chǎn)生模擬數(shù)據(jù)
def generate_data(): ? ? x = tf.constant(np.array([i for i in range(0, 100, 5)]).reshape(-1, 1), tf.float32) ? ? y = tf.add(tf.matmul(x, [[1.3]]) + 1, tf.random_normal([20, 1], stddev=30)) ? ? return x, y
x是100行1列的數(shù)據(jù),tf.matmul是矩陣相乘,所以權(quán)值設(shè)置成二維的。
設(shè)置的w是1.3, b是1
實現(xiàn)回歸
def myregression(): ? ? """ ? ? 自實現(xiàn)線性回歸 ? ? :return: ? ? """ ? ? x, y = generate_data() ? ? # ? ? 建立模型 ?y = x * w + b ? ? # w 1x1的二維數(shù)據(jù) ? ? w = tf.Variable(tf.random_normal([1, 1], mean=0.0, stddev=1.0), name='weight_a') ? ? b = tf.Variable(0.0, name='bias_b') ? ? y_predict = tf.matmul(x, a) + b ? ? # 建立損失函數(shù) ? ? loss = tf.reduce_mean(tf.square(y_predict - y)) ? ?? ? ? # 訓(xùn)練 ? ? train_op = tf.train.GradientDescentOptimizer(0.1).minimize(loss=loss) ? ? # 初始化全局變量 ? ? init_op = tf.global_variables_initializer() ?? ? ? with tf.Session() as sess: ? ? ? ? sess.run(init_op) ? ? ? ? print('初始的權(quán)重:%f偏置值:%f' % (a.eval(), b.eval())) ? ?? ? ? ? ? # 訓(xùn)練優(yōu)化 ? ? ? ? for i in range(1, 100): ? ? ? ? ? ? sess.run(train_op) ? ? ? ? ? ? print('第%d次優(yōu)化的權(quán)重:%f偏置值:%f' % (i, a.eval(), b.eval())) ? ? ? ? # 顯示回歸效果 ? ? ? ? show_img(x.eval(), y.eval(), y_predict.eval())
使用matplotlib查看回歸效果
def show_img(x, y, y_pre): ? ? plt.scatter(x, y) ? ? plt.plot(x, y_pre) ? ? plt.show()
完整代碼
import tensorflow as tf import matplotlib.pyplot as plt import numpy as np import os os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' def generate_data(): ? ? x = tf.constant(np.array([i for i in range(0, 100, 5)]).reshape(-1, 1), tf.float32) ? ? y = tf.add(tf.matmul(x, [[1.3]]) + 1, tf.random_normal([20, 1], stddev=30)) ? ? return x, y def myregression(): ? ? """ ? ? 自實現(xiàn)線性回歸 ? ? :return: ? ? """ ? ? x, y = generate_data() ? ? # 建立模型 ?y = x * w + b ? ? w = tf.Variable(tf.random_normal([1, 1], mean=0.0, stddev=1.0), name='weight_a') ? ? b = tf.Variable(0.0, name='bias_b') ? ? y_predict = tf.matmul(x, w) + b ? ? # 建立損失函數(shù) ? ? loss = tf.reduce_mean(tf.square(y_predict - y)) ? ? # 訓(xùn)練 ? ? train_op = tf.train.GradientDescentOptimizer(0.0001).minimize(loss=loss) ? ? init_op = tf.global_variables_initializer() ? ? with tf.Session() as sess: ? ? ? ? sess.run(init_op) ? ? ? ? print('初始的權(quán)重:%f偏置值:%f' % (w.eval(), b.eval())) ? ? ? ? # 訓(xùn)練優(yōu)化 ? ? ? ? for i in range(1, 35000): ? ? ? ? ? ? sess.run(train_op) ? ? ? ? ? ? print('第%d次優(yōu)化的權(quán)重:%f偏置值:%f' % (i, w.eval(), b.eval())) ? ? ? ? show_img(x.eval(), y.eval(), y_predict.eval()) def show_img(x, y, y_pre): ? ? plt.scatter(x, y) ? ? plt.plot(x, y_pre) ? ? plt.show() if __name__ == '__main__': ? ? myregression()
看看訓(xùn)練的結(jié)果(因為數(shù)據(jù)是隨機產(chǎn)生的,每次的訓(xùn)練結(jié)果都會不同,可適當(dāng)調(diào)節(jié)梯度下降的學(xué)習(xí)率和訓(xùn)練步數(shù))
35000次的訓(xùn)練結(jié)果
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python 實現(xiàn)3種回歸模型(Linear Regression,Lasso,Ridge)的示例
這篇文章主要介紹了Python 實現(xiàn) 3 種回歸模型(Linear Regression,Lasso,Ridge)的示例,幫助大家更好的進行機器學(xué)習(xí),感興趣的朋友可以了解下2020-10-10tensorflow模型文件(ckpt)轉(zhuǎn)pb文件的方法(不知道輸出節(jié)點名)
這篇文章主要介紹了tensorflow模型文件(ckpt)轉(zhuǎn)pb文件(不知道輸出節(jié)點名),本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04python 3調(diào)用百度OCR API實現(xiàn)剪貼板文字識別
這篇文章主要為大家詳細介紹了python 3調(diào)用百度OCR API實現(xiàn)剪貼板文字識別,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-09-09pyqt5 使用setStyleSheet設(shè)置單元格的邊框樣式操作
這篇文章主要介紹了pyqt5 使用setStyleSheet設(shè)置單元格的邊框樣式操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03解決python3中自定義wsgi函數(shù),make_server函數(shù)報錯的問題
下面小編就為大家分享一篇解決python3中自定義wsgi函數(shù),make_server函數(shù)報錯的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-11-11Python中輸入若干整數(shù)以逗號間隔實現(xiàn)統(tǒng)計每個整數(shù)出現(xiàn)次數(shù)
這篇文章主要介紹了Python中輸入若干整數(shù)以逗號間隔實現(xiàn)統(tǒng)計每個整數(shù)出現(xiàn)次數(shù)的相關(guān)資料,需要的小伙伴可以參考一下,希望對你有所幫助2022-04-04