TensorFlow學習記錄--2.運行方式及基礎概念

一 TensorFLow運作模式及概念

運作模式

  • 1.tensorflow是用python先構建一個圖,然後通過外部運算優化得到結果
  • 2.向模型不斷喂入數據,然後給出要不斷優化的對象loss,根據loss的走勢不斷優化模型得到結果

概念

  • 1.用python或者其他語言構建一個圖 graph
  • 2.圖需要在會話session中運行
  • 3.variable變量,tensor張量,operation op爲計算節點,即輸入tensor產生tensor
  • 4.feed給圖添加數據,fetch獲取數據

二 例子

1. 平面擬合

  • 1.喂入一些數據點,y = W1 * x1_data + W2*x2_data + b,其中已知x1_data、x2_data和y,喂入數據後,給出損失函數(模型得到的結果和真實結果的差值的信息),通過不斷優化損失函數最後能給出這個模型的參數w1,w2,b(amazing!!!)。

代碼及結果

每1000步輸出模型w,b,以及損失函數loss的值
最後輸出最終的結果

#-*-coding:utf-8-*- 
import tensorflow as tf
import numpy as np

# Create 100 phony x, y data points in NumPy, y = x * 0.1 + 0.3
x1_data = np.random.rand(100).astype(np.float32)
x2_data = np.random.rand(100).astype(np.float32)
y_data = x1_data * 10 + x2_data * 5 + 3 + tf.random_uniform([100], -0.1, 0.1)

# Try to find values for W and b that compute y_data = W * x_data + b
# (We know that W should be 0.1 and b 0.3, but TensorFlow will
# figure that out for us.)

# note: W b and y just statement/container  before initialization
W1 = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
W2 = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
b = tf.Variable(tf.zeros([1]))
y = W1 * x1_data + W2*x2_data + b

# Minimize the mean squared errors.
loss = tf.reduce_mean(tf.square(y - y_data))
optimizer = tf.train.AdagradOptimizer(0.6)
train = optimizer.minimize(loss)


# Before starting, initialize the variables.  We will 'run' this first.
init = tf.initialize_all_variables()

# Launch the graph.
sess = tf.Session()
sess.run(init)


# Fit the line.
for step in range(20001):
    sess.run(train)
    if step % 1000 == 0:
        #每1000步輸出模型w,b,以及損失函數loss的值
        #print(step, sess.run(W), sess.run(b),sess.run(loss))
        print(step, sess.run(W1), sess.run(W2), sess.run(b),sess.run(loss))
print 'finally:\n'   
print(step, sess.run(W1), sess.run(W2), sess.run(b),sess.run(loss))
# Learns best fit is W: [0.1], b: [0.3]
(0, array([ 0.72082269], dtype=float32), array([ 0.38105279], dtype=float32), array([ 0.59993041], dtype=float32), 93.997841)
(1000, array([ 9.27733135], dtype=float32), array([ 4.54566097], dtype=float32), array([ 3.61498809], dtype=float32), 0.067084424)
(2000, array([ 9.8476944], dtype=float32), array([ 4.87489557], dtype=float32), array([ 3.14387727], dtype=float32), 0.0061689205)
(3000, array([ 9.96483421], dtype=float32), array([ 4.97065687], dtype=float32), array([ 3.03304863], dtype=float32), 0.0038314192)
(4000, array([ 9.99295998], dtype=float32), array([ 4.99455118], dtype=float32), array([ 3.00835323], dtype=float32), 0.002553615)
(5000, array([ 9.99758339], dtype=float32), array([ 4.99890327], dtype=float32), array([ 3.00073123], dtype=float32), 0.0032623655)
(6000, array([ 10.00052738], dtype=float32), array([ 4.99881744], dtype=float32), array([ 2.99949193], dtype=float32), 0.0033237829)
(7000, array([ 10.0004015], dtype=float32), array([ 4.99973106], dtype=float32), array([ 2.99948406], dtype=float32), 0.0033384082)
(8000, array([ 10.00095463], dtype=float32), array([ 5.00019646], dtype=float32), array([ 3.001122], dtype=float32), 0.0035018725)
(9000, array([ 9.99925995], dtype=float32), array([ 5.00029993], dtype=float32), array([ 3.00003409], dtype=float32), 0.0035650488)
(10000, array([ 9.99945068], dtype=float32), array([ 4.99984789], dtype=float32), array([ 3.00002766], dtype=float32), 0.0035755464)
(11000, array([ 9.99971104], dtype=float32), array([ 5.00020266], dtype=float32), array([ 3.00029206], dtype=float32), 0.002880035)
(12000, array([ 10.00064373], dtype=float32), array([ 4.9999342], dtype=float32), array([ 2.99885535], dtype=float32), 0.0034836673)
(13000, array([ 9.9991188], dtype=float32), array([ 4.99929047], dtype=float32), array([ 2.9998548], dtype=float32), 0.0029878533)
(14000, array([ 10.00068378], dtype=float32), array([ 5.00012255], dtype=float32), array([ 2.99903607], dtype=float32), 0.0031892825)
(15000, array([ 10.00005245], dtype=float32), array([ 5.00048876], dtype=float32), array([ 3.0008831], dtype=float32), 0.0030024853)
(16000, array([ 10.00006485], dtype=float32), array([ 5.00009108], dtype=float32), array([ 3.00036478], dtype=float32), 0.0039116871)
(17000, array([ 10.00043488], dtype=float32), array([ 4.99969387], dtype=float32), array([ 2.99935317], dtype=float32), 0.0034525502)
(18000, array([ 10.00097179], dtype=float32), array([ 4.99988937], dtype=float32), array([ 3.00125527], dtype=float32), 0.0034977812)
(19000, array([ 9.99956608], dtype=float32), array([ 4.99992323], dtype=float32), array([ 2.99968314], dtype=float32), 0.0031558934)
(20000, array([ 9.99928761], dtype=float32), array([ 5.000175], dtype=float32), array([ 2.99986959], dtype=float32), 0.0032725118)
finally:

