0

Я хотел знать, можно ли определить слой (свертку, элементарное суммирование и т. Д.) Только для фазы обучения в TensorFlow.Как определить слой только для фазы обучения в TensorFlow?

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

Это легко сделать в Caffe, я хотел знать, можно ли это сделать и в TensorFlow.

ответ

0

Я думаю, что вы можете сделать это if

Train = False 

x = tf.constant(5.) 
y = x + 1 
if Train: 
    y = y + 2 
y = y + 3 

with tf.Session() as sess: 
    res = sess.run(y) # 11 if Train else 9 
1

Вы можете сделать это с «tf.cond» операции control_flow. https://www.tensorflow.org/api_docs/python/control_flow_ops/control_flow_operations#cond

+0

Спасибо. Но что я должен включить в аргумент «pred» для разделения фазы поезда с этапа тестирования? – Behzad

+0

Согласно документации: скаляр, определяющий, следует ли возвращать результат fn1 или fn2. ;) В этом случае, я думаю, вы можете поставить тензор train_phase. Позвольте мне знать, если это помогает! – rmeertens

1

Я думаю, вы можете использовать булевский placeholder с tf.cond(). Просто так:

train_phase = tf.placeholder(tf.bool, []) 
x = tf.constant(2) 
def f1(): return tf.add(x, 1) 
def f2(): return tf.identity(x) 
r = tf.cond(train_phase, f1, f2) 
sess.run(r, feed_dict={train_phase: True}) # training phase, r = tf.add(x, 1) = x + 1 
sess.run(r, feed_dict={train_phase: False}) # testing phase, r = tf.identity(x) = x