【1】測試數據
背景:每次喂入神經網絡數據時,用同樣的數據喂入神經網絡測試時就報錯,原因如下;
神經網絡中運行的是張量流,而測試時喂入的數據絕對不能爲張量,因爲feed函數不能介紹張量,因此需要轉換。
測試數據有兩種來源;
【1】一種是訓練時候批量生產的數據,爲張量形式,例如採用留一法,K交叉法等,
均是將數據劃分,一部分訓練,一部分測試;
【2】直接採用外部的圖片進行測試;
注:# 注意神經網絡的輸入是張量,測試數據輸入不能是張量,需要轉換爲非張量數據類型輸入
#神經網絡訓練時候的輸入類型、測試時候的模型都是輸入張量形式的,神經網絡的預測時候的輸入的爲非張量
#但是佔位的類型均是一樣的
【2】方法1介紹
'''
【1】此處採用方法1進行測試
(1)從數據集讀入數據。
(2)將張量數據裝換爲非張量數據。
(3)維度變換。
x=tf.placeholder(tf.float32,[1,64,64,3],name='x-input')
#【1】讀入圖片數據(讀入的是圖片路徑),打亂放入列表
train, train_label = input_selfdata.get_files(train_dir)
#將圖像轉換爲張量,製造標籤
x_test,y_test=input_selfdata.get_batch(train,train_label,image_size,image_size,batch_size,2000)
#此處還有一部分數據去測試,一部分取訓練,此處假設數據集全部取測試
#--------------------------------------------------------------------------
#。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
#--------------------------------------------------------------------------
#【2】張量轉換爲非張量,數組
x_in=sess1.run(x_test)
y_in=sess1.run(y_test)
#【3】遍歷數據,喂入數據
for idex in range(len(x_in)):
x_in_test=x_in[idex]
#【4】數組維度變換
test=np.reshape(x_in_test,(1,64,64,3))
#【5】喂入數據
soft=sess1.run([softmax],feed_dict={x:test})
'''
【3】方法二介紹
'''
【2】此處採用方法2進行測試,思路如下:
(1)批量讀入圖片,放置在列表中。
(2)將列表的數據單張讀入。
(3)對單張圖片大小變換,變換爲神經網絡數據圖片的要求大小。###cv2.resize(64,64)
(4)標準化。加快數據運行速度。###tf.image.per_image_standardization
(5)數據維度變換,變換爲神經網絡的輸入維度,就是佔位符裏面的維度。###tf.reshape(imageb, (1, 64, 64, 3))
(6)張量裝換爲非張量,因爲feed不能喂入張量。###image_in=sess.run(image)
具體實現
注 image_array[index]爲輸入的單張圖像(此處爲列表中的圖像)
x=tf.placeholder(tf.float32,[1,64,64,3],name='x-input')
for index in range(len(image_array[index])):
#【1】圖像大小變換
reImg=cv2.resize(image_array[index],(64,64))
#【2】圖像標準化,加快神經網絡的訓練
imageb = tf.image.per_image_standardization(reImg)
#【3】圖像矩陣轉換轉爲x類型的張量
image = tf.reshape(imageb, (1, 64, 64, 3))
#【4】將張量變爲非張量
image_in=sess.run(image)
#【5】數據喂入神經網絡
prediction = sess.run(logit, feed_dict={x:image_in})
'''