Tensorflow,線性模型,梯度下降
TF基本
import tensorflow as tf
Tensorflow對於機器學習模型的實現分為兩個階段:
1. 構建階段:搭建計算模型
2. 計算階段:執行計算
舉個簡單示例,我們要計算一個函式,首先需要將這個計算模型搭建起來。
Tensorflow本身提供了視覺化的套件叫做Tensorboard,在模型搭建之前,我們先將Tensorboard設定好。
from datetime import datetime
now=datetime.utcnow().strftime("%Y%m%d%H%M%S")
root_logdir="tf_logs" #設定根目錄為當前目錄下的tf_logs資料夾
logdir="{}/run-{}/".format(root_logdir,now) #資料夾名加入時間戳
模型的搭建包括:
- 變數的設定與初始值設定
- 變數之間的運算關係
tf.reset_default_graph() #重置圖
x=tf.Variable(1,name="x") #初始值為1,名為"x"的變數
y=tf.Variable(2,name="y") #初始值為2,名為"y"的變數
f=x*x*y+y+2 #變數間的運算關係
file_writer=tf.summary .FileWriter(logdir,tf.get_default_graph()) #將預設圖寫入檔案
然後啟動一個會話,在會話中進行計算:
with tf.Session() as sess:
x.initializer.run()
y.initializer.run()
result=f.eval()
file_writer.close() #關閉寫入器
print(result)
輸出6。
需要注意的是上述程式碼中,x,y均是作為tf變數存在,tf變數有如下特點:
- 需要設定初始值
- 在計算之前需要在會話中進行初始化
- 變數的生命週期開始於初始化,與會話一同結束
因為我們在上述程式碼中儲存了圖,所以可以在Tensorboard中觀察。在控制檯中鍵入tensorboard --logdir C:\Users\qq435\Desktop\tf_logs
啟動Tensorboard服務,在瀏覽器中鍵入http://daya-workstation:6006/
進入Tensorboard的頁面。
上述模型(方程式)的計算圖如下圖所示:
Tensorflow對於模型的實現既然分為構建階段和計算階段,那麼理所當然地,構建階段是不進行計算的,計算任務均在計算階段進行。
線性模型
這節我們使用TF搭建線性模型對加州房價資料進行處理。
前置模組與設定
import tensorflow
import numpy as np
from datetime import datetime
root_logdir="tf_logs" #設定根目錄為當前目錄下的tf_logs資料夾
獲取資料
from sklearn.datasets import fetch_california_housing
housing=fetch_california_housing() #每一個樣本為行向量
m,n=housing.data.shape #m為樣本數
計算模型搭建
正規方程
利用正規方程優化線性模型。
housing_data_plus_bias=np.c_[np.ones((m,1)),housing.data] #在資料第一列前加上偏置項1
tf.reset_default_graph()
X=tf.constant(housing_data_plus_bias,dtype=tf.float32,name="X") #常量值不需要初始化
Y=tf.constant(housing.target.reshape(-1,1),dtype=tf.float32,name="Y")
XT=tf.transpose(X)
W=tf.matmul(tf.matmul(tf.matrix_inverse(tf.matmul(XT,X)),XT),Y) #正規方程
now=datetime.utcnow().strftime("%Y%m%d%H%M%S")
logdir="{}/run-{}/".format(root_logdir,now) #資料夾名加入時間戳
file_writer=tf.summary.FileWriter(logdir,tf.get_default_graph())
with tf.Session() as sess:
W_val=W.eval()
file_writer.close()
print(W_val)
以上程式碼所生成的計算圖如下圖所示:
梯度下降法
以MSE作為損失函式,使用梯度下降法來優化線性模型。
在使用梯度下降法時,預先對資料進行縮放處理能夠加快收斂,使用sklearn中的預處理包來進行縮放。
from sklearn.preprocessing import StandardScaler
#資料縮放
scaler = StandardScaler()
scaled_housing_data = scaler.fit_transform(housing.data)
scaled_housing_data_plus_bias = np.c_[np.ones((m, 1)), scaled_housing_data]
在搭建模型之前,先介紹一種Tensorflow中的新型別:placeholder。placeholder在Tensorboard中表現為一個佔位節點,其在計算階段需要輸入資料才能進行計算,否則報錯。
使用tf搭建模型的慣用方法是將輸入資料X與資料標籤Y通過placeholder來實現,然後在計算階段對X、Y輸入相應的資料與標籤即可。具體做法見程式碼。
在使用梯度下降法時,我們可以繪製出loss-epoch學習曲線,Tensorboard中提供了非常便捷的曲線視覺化功能。下述兩段程式碼都將MSE與epoch寫入到了Tensorboard檔案中以供視覺化。
batch梯度下降
#構建計算圖
tf.reset_default_graph()
n_epochs=1000
learning_rate=0.01
X=tf.placeholder(dtype=tf.float32,name="X")
Y=tf.placeholder(dtype=tf.float32,name="Y")
W=tf.Variable(tf.random_uniform([n+1,1],-1,1),name="W") #因為X第一列加了偏置項,所以W的形狀對應的需要加1
Y_pre=tf.matmul(X,W,name="prediction")
#整合節點
with tf.name_scope("loss") as scope:
error=Y_pre-Y
mse=tf.reduce_mean(tf.square(error),name="mse")
optimizer=tf.train.GradientDescentOptimizer(learning_rate=learning_rate) #設定優化器
training_op=optimizer.minimize(mse) #優化目標
#tensorboard設定
mse_summary=tf.summary.scalar('MSE',mse)
now=datetime.utcnow().strftime("%Y%m%d%H%M%S")
logdir="{}/run-{}/".format(root_logdir,now) #資料夾名加入時間戳
file_writer=tf.summary.FileWriter(logdir,tf.get_default_graph())
with tf.Session() as sess:
W.initializer.run()
for epoch in range(n_epochs):
if epoch%10==0:
#計算過程需要對placeholder給資料
summary_str=mse_summary.eval(feed_dict={X:scaled_housing_data_plus_bias,Y:housing.target.reshape(-1,1)})
file_writer.add_summary(summary_str,epoch)
sess.run(training_op,feed_dict={X:scaled_housing_data_plus_bias,Y:housing.target.reshape(-1,1)}) #給資料
W_val=W.eval()
print(W_val)
file_writer.close()
計算圖如下圖所示:
學習曲線如圖所示:
mini-batch梯度下降
#構建計算圖
tf.reset_default_graph()
n_epochs=10
learning_rate=0.01
X=tf.placeholder(dtype=tf.float32,name="X")
Y=tf.placeholder(dtype=tf.float32,name="Y")
W=tf.Variable(tf.random_uniform([n+1,1],-1,1),name="W")
batch_size=100
n_batches=int(np.ceil(m/batch_size))
#隨機取batch
def fetch_batch(epoch,batch_index,batch_size):
np.random.seed(epoch * n_batches + batch_index)
indices = np.random.randint(m, size=batch_size)
X_batch = scaled_housing_data_plus_bias[indices]
Y_batch = housing.target.reshape(-1, 1)[indices]
return X_batch,Y_batch
Y_pre=tf.matmul(X,W,name="prediction")
#整合節點
with tf.name_scope("loss") as scope:
error=Y_pre-Y
mse=tf.reduce_mean(tf.square(error),name="mse")
optimizer=tf.train.GradientDescentOptimizer(learning_rate=learning_rate) #設定優化器
training_op=optimizer.minimize(mse) #優化目標
#tensorboard設定
mse_summary=tf.summary.scalar('MSE',mse)
now=datetime.utcnow().strftime("%Y%m%d%H%M%S")
logdir="{}/run-{}/".format(root_logdir,now) #資料夾名加入時間戳
file_writer=tf.summary.FileWriter(logdir,tf.get_default_graph())
with tf.Session() as sess:
W.initializer.run()
for epoch in range(n_epochs):
for batch_index in range(n_batches):
X_batch,Y_batch=fetch_batch(epoch,batch_index,batch_size)
if batch_index%10==0:
summary_str=mse_summary.eval(feed_dict={X:X_batch,Y:Y_batch}) #給資料
file_writer.add_summary(summary_str,epoch*batch_size+batch_index)
sess.run(training_op,feed_dict={X:X_batch,Y:Y_batch}) #給資料
W_val=W.eval()
print(W_val)
file_writer.close()
mini-batch梯度下降的計算圖與batch梯度下降是一樣的,因為沒有改變計算過程,只是將資料分批多次輸入。
學習曲線如下圖所示:
相關推薦
Tensorflow,線性模型,梯度下降
TF基本 import tensorflow as tf Tensorflow對於機器學習模型的實現分為兩個階段: 1. 構建階段:搭建計算模型 2. 計算階段:執行計算 舉個簡單示例,我們要計算一個函式f=x2y+y+2f=x2y+y+2,首先需
2.線性模型——梯度下降
梯度: 對於一個標量,也就是一維,梯度就是 + 或者 - 。平面二維向量,梯度也是一個向量,這個向量的方向就是梯度的方向。同理 NNN維,所有梯度也可以沿著變數分解成為相應的梯度分量。 損失函式:L(f)=∑i=1N(yi^−yi)2=∑i=1N(w⃗⋅x⃗+
[教程10]TensorFlow線性模型教程
了解 air into tip 必須 輸出 ros 自己的 rmi [教程10]TensorFlow線性模型教程 在本教程中,我們將使用TensorFlow中的tf.estimator API來解決二進制分類問題:根據年齡,性別,教育和職業(特征)等個人的普查數據,我們將嘗
線性迴歸 梯度下降演算法 overshot the minimun現象
在梯度下降演算法中,理論上有一個步長steep需要我們設定。steep的設定非常重要,如果設定不當,我們的梯度下降演算法可能就得不到我們想要的結果。 一:步長不當導致的問題 如果步長太短,很顯然我們訓練集訓練的時間就會加長。如果訓練集比較多,這也是致命的。 如果步長太長,可能出現Oversho
線性迴歸梯度下降 Octave
首先對一堆樣本點我們假設目標函式為: 在Gradient Descent Algorithm中,我們利用不斷推導得到兩個對此演算法非常重要的公式,一個是J(θ)是代價函式: 使用偏導數的方式使得theta的值逐步取得滿足當前代價函式的最小值,
線性迴歸梯度下降
import numpy as npimport matplotlib.pyplot as pltnp.random.seed(666)x = 2 * np.random.random(size=100)y = x*3. + 4. + np.random.normal(size=100)X = x.resha
機器學習--線性迴歸--梯度下降的實現
## 機器學習--線性單元迴歸--單變數梯度下降的實現 ### 【線性迴歸】 ```text 如果要用一句話來解釋線性迴歸是什麼的話,那麼我的理解是這樣子的: **線性迴歸,是從大量的資料中找出最優的線性(y=ax+b)擬合函式,通過資料確定函式中的未知引數,進而進行後續操作(預測) **迴歸的概念是從統
tensorflow實現svm多分類 iris 3分類——本質上在使用梯度下降法求解線性回歸(loss是定制的而已)
points near plot asi atm lob put matplot ive # Multi-class (Nonlinear) SVM Example # # This function wll illustrate how to # implement
【機器學習】基於梯度下降法的自線性迴歸模型
回顧 關於梯度下降法 以及線性迴歸的介紹,我們知道了: 線性迴歸的損失函式為: J (
線性迴歸模型採用梯度下降演算法求最優解
本人學習人工智慧之深度學習已有一段時間,第一個機器學習演算法就是梯度下降演算法,本部落格將詳細闡述線性迴歸模型採用梯度下降演算法求得最優解。 本文將從運用以下流程圖講解SGD: 1、線性迴歸模型 2、代價函式 3、使用梯度下降最小化代價函式 第一部分:
線性迴歸、梯度下降演算法與 tensorflow
舉個栗子 考慮一個二手房交易記錄資料集. 已知房屋面積,臥室數量和交易價格: 根據這個資料集,要求我們估算當前某個給定房屋價格. 我們應該怎麼做? 線性迴歸 迴歸就是根據已知資料來預測另一個數值型資料的目標值. 假設特徵和結果滿足線性關係: h(x
TensorFlow 梯度下降線性迴歸並可視化
import tensorflow as tf import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D lr = 0.1 real_params = [1.2, 2.5] # 真
Tensorflow環境下 線性迴歸(梯度下降)的練手例項(完整原始碼+說明)
Tensorflow 入門篇-最小二乘法的線性迴歸演算法 本文將藉助Tensorflow來實現最小二乘法的線性迴歸演算法。 大體的思路:首先生成隨機紊亂的資料集,然後構建線性迴歸的Graph,最後在Session中迭代train器,得到擬合的引數w和b,最後畫出擬
使用梯度下降演算法來求解線性迴歸模型
廢話 求解線性迴歸模型的解析解可以直接使用公式,這節可以使用梯度下降演算法來求解這類問題的優化問題: 原理的東西不想說了 ,總之機器學習的一般思路都是: 構建模型(也就是你想建立什麼樣的預測函式
對數幾率回歸法(梯度下降法,隨機梯度下降與牛頓法)與線性判別法(LDA)
3.1 初始 屬性 author alt closed sta lose cnblogs 本文主要使用了對數幾率回歸法與線性判別法(LDA)對數據集(西瓜3.0)進行分類。其中在對數幾率回歸法中,求解最優權重W時,分別使用梯度下降法,隨機梯度下降與牛頓法。 代碼如下:
機器學習入門:線性回歸及梯度下降
想要 oom 考試 erl text local oca 希望 觀察 機器學習入門:線性回歸及梯度下降 本文會講到: (1)線性回歸的定義 (2)單變量線性回歸 (3)cost function:評價線性回歸是否擬合訓練集的方法 (4)梯度下
線性回歸的梯度下降
初始 應用 連接 alt wid png 分享 sub 線性回歸 Note: [At 6:15 "h(x) = -900 - 0.1x" should be "h(x) = 900 - 0.1x"] 當具體應用於線性回歸的情況下,可以推導出一種新的梯度下降方程。我們可以
Tensorflow 梯度下降實例
ons 梯度 div ati x11 code sce oba ble # coding: utf-8 # #### 假設我們要最小化函數 $y=x^2$, 選擇初始點 $x_0=5$ # #### 1. 學習率為1的時候,x在5和-5之間震蕩。 # In[1
ng機器學習視頻筆記(一)——線性回歸、代價函數、梯度下降基礎
info 而且 wid esc 二維 radi pan 圖形 clas ng機器學習視頻筆記(一) ——線性回歸、代價函數、梯度下降基礎 (轉載請附上本文鏈接——linhxx) 一、線性回歸 線性回歸是監督學習中的重要算法,其主要目的在於用一個函數表
【吳恩達機器學習】學習筆記——2.7第一個學習算法=線性回歸+梯度下降
com 梯度 .com 局部最優 alt ima 實現 梯度下降 width 梯度下降算法: 線性回歸模型: 線性假設: 平方差成本函數: 將各個公式代入,對θ0、θ1分別求偏導得: 再將偏