tensorflow學習筆記(二)常量、變量、占位符、會話


常量、變量、占位符、會話是tensorflow編程的基礎也是最常用到的東西,tensorflow中定義的變量、常量都是tensor(張量)類型。

常量tf.constant()

tensorflow中定義的變量、常量都是tensor(張量)類型常用是在運行過程中不會改變的量,如作線性回歸Y = w*X + b ,知道一系列(X, Y) ,通過梯度下降找w和b,X和Y的值在程序運行時就不會去改變,只不斷改變w和b去減小與真實值的誤差,所以常量常用來表示輸入輸出。

聲明一個標量常量:

t_1 = tf.constant(5)

聲明一個向量常量:

t_2 = tf.constant([2, 3, 5])

變量tf.Variable()

作線性回歸時要不斷調整 w、b 做擬合,w和b就要聲明為變量,所以變量常用來表示模型中的參數。

聲明一個M行N列,全為零的變量:

b_1 = tf.Variable(tf.zeros([M, N], tf.float32))   # tf.zeros 創建全0張量,數字的類型是float32 ,然后用tf.Variable()將其變成變量

聲明一個呈正態分布的 均值是2(默認=0.0)標准差是4(默認是1.0)的2行3列張量:

w_1 = tf.Variable(tf.random_nomarl([2, 3], mean=2.0, stddev=4, seed=2)

會話Session()

如同main()函數一樣,會話是tensorflow程序的入口,tf 程序一般是先定義節點和節點的關系(運算),然后在會話中根據定義的運算自動算出結果 。

import tensorflow as tf
a = tf.constant([1, 2])
b = tf.constant([2, 3])  # 定義常量a,b是1X2的張量
c = tf.add(a, b)    # 定義 c=a+b
d = tf.scalar_mul(tf.constant(2),c)  # 定義 d=2*c

with tf.Session() as sess:
    print(sess.run(d))   # 根據定義的運算(圖)計算 d 的值,並打印

第四行第五行定義c、d的運算,但是在那里並沒有直接得出c和d的結果,在會話中sess.run(d) 計算d ,它會自動根據前面定義好的運算計算出d的結果,而不需顯示的先計算c  sess.run(c) 再計算d。如果在會話總只sess.run(c),程序就不會計算d了。

占位符tf.placeholder()

如名字一樣,占位符就是先給變量占一個位,可以先不給變量賦具體值,先給變量一個位置,在會話運行時給變量傳入具體的值。即占位符用於將數據提供給計算圖。

tf.placeholder(dtype,shape=None,name=None)  

dtype是變量的數據類型,shape是變量的形狀(幾行幾列),name是變量的名稱。

import tensorflow as tf
import numpy as np
a = np.array([1, 2])
b = np.array([2, 3])   # 創建a,b兩個1x2的ndarry變量
X = tf.placeholder(tf.int32)
Y = tf.placeholder(tf.int32)  # 定義兩個占位符,張量形狀可以不寫,傳入值的時候會自動判斷

c = tf.add(X, Y)
d = tf.scalar_mul(tf.constant(2),c)

with tf.Session() as sess:
    re = sess.run(d, feed_dict={X:a, Y:b})   # 在圖計算時提供具體值
    print(re)

 會話在用feed_dict = { } 傳入值的時候傳入的不能是tf.constant()這種類型,必須是數組、np.ndarry等具體數值的類型。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM