2、相關概念
1、張量(tensor)
TensorFlow 中的核心資料機關是張量(tensor)。一個張量由一組形成陣列(任意維數)的原始值組成。張量的階(rank)是它的維數,而它的形狀(shape)是一個整數元組,指定了陣列每個次元的長度。以下是張量值的一些示例:
3. # a rank 0 tensor; a scalar with shape [],
[1., 2., 3.] # a rank 1 tensor; a vector with shape [3]
[[1., 2., 3.], [4., 5., 6.]] # a rank 2 tensor; a matrix with shape [2, 3]
[[[1., 2., 3.]], [[7., 8., 9.]]] # a rank 3 tensor with shape [2, 1, 3]
TensorFlow 使用numpy數組來表示張量值。
tf.Tensor 具有以下屬性:
資料類型(例如float32、int32 或string)
形狀
張量中的每個元素都具有相同的資料類型,且該資料類型一定是已知的。形狀,即張量的維數和每個次元的大小,可能隻有部分已知。如果其輸入的形狀也完全已知,則大多數操作會生成形狀完全已知的張量,但在某些情況下,隻能在執行圖時獲得張量的形狀。
(1)、階(rank)和形狀(shape)
tf.Tensor 對象的階是它本身的維數。階的同義詞包括:秩、等級或n 維。請注意,TensorFlow 中的階與數學中矩陣的階并不是同一個概念。如下表所示,TensorFlow 中的每個階都對應一個不同的數學執行個體:
張量的形狀是每個次元中元素的數量。TensorFlow 在圖的建構過程中自動推理形狀。這些推理的形狀可能具有已知或未知的階。如果階已知,則每個次元的大小可能已知或未知。TensorFlow 檔案編制中通過三種符号約定來描述張量次元:階,形狀和維數。下表闡述了三者如何互相關聯:

