我有一个Tensorflow GraphDef: https://github.com/gauravgupta22/tensorflow-caffe/blob/master/lenet.pbtxt
我有兴趣计算tensorflow内部使用的实际数字填充值(而不是'SAME'或'VALID')
是否有任何内置方法或某些功能或任何方式来获取这些?
我找到了一个解释如何计算值的链接:https://www.tensorflow.org/versions/r0.10/api_docs/python/nn.html
对于'VALID'填充,填充值始终为零。
对于'SAME'填充
out_height = ceil(float(in_height) / float(strides[1]))
out_width = ceil(float(in_width) / float(strides[2]))
pad_along_height = ((out_height - 1) * strides[1] +
filter_height - in_height)
pad_along_width = ((out_width - 1) * strides[2] +
filter_width - in_width)
pad_top = pad_along_height / 2
pad_left = pad_along_width / 2
要使用此计算,它需要我为相关操作计算张量的输入形状。
# code to import a graph and print input/output tensor shapes of its operations
import tensorflow as tf
from google.protobuf import text_format
from tensorflow.core.framework import graph_pb2
graph_def = graph_pb2.GraphDef()
with open('lenet.pbtxt', "rb") as f:
text_format.Merge(f.read(), graph_def)
tf.import_graph_def(graph_def,name='')
graph = tf.get_default_graph()
for i in graph.get_operations():
print i.name
print 'INPUTS ',
for j in i.inputs:
print j.get_shape(),
print '\nOUTPUTS ',
for j in i.outputs:
print j.get_shape(),
print
但我得到了一些形状:
INPUTS (?, ?) <unknown>
OUTPUTS (?, ?)
显然这些都不能使用。
那么如何才能获得完整的张量形状或间接如何计算数字填充值?
请帮忙
修改
我制作了张量流模型并使用tf.get_default_graph().as_graph_def()
将其导出到graphdef
现在,如果我再次导入此graphdef,我会得到<unknown>
形状的张量。我失去了推断张量形状的信息!!
另一方面,如果我使用tf.get_default_graph().as_graph_def(add_shapes=True)
导出我的模型并再次导入它,我可以张紧形状!
但我希望我的代码能够与任何graphdef一起工作
tf.get_default_graph().as_graph_def()
不是保存图表的完美方式,还是有其他方法我可以从中推断出张量形状?
修改
我提交了一个问题
https://github.com/tensorflow/tensorflow/issues/3903