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

一:基本概念編程

  • 一、使用圖(graphs)來表示計算任務
  • 二、在被稱之爲會話(Session)的上下文(context)中執行圖
  • 三、使用tensor表示數據
  • 四、經過變量(Variable)維護狀態
  • 五、使用feed和fetch能夠爲任意的操做賦值或者從其中獲取數據

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)
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
簡單示例 優化線性模型

 

相關文章
相關標籤/搜索