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

 

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