Если вы знаете, какие типы модификаций вы собираетесь делать, вы можете просто удалить эту информацию о форме из заполнителей. Неопределенность будет распространяться автоматически. Например:
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
), но это произойдет. К сожалению, этот тип структуры условного условного графа не записывается в мета-граф.
Является ли форма распространенной, когда я называю 'sess.run (out, feed_dict = {...})' на основе входных данных? Если так, то это идеально для меня. Может ли тип распространяться одинаково? Проблема в том, что я не могу быть уверен, какая форма или тип моего поля будет перед вами, не написав много кода. –
Да, «истинная» форма тензора известна во время выполнения графика ('sess.run') и может быть вычислена как часть графика с помощью' tf.shape' (который возвращает целочисленный тензор). К сожалению, я не знаю ничего подобного для dtype. –