機器學習與Tensorflow(1)——機器學習基本概念、tensorflow實現簡單線性回歸
阿新 • • 發佈:2018-12-20
gradient 計算 gre alt ssi date upd tput test
一、機器學習基本概念
1.訓練集和測試集
訓練集(training set/data)/訓練樣例(training examples): 用來進行訓練,也就是產生模型或者算法的數據集
測試集(testing set/data)/測試樣例 (testing examples):用來專門進行測試已經學習好的模型或者算法的數據集
2.特征向量
特征向量(features/feature vector):屬性的集合,通常用一個向量來表示,附屬於一個實例
3.分類問題和回歸問題
分類 (classification): 目標標記為類別型(離散型)數據(category)
回歸(regression): 目標標記為連續性數值 (continuous numeric value)
4.機器學習分類
有監督學習(supervised learning): 訓練集有類別標記(class label)
無監督學習(unsupervised learning): 無類別標記(class label)
半監督學習(semi-supervised learning):有類別標記的訓練集 + 無標記的訓練集
二、簡單線性回歸
基本概念:
- 簡單線性回歸包含一個自變量(x)和一個因變量(y)
- 被用來進行預測的變量叫做: 自變量(independent variable), x, 輸入(input)
- 被預測的變量叫做:因變量(dependent variable), y, 輸出(output)
- 以上兩個變量的關系用一條直線來模擬
三、Tensorflow基本概念
1.使用圖(graphs)來表示計算任務
2.在被稱之為會話(Session)的上下文(context)中執行圖
3.使用tensor(張量)表示數據
4.通過變量(Variable)來維護狀態
5.使用feed和fetch可以為任何的操作賦值或者從其中獲取數據
總結
- Tensorflow是一個編程系統,使用圖(graphs)來表示計算任務,
- 圖(graphs)中的節點稱之為op(operation)
- 一個op獲得0個或者多個tensor(張量),執行計算,產生0個或者多個tensor。
- tensor看作是一個n維的數組或者列表。
- 圖必須在會話(Session)裏被啟動。
#通過示意圖來理解其中含義:
#通過程序來理解其中含義:
#這兩句代碼是防止警告(The TensorFlow library wasn‘t compiled to use AVX2 instructions, but these are available on your machine and could speed up CPU computations.) import os os.environ[‘TF_CPP_MIN_LOG_LEVEL‘] = ‘2‘ import tensorflow as tf m1 = tf.constant([[3,3]]) #創建一個常量op m2 = tf.constant([[2],[3]]) #創建一個常量op product =tf.matmul(m1,m2) #創建一個矩陣乘法op,並將m1和m2傳入 sess = tf.Session() #定義一個會話,啟動默認圖 result = sess.run(product) #調用sess的run方法來執行矩陣乘法op,run(product)觸發了圖中的3個op print(result) sess.close #關閉會話 #執行結果 [[15]]
#上述程序關於啟動默認圖有一個簡單寫法
sess = tf.Session() result = sess.run(product) print(result) sess.close
等價表達方式:
with tf.Session() as sess: result = sess.run(product) print(result)
四、Tensorflow變量介紹
#變量介紹 import os os.environ[‘TF_CPP_MIN_LOG_LEVEL‘] = ‘2‘ import tensorflow as tf x = tf.Variable([1,2]) #創建一個變量op a = tf.constant([3,3]) #創建一個常量op sub_m = tf.subtract(x,a) #創建一個減法op add_m = tf.add(x,sub_m) #創建一個加法op init = tf.global_variables_initializer() #變量初始化(要想使用變量,必須寫這句代碼) with tf.Session() as sess: #定義一個會話,啟動默認圖 sess.run(init) #觸發變量op print(sess.run(sub_m)) print(sess.run(add_m))
# 要想使用變量,必須進行變量初始化
init = tf.global_variables_initializer()
#利用程序實現自增1
import os os.environ[‘TF_CPP_MIN_LOG_LEVEL‘] = ‘2‘ import tensorflow as tf state = tf.Variable(0,name=‘counter‘) #創建一個變量op,並初始化為0 new_value = tf.add(state,1) #創建一個op,作用是使state加1 update = tf.assign(state,new_value) #賦值op init = tf.global_variables_initializer() #變量初始化 with tf.Session() as sess: sess.run(init) print(sess.run(state)) for _ in range(5): sess.run(update) print(sess.run(state)) #執行結果 0 1 2 3 4 5
五、Tensorflow(fetch和feed)
fetch:在會話中可以運行多個op
#舉例理解 import os os.environ[‘TF_CPP_MIN_LOG_LEVEL‘] = ‘2‘ import tensorflow as tf input1 = tf.constant(3.0) input2 = tf.constant(2.0) input3 = tf.constant(5.0) add_m = tf.add(input2,input3) mul = tf.multiply(input1,add_m) with tf.Session() as sess: result = sess.run([mul,add_m]) #運行多個op print(result) #執行結果 [21.0, 7.0]
feed:feed的數據以字典的形式傳入
import os os.environ[‘TF_CPP_MIN_LOG_LEVEL‘] = ‘2‘ import tensorflow as tf input1 = tf.placeholder(tf.float32) input2 = tf.placeholder(tf.float32) output = tf.multiply(input1,input2) with tf.Session() as sess: print(sess.run(output,feed_dict={input1:[8.],input2:[2.]})) #feed:feed的數據以字典的形式傳入
六、利用tensorflow 實現簡單線性回歸
import os os.environ[‘TF_CPP_MIN_LOG_LEVEL‘] = ‘2‘ import tensorflow as tf import numpy as np #使用numpy生成100個隨機點 x_data = np.random.rand(100) y_data = x_data * 0.1 + 0.2 #構造一個線性模型 b = tf.Variable(0.0) k = tf.Variable(0.0) y = k * x_data + b #二次代價函數 loss = tf.reduce_mean(tf.square(y_data-y)) #定義一個梯度下降算法來進行訓練的優化器 optimizer = tf.train.GradientDescentOptimizer(0.2) #最小化代價函數 train = optimizer.minimize(loss) #初始化變量 init = tf.global_variables_initializer() with tf.Session() as sess: sess.run(init) for step in range(201): sess.run(train) if step % 20 == 0: print(step,sess.run([k,b])) #執行結果 0 [0.057367731, 0.1013036] 20 [0.10604427, 0.19655526] 40 [0.10355464, 0.19797418] 60 [0.10209047, 0.19880863] 80 [0.10122941, 0.19929935] 100 [0.10072301, 0.19958796] 120 [0.10042521, 0.19975767] 140 [0.10025007, 0.19985747] 160 [0.10014708, 0.19991617] 180 [0.10008651, 0.1999507] 200 [0.10005087, 0.19997101]
#訓練200次後,k的值為0.10005087,接近0.1;b的值為0.19997101,接近0.2.
機器學習與Tensorflow(1)——機器學習基本概念、tensorflow實現簡單線性回歸