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

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

常量tf.constant()

tensorflow中定義的變量、常量都是tensor(張量)類型經常使用是在運行過程當中不會改變的量,如做線性迴歸Y = w*X + b ,知道一系列(X, Y) ,經過梯度降低找w和b,X和Y的值在程序運行時就不會去改變,只不斷改變w和b去減少與真實值的偏差,因此常量經常使用來表示輸入輸出。python

聲明一個標量常量:編程

t_1 = tf.constant(5)

聲明一個向量常量:數組

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

變量tf.Variable()

做線性迴歸時要不斷調整 w、b 作擬合,w和b就要聲明爲變量,因此變量經常使用來表示模型中的參數。dom

聲明一個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列張量:scala

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

會話Session()

如同main()函數同樣,會話是tensorflow程序的入口,tf 程序通常是先定義節點和節點的關係(運算),而後在會話中根據定義的運算自動算出結果 。blog

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了。it

佔位符tf.placeholder()

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

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

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等具體數值的類型。

相關文章
相關標籤/搜索