1. 程式人生 > 實用技巧 >python之深度學習(tensorflow)圖,會話

python之深度學習(tensorflow)圖,會話

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(張量物件,[新設定的維度]),元素的個數不能不匹配