(20000, array([ 9.99928761], dtype=float32), array([ 5.000175], dtype=float32), array([ 2.99986959], dtype=float32), 0.0031366989)

2. 擬合過程模擬

這裏先構建了數據x以及標籤y= x1 * 0.1 + 0.3 + np.random.normal(0.0, 0.03),然後構建一個模型y_ = W * x_data + b去擬合它,計算模型值與真實的差距y和y_ 差距loss,通過梯度下降法逐步減小loss更新w與b的值,這裏逐步顯示擬合的直線的過程。

1. 代碼及擬合過程圖

import numpy as np

num_points = 1000
vectors_set = []
for i in xrange(num_points):
         x1= np.random.normal(0.0, 0.55)
         y1= x1 * 0.1 + 0.3 + np.random.normal(0.0, 0.03)
         vectors_set.append([x1, y1])

x_data = [v[0] for v in vectors_set]
y_data = [v[1] for v in vectors_set]

import matplotlib.pyplot as plt

#Graphic display
plt.plot(x_data, y_data, 'ro')
plt.legend()
plt.show()

import tensorflow as tf

W = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
b = tf.Variable(tf.zeros([1]))
y = W * x_data + b

loss = tf.reduce_mean(tf.square(y - y_data))
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)

init = tf.initialize_all_variables()

sess = tf.Session()
sess.run(init)

for step in xrange(8):
     sess.run(train)
     print(step, sess.run(W), sess.run(b))
     print(step, sess.run(loss))

     #Graphic display
     plt.plot(x_data, y_data, 'ro')
     plt.plot(x_data, sess.run(W) * x_data + sess.run(b))
     plt.xlabel('x')
     plt.xlim(-2,2)
     plt.ylim(0.1,0.6)
     plt.ylabel('y')
     plt.legend()
     plt.show()

這裏寫圖片描述

(0, array([-0.01311105], dtype=float32), array([ 0.2984013], dtype=float32))
(0, 0.0047619585)

這裏寫圖片描述

(1, array([ 0.02086045], dtype=float32), array([ 0.2988025], dtype=float32))
(1, 0.0028016148)

這裏寫圖片描述

(2, array([ 0.0445862], dtype=float32), array([ 0.29910657], dtype=float32))
(2, 0.0018454036)

這裏寫圖片描述

(3, array([ 0.06115652], dtype=float32), array([ 0.29931894], dtype=float32))
(3, 0.0013789847)

這裏寫圖片描述

(4, array([ 0.07272941], dtype=float32), array([ 0.29946727], dtype=float32))
(4, 0.0011514763)

這裏寫圖片描述

(5, array([ 0.08081204], dtype=float32), array([ 0.29957086], dtype=float32))
(5, 0.0010405029)

這裏寫圖片描述

(6, array([ 0.08645704], dtype=float32), array([ 0.29964319], dtype=float32))
(6, 0.00098637247)

這裏寫圖片描述

(7, array([ 0.09039956], dtype=float32), array([ 0.2996937], dtype=float32))
(7, 0.00095996895)

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章