一:基本概念編程
TensorFlow是一個編程系統,使用圖(graphs)來表示計算任務,圖(graphs)中的節點稱之爲op(operation),一個op得到0個或多個tensor,執行計算,產生0個或多個tensor。tensor看作是一個n維的數組或列表。圖必須在會話(Session)裏被啓動。數組
二:TensorFlow結構瀏覽器
三:簡單練習dom
一、熱身前技巧:ide
a、首先在桌面建立一個專門用來存放TensorFlow代碼的文件夾,之後把所有和TensorFlow相關的代碼存放在該文件夾下。函數
b、打開jupyter:首先打開系統終端(cmd):進入剛纔建立的存放代碼的文件夾(好比個人study_tensor)輸入:cd C:\Users\felix\Desktop\study_tensor學習
進入後輸入jupyter notebookfetch
會再瀏覽器中打開jupyter notebook的編輯環境。(這樣打開的話,默認jupyter的工做環境就是剛纔建立的文件夾了)優化
新建工做環境。spa
以下圖表示成功進入工做環境:
二、切入正題,擼代碼
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)
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