【10】tensorflow中feed函數喂入數據轉換

【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})
'''

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章