1. 程式人生 > >TensorFlow(二):基本概念以及練習

TensorFlow(二):基本概念以及練習

ssi AR oss -a n) counter 全部 enter num

一:基本概念

  • 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)裏被啟動。

二:TensorFlow結構

技術分享圖片

三:簡單練習

1、熱身前技巧:

a、首先在桌面創建一個專門用來存放TensorFlow代碼的文件夾,以後把全部和TensorFlow相關的代碼存放在該文件夾下。

b、打開jupyter:首先打開系統終端(cmd):進入剛才創建的存放代碼的文件夾(比如我的study_tensor)輸入:cd C:\Users\felix\Desktop\study_tensor

技術分享圖片

進入後輸入jupyter notebook

技術分享圖片

會再瀏覽器中打開jupyter notebook的編輯環境。(這樣打開的話,默認jupyter的工作環境就是剛才創建的文件夾了)

新建工作環境。

技術分享圖片

如下圖表示成功進入工作環境:

技術分享圖片

2、切入正題,擼代碼

shift+enter  執行代碼

tab  代碼提示

shift+tab  詳情提示

a、創建圖和啟動圖

技術分享圖片
import tensorflow as tf

# 創建一個常量op
m1=tf.constant([[3,3]])
# 創建一個常量op
m2=tf.constant([[2],[3]])
# 創建一個矩陣乘法的op,把m1,m2傳入
product=tf.matmul(m1,m2)
print(product) #直接打印並沒有執行

# 定義一個會話,自動默認圖
sess=tf.Session()
# 調用sess的run方法來執行矩陣乘法op
# run(product)觸發圖中3個op
result=sess.run(product) print(result) sess.close() # 關閉 # 將上一句簡化 with tf.Session() as sess: # 調用sess的run方法來執行矩陣乘法op # run(product)觸發圖中3個op result=sess.run(product) print(result)
創建圖,啟動圖

圖中的每一個代碼塊都執行了。(按shift+enter執行)

技術分享圖片

b、變量

技術分享圖片
import tensorflow as tf

x=tf.Variable([1,2]) # 創建一個變量op
a=tf.constant([3,3]) # 創建一個常量op
# 增加一個減法op
sub=tf.subtract(x,a)
# 增加一個加法op
add=tf.add(x,sub)
# 初始化全部的變量,不初始化會出問題
init=tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)# 先進行變量的初始化
    print(sess.run(sub))
    print(sess.run(add))


state=tf.Variable(0,name=counter)# 初始化變量為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 i in range(5):
        sess.run(update)
        print(sess.run(state))
變量

技術分享圖片

c、fetch和feed

技術分享圖片
import tensorflow as tf

# fetch 可以執行多個op
input1=tf.constant(3.0)
input2=tf.constant(2.0)
input3=tf.constant(5.0)

add=tf.add(input2,input3)
mul=tf.multiply(input1,add) # 乘法op


with tf.Session() as sess:
    result=sess.run([mul,add]) # 同時運行多個op,就是fetch
    print(result)


# feed 以字典的形式傳入值
input1=tf.placeholder(tf.float32) # 創建一個占位符,具體的值可以在運行的時候傳入
input2=tf.placeholder(tf.float32) # 創建一個占位符
output=tf.multiply(input1,input2)

with tf.Session() as sess:
    # feed的數據以字典的形式傳入
    result=sess.run(output,feed_dict={input1:[7.0],input2:[2.0]}) 
    print(result)
fetch和feed

技術分享圖片

d、簡單示例-優化線性模型,使模型接近樣本

技術分享圖片
import tensorflow as tf
import numpy as np  # pip3 install numpy安裝


# 使用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

# 使用TensorFlow優化k 和 b 來優化線性模型,使其接近樣本

# 二次代價函數
loss=tf.reduce_mean(tf.square(y_data-y)) # reduce_mean求平均值,tf.square計算平方
# 定義一個梯度下降法來進行訓練的優化器
optimizer=tf.train.GradientDescentOptimizer(0.2) # 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: # 每20次輸出一次結果
            print(step,sess.run([k,b]))

# 發現結構k值越來越接近0.1,b值越來越接近0.2
簡單示例 優化線性模型

技術分享圖片

TensorFlow(二):基本概念以及練習