1. 程式人生 > >機器學習與Tensorflow(1)——機器學習基本概念、tensorflow實現簡單線性回歸

機器學習與Tensorflow(1)——機器學習基本概念、tensorflow實現簡單線性回歸

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實現簡單線性回歸