TensorFlow实现打印每一层的输出
本文介绍在TensorFlow中通过生成带权重的PB文件或冻结CKPT文件,利用get_tensor_by_name函数获取指定层输出的方法。通过加载模型图定义并导入数据,可提取中间层特征值并保存至文本文件,适用于模型调试与分析。
生成带权重的PB文件
在test.py脚本中,可以直接生成包含权重的PB格式模型文件,或者使用TensorFlow官方提供的freeze_graph.py工具将CKPT检查点文件转换为PB文件。
constant_graph = graph_util.convert_variables_to_constants(sess, sess.graph_def,['net_loss/inference/encode/conv_output/conv_output'])
with tf.gfile.FastGFile('net_model.pb', mode='wb') as f:
f.write(constant_graph.SerializeToString())
获取每一层输出
在TensorFlow 1.0版本中,利用包含权重的PB文件结合get_tensor_by_name函数,可以获取模型中每一层的输出数据。
import os
import os.path as ops
import argparse
import time
import math
import tensorflow as tf
import glob
import numpy as np
import matplotlib.pyplot as plt
import cv2
os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
gragh_path = './model.pb'
image_path = './lvds1901.JPG'
inputtensorname = 'input_tensor:0'
tensorname = 'loss/inference/encode/resize_images/ResizeBilinear'
filepath='./net_output.txt'
HEIGHT=256
WIDTH=256
VGG_MEAN = [103.939, 116.779, 123.68]
with tf.Graph().as_default():
graph_def = tf.GraphDef()
with tf.gfile.GFile(gragh_path, 'rb') as fid:
serialized_graph = fid.read()
graph_def.ParseFromString(serialized_graph)
tf.import_graph_def(graph_def, name='')
image = cv2.imread(image_path)
image = cv2.resize(image, (WIDTH, HEIGHT), interpolation=cv2.INTER_CUBIC)
image_np = np.array(image)
image_np = image_np - VGG_MEAN
image_np_expanded = np.expand_dims(image_np, axis=0)
with tf.Session() as sess:
ops = tf.get_default_graph().get_operations()
tensor_name = tensorname + ':0'
tensor_dict = tf.get_default_graph().get_tensor_by_name(tensor_name)
image_tensor = tf.get_default_graph().get_tensor_by_name(inputtensorname)
output = sess.run(tensor_dict, feed_dict={image_tensor: image_np_expanded})
ftxt = open(filepath,'w')
transform = output.transpose(0, 3, 1, 2)
transform = transform.flatten()
weight_count = 0
for i in transform:
if weight_count % 10 == 0 and weight_count != 0:
ftxt.write('\n')
ftxt.write(str(i) + ',')
weight_count += 1
ftxt.close()
总结
以上关于TensorFlow实现打印每一层输出的内容分享完毕,希望能为读者提供参考,并欢迎大家继续支持本站获取更多技术资讯。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













