1. 程式人生 > >tensorflow學習筆記一

tensorflow學習筆記一

系統架構

在這裡插入圖片描述

運算

正常的運算

t=7+8
print(t)

tensorflow計算方式好像不太一樣,需要先寫好資料流圖,需要用session去執行這個圖,

import tensorflow as tf
import  os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
sess=tf.Session()

a = tf.constant(10)
b = tf.constant(22)

print(sess.run(a+b))

sess.close()

在 傳 統 的 程 序 操 作 中, 定 義 了 t 的 運 算, 在 運 行 時 就 執 行 了, 並 輸 出 17。 而 在 TensorFlow 中, 數 據 流 圖 中 的 節 點, 實 際 上 對 應 的 是 TensorFlow API 中 的 一 個 操 作, 並 沒 有 真 正 去 運 行:

import tensorflow as tf 
t = tf.add( 8, 9) 
print( t) 
# 輸 出 Tensor(" Add_1: 0", shape =(), dtype = int32)

節選自:Alexander·T·Combs; Rodolfo·Bonnin; 李嘉璇. 機器學習從認知到實踐(第2輯)(套裝共3冊,Python+TensorFlow) (Kindle 位置 9300-9304). 人民郵電出版社.

資料型別

數 據 類 型 Python 類 型 描 述
DT_FLOAT tf.float32 32 位 浮 點 型
DT_DOUBLE tf.float64 64 位 浮 點 型
DT_INT64 tf.int64 64 位 有 符 號 整 型
DT_INT32 tf.int32 32 位 有 符 號 整 型
DT_INT16 tf.int16 16 位 有 符 號 整 型
DT_INT8 tf.int8 8 位 有 符 號 整 型
DT_UINT8 tf.uint8 8 位 無 符 號 整 型
DT_STRING tf.string 可 變 長 度 的 字 節 數 組, 每 一 個 張 量 元 素 都 是 一 個 字 節 數 組
DT_BOOL tf.bool 布 爾 型
DT_COMPLEX64 tf.complex64 由 兩 個 32 位 浮 點 數 組 成 的 復 數: 實 部 和 虛 部
DT_QINT32 tf.qint32 用 於 量 化[ 9] 操 作 的 32 位 有 符 號 整 型
DT_QINT8 tf.qint8 用 於 量 化 操 作 的 8 位 有 符 號 整 型
DT_QUINT8 tf.quint8 用 於 量 化 操 作 的 8 位 無 符 號 整 型

佇列

FIFO先進先出

import tensorflow as tf

# 定義一個能在TensorFlow裡執行的先進先出佇列,佇列長度是3,資料型別是浮點
q = tf.FIFOQueue(3,'float')
# 初始化裡面的資料 入隊
init = q.enqueue_many(([0.1,0.2,0.3],))
# 取一個出佇列。這裡其實並沒有出去,因為還沒放在TensorFlow裡執行
x = q.dequeue()

# 定義y 的型別
y = x + 1

# 把y 放進去 q佇列 ,這裡也算是沒有執行
q_inc = q.enqueue([y])
with tf.Session() as sess:
    # 這裡才算是初始佇列。
    sess.run(init)
    # 計算佇列的長度
    quelen = sess.run(q.size())
    for i in range(2):
        # 執行兩次q_inc 等於上面寫好的類似於函式,需要放在session裡去執行
        sess.run(q_inc)
    print('---')
    quelen = sess.run(q.size())
    for i in range(quelen):
        print(sess.run(q.dequeue()))

隨機佇列

好像是訓練時候可以進行無序輸入


import tensorflow as tf

# 建立一個隨機佇列
q = tf.RandomShuffleQueue(capacity=10,min_after_dequeue=2,dtypes='float')

with tf.Session() as sess:
    # 執行10次入隊
    for i in range(0,10):
        sess.run(q.enqueue(i))
    # 執行8次出隊
    for i in range(0,8):
        print(sess.run(q.dequeue()))

會發現結果是隨機出來的

佇列控制器

import tensorflow as tf

# 定義一個能在TensorFlow裡執行的先進先出佇列,佇列長度是3,資料型別是浮點
q = tf.FIFOQueue(100, 'float')

# 定義一個計數器變數
counter = tf.Variable(0.0)
# 給計數器+1
increment_op = tf.assign_add(counter, tf.constant(1.0))
# 將計數器放入佇列
enqueue_op = q.enqueue([counter])
# 這裡是個佇列管理器
qr = tf.train.QueueRunner(q, enqueue_ops=[increment_op, enqueue_op] * 1)

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    # 這個是協調器,協調session執行緒和本地
    coord = tf.train.Coordinator()
    enqueue_threads = qr.create_threads(sess, start=True)
    # 不然會包session錯誤,
    coord.request_stop()
    for i in range(10):
        print(sess.run(q.dequeue()))
    # 在這裡等著佇列結束,不然session結束了,佇列沒結束狂報錯
    coord.join(enqueue_threads)