TensorFlow的使用方法
TF學習:Tensorflow基礎案例、經典案例集合——基于python程式設計代碼的實作
1、基礎函數
sess.run()
#當我們建構完圖後,需要在一個會話中啟動圖,啟動的第一步是建立一個Session對象。 為了取回(Fetch)操作的輸出内容, 可以在使用 Session 對象的 run()調用執行圖時,傳入一些 tensor, 這些 tensor 會幫助你取回結果。那麼調用sess.run()的時候,ensorflow并沒有計算整個圖,隻是計算了與想要fetch 的值相關的部分。
占位符和 feed_dict :占位符并沒有初始值,它隻會配置設定必要的記憶體。在會話中,占位符可以使用 feed_dict 饋送資料。 feed_dict 是一個字典,在字典中需要給出每一個用到的占位符的取值。在訓練神經網絡時需要每次提供一個批量的訓練樣本,如果每次疊代選取的資料要通過常量表示,那麼 TensorFlow 的計算圖會非常大。因為每增加一個常量,TensorFlow 都會在計算圖中增加一個結點。是以說擁有幾百萬次疊代的神經網絡會擁有極其龐大的計算圖,而占位符卻可以解決這一點,它隻會擁有占位符這一個結點。
2、輸出tensorflow的版本号
import tensorflow as tf
print('輸出tensorflow的版本:',tf.__version__)
案例應用
DL架構之Tensorflow:Tensorflow中常用函數的簡介、使用方法之詳細攻略
1、使用常量和占位符進行計算
#使用常量和占位符進行計算:其中 y_1 的計算過程使用占位符,而 y_2 的計算過程使用常量
w1=tf. Variable (tf.random_normal([ 1 , 2 ],stddev= 1 ,seed= 1 )) #因為需要重複輸入x,而每建一個x就會生成一個結點,計算圖的效率會低。是以使用占位符
x=tf.placeholder(tf.float32,shape=( 1 , 2 ))
x1=tf.constant([[ 0.7 , 0.9 ]])
a=x+w1
b=x1+w1
sess=tf. Session ()
sess.run(tf.global_variables_initializer()) #運作y時将占位符填上,feed_dict為字典,變量名不可變
y_1=sess.run(a,feed_dict={x:[[ 0.7 , 0.9 ]]})
y_2=sess.run(b)
print (y_1)
print (y_2)
sess.close
2、輸出w、b和計算兩個數值相乘
import numpy as np
W = tf.Variable(np.arange(6).reshape((2, 3)), dtype=tf.float32, name="weights")
b = tf.Variable(np.arange(3).reshape((1, 3)), dtype=tf.float32, name="biases")
saver = tf.train.Saver()
with tf.Session() as sess:
saver.restore(sess, "niu/save_net.ckpt")
print("weights:", sess.run(W))
print("biases:", sess.run(b))
#建構一個計算圖
a=tf.constant([1.0, 2.0])
b=tf.constant([3.0, 4.0])
c=a*b
#T1、傳統的方法,先建構再釋放
sess=tf.Session() #建構一個Session
print(sess.run(c)) #把計算圖放到session裡,并運作得到結果
sess.close() #關閉session釋放資源
#T2、with語句的方法,先建構再釋放
with tf.Session() as sess:
print(sess.run(c)) #把計算圖放到session裡,并運作得到結果
3、ML之LoR:利用LoR算法(tensorflow)對mnist資料集實作手寫數字識别
from tensorflow.examples.tutorials.mnist import input_data
#1、定義資料集:mnist
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)
trainimg = mnist.train.images
trainimg_label = mnist.train.labels
testimg = mnist.test.images
testimg_label = mnist.test.labels
print(trainimg_label[0]) #輸出第一行label值
#2、定義x、y、w、b:tf.placeholder占位符、tf.Variable變量
x = tf.placeholder("float",[None,784]) # [None,784]樣本的個數(無限大),每個樣本的特征(784個像素點)
y = tf.placeholder("float",[None,10]) #樣本的類别(10個)
W = tf.Variable(tf.zeros([784,10])) #每個特征(784個像素點)對應輸出10個分類值
b = tf.Variable(tf.zeros([10]))
#3、模型預測:LoR(softmax多分類)
#3.1、定義計算損失:actv、cost
actv = tf.nn.softmax(tf.matmul(x,W)+b) #計算屬于正确類别的機率值
cost = tf.reduce_mean(-tf.reduce_sum(y*tf.log(actv),reduction_indices=1)) #計算損失值(預測值與真實值間的均方差)
#3.2、定義模型訓練:learning_rate、optm:
#(1)、采用GD優化參數w、b,最小化損失值
learning_rate=0.01
optm = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) #學習率為0.01
# optimizer = tf.train.GradientDescentOptimizer(0.01) #學習率為0.01
# optm = optimizer.minimize(cost) #最小化損失值
#3.3、定義模型的pred、accr
pred = tf.equal(tf.argmax(actv,1),tf.argmax(y,1)) #預測值:equal傳回的值是布爾類型,argmax傳回矩陣中最大元素的索引,0,代表列方向;1代表行方向
accr = tf.reduce_mean(tf.cast(pred,"float")) #準确率,cast進行類型轉化 (true為1,false為0)
#3.4、定義模型訓練參數init_op、train_epochs、batch_size、display_step
init_op = tf.global_variables_initializer() #初始化所有variables 的op
train_epochs = 50 #将所有樣本疊代50次
batch_size = 100 #每次疊代選擇樣本的個數
display_step =5 #每進行5個epoch進行一次展示
#3.5、運作模型tf.Session()
with tf.Session() as sess: #在session中啟動graph
sess.run(init_op) #啟動運作使用variables的op
for epoch in range(train_epochs):
#(1)、定義avg_cost、num_batch
avg_cost =0.0 #初始化損失值
num_batch = int(mnist.train.num_examples/batch_size)
#(2)、for循環實作num_batch批量訓練
for i in range(num_batch):
batch_xs, batch_ys = mnist.train.next_batch(batch_size) #以batch為機關逐次進行
sess.run(optm,feed_dict={x: batch_xs,y: batch_ys}) #給x,y指派
feeds={x: batch_xs,y: batch_ys}
avg_cost +=sess.run(cost,feed_dict= feeds)/num_batch
#(3)、if判斷實作每輪結果輸出:輸出每輪(5個epoch)的cost、trian_acc、test_acc
if epoch % display_step == 0:
feeds_train = {x: batch_xs,y: batch_ys}
feeds_test = {x:mnist.test.images,y: mnist.test.labels}
train_acc = sess.run(accr,feed_dict= feeds_train)
test_acc = sess.run(accr,feed_dict= feeds_test)
print("Epoch: %03d/%03d cost:%.9f trian_acc: %.3f test_acc: %.3f"
% (epoch,train_epochs,avg_cost,train_acc,test_acc))
print("Done")