python之深度學習(tensorflow)圖,會話
阿新 • • 發佈:2020-08-13
import tensorflow as tf import os os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'#把報錯的這個警告等級降低 #圖:預設已經註冊,一組表示tf.Operation(節點)計算單元的物件和tf.Tensor(張量)操作之間的資料單元的物件,所以一張圖包含兩個: #一個是OP一個是Tensor #獲取一個圖的方法有:tf.get_default_graph() a = tf.constant(8.0) b = tf.constant(5.0) sum1 = tf.add(a,b) gra = tf.get_default_graph() #<tensorflow.python.framework.ops.Graph object at 0x000001F51CBD9438> #說白了其實還是給你一個地址,你以後的操作的程式就在這個記憶體塊內進行 print(gra) with tf.Session() as sess: print(sess.run(sum1)) #列印13 #接下來我們看看每個Operation的圖也就是地址是不是在一起的,答案是一樣的,都在這個地址上0x000001F7992AA438> print(a.graph) print(sum1.graph) print(sess.graph) #哪些是Operation呢:標量運算(加減乘除等數學運算);向量運算;矩陣運算;帶狀態的運算;神經網路的元件;控制流等等 #只要是使用tensorflow的API定義的函式都是OP,例如上邊的a,b,sum1,gra等等 #什麼是Tensor呢:就是指的是資料,例如上邊的a = tf.constant(8.0)中的8.0就是Tensor型別的 #所以可以抽象的理解成:OP是一個載具,Tensor是一個被載的資料
import tensorflow as tf import os os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'#把報錯的這個警告等級降低 #placeholder是一個佔位符,feed_dict是一個字典 plt = tf.placeholder(tf.float32,[None,3])#一個未知維列表,未知的行但是有3列張量型別是tf.float32 with tf.Session() as sess: print(sess.run(plt,feed_dict={plt:[[1,2,3],[4,5,6]]})) #哪些是Operation呢:標量運算(加減乘除等數學運算);向量運算;矩陣運算;帶狀態的運算;神經網路的元件;控制流等等 #只要是使用tensorflow的API定義的函式都是OP,例如上邊的a,b,sum1,gra等等 #什麼是Tensor呢:就是指的是資料,例如上邊的a = tf.constant(8.0)中的8.0就是Tensor型別的 #所以可以抽象的理解成:OP是一個載具,Tensor是一個被載的資料 #run()方法:run(fetches,feed_dict=None,graph=None):是執行OP和Tensor #引數:fetches是巢狀的列表,元組 #引數:feed_dict允許呼叫者覆蓋圖中指定的張量的值,提供給placeholder使用
張量的動態形狀和靜態形狀:
張量的靜態形狀:建立一個張量初始狀態的形狀,方法有:tf.get_shape():獲取靜態的形狀,tf.set_shape() :更新Tensor物件的靜態形狀
張量的動態形狀:描述原始張量在執行過程中的一種形態,tf.reshape():建立一個不同動態的新張量
import tensorflow as tf import os os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'#把報錯的這個警告等級降低 plt = tf.placeholder(tf.float32,[None,3]) shape1 = plt.get_shape() print(shape1) #(?, 3) plt.set_shape([4,3]) print(plt.get_shape()) #(4, 3) #再次設定形狀,他會報錯,對於靜態形狀來說只能設定一次形狀 plt.set_shape([5,3]) print(plt.get_shape()) #(4, 3) with tf.Session() as sess: pass
接下來試驗一下張量的動態性狀:需要特別注意的是:動態完後的元素個數和分配前是一樣的,4 * 3 = 3 * 4
import tensorflow as tf import os os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'#把報錯的這個警告等級降低 plt = tf.placeholder(tf.float32,[None,3]) shape1 = plt.get_shape() print(shape1) #(?, 3) plt.set_shape([4,3]) print(plt.get_shape()) #(4, 3) #再次設定形狀,他會報錯,對於靜態形狀來說只能設定一次形狀 # plt.set_shape([5,3]) # print(plt.get_shape()) #(4, 3) #接下來就是動態形狀了 plt_reshape = tf.reshape(plt,[3,4]) print(plt_reshape.get_shape()) #(3, 4) with tf.Session() as sess: pass
總結一下:
1.轉化靜態形狀的時候一維只能到一維,二維只能到二維,三維只能到三維
2.對於已經固定的靜態形狀的張量或者變數,不能再次設定他的靜態形狀
3.tf.reshape(張量物件,[新設定的維度]),元素的個數不能不匹配