2017-02-07 13 views
2

Я узнал, что могу программировать TensorFlow, изменяя JSON, который исходит от protobuf. См. hereTensorFlow Форма и тип вывода

Если я изменяю этот JSON, у меня иногда возникает проблема, когда мне нужно вручную редактировать JSON для распространения правильных форм различных входов и выходов. Есть ли способ сделать TF сделать это автоматически для меня, чтобы я мог указать ввод через Placeholders, а затем формы и типы автоматически распространяются?

ответ

3

Если вы знаете, какие типы модификаций вы собираетесь делать, вы можете просто удалить эту информацию о форме из заполнителей. Неопределенность будет распространяться автоматически. Например:

import tensorflow as tf 
placeholder = tf.placeholder(dtype=tf.float32, shape=[None]) 
derived = (placeholder/3)[1:, None] 
print(placeholder.get_shape(), derived.get_shape()) 

распечатки:

(TensorShape([Dimension(None)]), TensorShape([Dimension(None), Dimension(1)])) 

Так что не будет статическая информации формы сохраняется на длину placeholder. Вы можете даже иметь тензоры с неизвестным рангом.

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

placeholder = tf.placeholder(dtype=tf.float32, shape=[2]) 
if placeholder.get_shape()[0].value % 2 == 0: 
    derived = placeholder 
else: 
    derived = tf.concat(0, [placeholder, [0]]) 

Это не рекомендуется метод график строительства (гораздо лучше использовать tf.shape с cond), но это произойдет. К сожалению, этот тип структуры условного условного графа не записывается в мета-граф.

+0

Является ли форма распространенной, когда я называю 'sess.run (out, feed_dict = {...})' на основе входных данных? Если так, то это идеально для меня. Может ли тип распространяться одинаково? Проблема в том, что я не могу быть уверен, какая форма или тип моего поля будет перед вами, не написав много кода. –

+0

Да, «истинная» форма тензора известна во время выполнения графика ('sess.run') и может быть вычислена как часть графика с помощью' tf.shape' (который возвращает целочисленный тензор). К сожалению, я не знаю ничего подобного для dtype. –