为了便于比对定位每一层的不同,需要从 TensorFlow 导出中间层图像数据到文本文件,再载入我们的某一层输入,来看看输出有什么不同?
在《经验干货:使用tf.py_func函数增加Tensorflow程序的灵活性》一文中介绍了py_func函数,所以我们在前面的基础上,也来个py_func函数。
保存数据函数:
def _save_mat(name, tensor_x): # 保存多通道图像数据到txt文件
print(tensor_x.shape)
f=open(name.decode('utf-8')+'.txt','w')
for i in range(tensor_x.shape[3]):#图像通道数
v_2d=tensor_x[0, :, :,i] #取出一个通道
w=v_2d.shape[0] #图像宽高
h=v_2d.shape[1]
for Ii in range(w):
for Ji in range(h):
strNum = str(v_2d[Ii,Ji]) #每一点数据
f.write(strNum)
f.write(' ')#数据间隔一空格
f.write('\n')
f.write('\n')#通道间隔一空行
f.close()
return
py_func调用函数:
def _zhuanhuan_x_1(name, tensor_x,i): # 多通道图像转换1通道
_save_mat(name, tensor_x)
v_2d=tensor_x[0, :, :,i]
return v_2d
前面的 zhuanhuan_64_1 已经改为 zhuanhuan_x_1:
# 多通道转换1通道,并保存图像 以及保存多通道图像数据到txt文件
def zhuanhuan_x_1(name, tensor_x):
for i in range(1):
tensor_1 = tf.py_func(_zhuanhuan_x_1, [name, tensor_x,i],tf.float32)# 调用
conv1out = tf.reshape(tensor_1, shape=[1, tf.shape(tensor_1)[0], tf.shape(tensor_1)[1], 1]) # 2d->4d
tf.summary.image(name, conv1out,max_outputs=64)
return
这样就可以导出每一层数据了。