从tensorflow获取数字填充值

时间:2016-08-18 09:41:55

标签: python neural-network tensorflow deep-learning conv-neural-network

我有一个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

0 个答案:

没有答案