2017-02-02 3 views
0

Я стараюсь обслуживать пересмотренный начальный граф с использованием функции tensorflow. Для переподготовки я использую это example. Однако мне нужно внести изменения в этот график, чтобы он работал с serving export code.перепросмотр изображения тензорного потока с сервисом

Поскольку в tensorflow служащей, вы будете получать сериализованные изображения в качестве входных данных, входной график должен начать с этого:

serialized_tf_example = tf.placeholder(tf.string, name='tf_example') 
feature_configs = { 
    'image/encoded': tf.FixedLenFeature(shape=[], dtype=tf.string), 
} 
tf_example = tf.parse_example(serialized_tf_example, feature_configs) 
jpegs = tf_example['image/encoded'] 
images = tf.map_fn(preprocess_image, jpegs, dtype=tf.float32) 

Этот тензор изображения должны быть введены в переквалифицировался вводного графике. Однако я не знаю, возможно ли его добавить один граф к другому в тензорном потоке, как вы можете легко добавить, используя placeholder_with_input (что было сделано при переподготовке кода).

graph, bottleneck_tensor, jpeg_data_tensor, resized_image_tensor = (
    create_inception_graph()) 

В идеале, в образе коды переобучения, я получаю тензор замещающего jpeg_input_data. Мне нужно добавить тензор images к этому тензору заполнителя jpeg_data_tensor и экспортировать его как единый граф с использованием экспортера, чтобы он мог обслуживаться с использованием функции tensorflow. Тем не менее, я не выполняю никаких инструкций тензорного потока. Существуют ли другие альтернативы, кроме этого метода?

ответ

2

Один из способов идти о нем:

model_path = 'trained/export.pb' 
with tf.Graph().as_default(): 
    with tf.Session() as sess:  
     with gfile.FastGFile(model_path, 'rb') as f: 
      graph_def = tf.GraphDef() 
      graph_def.ParseFromString(f.read()) 
      # Your prepending ops here 
      images_placeholder = tf.placeholder(tf.string, name='tf_example') 
      ... 
      images = tf.map_fn(preprocess_image, jpegs, dtype=tf.float32) 
      tf.import_graph_def(graph_def, name='inception', input_map={'ResizeBilinear:0': images}) 

Обратите внимание, особенно input_map аргумент. ResizeBilinear:0, вероятно, не правильное название операции вам нужно - вы можете перечислить опа по:

[n.name for n in tf.get_default_graph().as_graph_def().node] 

Я понимаю, что это не полный ответ, и, возможно, не самый эффективный, но мы надеемся, что вы можете получить работу. Просто хедз-ап, есть также this blogpost.

0

Так как вы уже прошли переподготовку модели, я предполагаю, что модель представляет собой Protobuf, но вы можете просто загрузить это в объект Python и отключить этот объект с помощью настраиваемой функции, которая обрабатывает либо пакет или атомную операцию.

И, насколько мне известно, когда вы загружаете объект tf.Graph(), вы работаете только с этим объектом и не можете работать с другими графами ... если вы сказали другой график, который является расширением существующего графика Inception-V3, вы можете легко добавить это к графику вычислений для своего пользовательского графика довольно легко.

Смежные вопросы