TensorFlow(二):基本概念以及練習
阿新 • • 發佈:2018-03-28
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(二):基本概念以及練習