人工智能課程-深度學習應用開發TensorFlow實踐

注:學習環境爲anaconda+tensorflow+TensorBoard+Jupyter
Kali下打開Jupyter:終端裏輸入jupyter notebook命令即可,按Ctrl+Enter執行
Kali下啓動TensorBoard:在終端輸入tensorboard --logdir=/root/condalog,其中/root/condalog是我的日誌存放路徑,之後訪問返回的url即可,默認爲:http://localhost:6006,也可以用--port參數修改端口號

一、TensorFlow計算模型-計算圖
1、計算圖:是一個有向圖,由節點和有向邊構成。

  • 節點:代表操作,是一種運算
  • 有向邊:代表節點之間的關係
    • 常規邊(實線):代表數據依賴關係,即兩個節點間的數據傳遞
    • 特殊邊(虛線):代表控制依賴關係,即兩個節點之間的控制相關性,eg:happen-before關係

eg:計算圖實例
在這裏插入圖片描述
node3並不是一個數值,而是一個張量結構,以上只是創建了計算圖,建立了靜態計算模型

2、計算圖的執行:
計算圖創建後(即創建好節點後),需要執行對話才能提供數據並獲得結果

eg:會話的創建、運行、關閉
![在這裏插入圖片描述](https://img-blog.csdnimg.cn/2020040816235055.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aH

二、張量(tensor):
在TensorFlow中,所有的數據都通過張量表示。張量可以理解爲多維數組:
零階張量 表示 標量(scalar),即一個數字;
一階張量 表示 向量(vector),即一維數組;以此類推

張量沒有真正的保存數字,而是保存計算過程。

1、張量的屬性:
Tensor("node:src_output",shape=(),dtype=float32)

  • node是節點名稱,src_output是來自節點的第幾個輸出;
  • shape是張量的維度信息,shape=()表示缺省狀態,即爲標量
  • dtype是數據類型,TensorFlow不允許出現數據類型不匹配的情況

在這裏插入圖片描述
node3的屬性爲:Tensor("Add:0",shape=(),dtype=float32)

在這裏插入圖片描述
2、張量的形狀shape:
在這裏插入圖片描述
3、獲取張量的元素:
在這裏插入圖片描述
在這裏插入圖片描述
4、張量的數據類型:
在這裏插入圖片描述
三、操作(operation)
計算圖中的節點就是操作
eg:該例中共有4種操作,在TensorBoard中顯示爲a、b、c、d四個節點
在這裏插入圖片描述
從TensorBoard中查看結果圖
在這裏插入圖片描述

第六講:線性迴歸問題TensorFlow實戰(y=2x+1)

使用TensorFlow進行算法設計與訓練的核心步驟:
1、準備數據
2、構建模型
3、訓練模型
4、進行預測

一、準備數據
1、人工數據集生成

#保證圖像在Jupyter顯示
%matplotlib inline

import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf
#設置隨機種子
np.random.seed(5)
#生成[-1,1]區間內的等差數列,個數爲100個
x_data=np.linspace(-1,1,100)
#生成訓練樣本,在y=2x+1的基礎上,添加幅度爲0.4的抖動
y_data=2*x_data+1.0+np.random.randn(*x_data.shape)*0.4

2、利用matplotlib畫出生成的數據集

#畫出數據集的散點圖
plt.scatter(x_data,y_data)
#畫出要學習的線性函數
plt.plot(x_data,2*x_data+1.0,color='red',linewidth=3)

結果圖如下:
在這裏插入圖片描述

二、構建模型

從這裏開始使用TensorFlow

#定義佔位符,可以理解爲還未確定數值的變量
x=tf.placeholder("float",name="x")
y=tf.placeholder("float",name="y")
#定義模型函數,
def model(x,w,b):
    return tf.multiply(x,w)+b
#定義變量
w=tf.Variable(1.0,name="w0")
b=tf.Variable(0.0,name="b0")
#預測值,存儲model函數的返回值
pred=model(x,w,b)

三、訓練模型

#訓練輪數:
train_epochs=10
#學習率:
learning_rate=0.05
#控制顯示loss的粒度:
display_step=10 #每10個訓練樣本輸出一個損失
#損失函數(以均方差衡量):
loss_function=tf.reduce_mean(tf.square(y-pred))
#梯度下降優化器:
optimizer=tf.train.GradientDescentOptimizer(learning_rate).minimize(loss_function)
#聲明會話
sess=tf.Session()
#初始化變量
init=tf.global_variables_initializer()
sess.run(init)

#開始訓練
step=0
loss_list=[]

for epoch in range(train_epochs):
    for xs,ys in zip(x_data,y_data):
        _,loss=sess.run([optimizer,loss_function],feed_dict={x:xs,y:ys})
        loss_list.append(loss)
        step=step+1
        if step%display_step==0:
        	print("Train Epoch:",'%02d'%(epoch+1),"Step:%03d"%(step),"loss=",\"{:.0f}".format(loss))
    b0tmp=b.eval(session=sess)
    w0tmp=w.eval(session=sess)
    plt.plot(x_data,w0tmp*x_data+b0tmp)

訓練結果圖:
在這裏插入圖片描述
四、預測

x_test=3.21

predict=sess.run(pred,feed_dict={x:x_test})
print("predict value: %f"%predict)
target=2*x_test+1.0
print("object value: %f"%target)

結果:在這裏插入圖片描述

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