Могу ли я использовать одну и ту же модель с разными входными тензорами? Должен ли я избегать многократного запуска session.run()?

Пытаюсь построить граф с обучением и валидацией одной и той же модели (полностью подключенный MLP) без повторного запуска сессии, без использования feed_dict и с использованием tf.data. Как правило, используя feed_dict, я определял модель с входным тензором X и оценивал потери или точность тензоров. Затем во время выполнения графа я бы написал что-то вроде

...
#Training
session.run([train_op], feed_dict={X: XTrainingData, Y: YTrainingData})
#Validation
session.run([accuracy_validation], feed_dict={X: XValidationData, Y: YValidationData})

Я знаю, как использовать набор данных для обучения и избегать feed_dict. Мой вопрос: как я могу избежать feed_dict для обучения И проверки? Если X исходит от итератора, я дважды вызову .get_next() (один для обучения X1, один для проверки X2). Как я могу построить график для использования X1 и X2?

В более общем смысле, следует ли избегать многократного вызова session.run()?


person JJAlberto    schedule 06.02.2019    source источник


Ответы (2)


Вызов session.run() для проверки будет просто сетью прямой связи, которая займет очень меньше времени и памяти. Так что это не должно иметь большого значения, если вы используете его несколько раз. Вы можете попробовать выполнить другую операцию проверки с разными заполнителями ввода для X1 и Y1 и передать эти тензоры в свою модель и проверить.

x1 = tf.placeholder(shape=[None,256,256,1],dtype='float32',name='input_img')
y1 = tf.placeholder(shape=[None,256,256,1],dtype='float32',name='output_img')
x2 = tf.placeholder(shape=[None,256,256,1],dtype='float32',name='val_input_img')
y2 = tf.placeholder(shape=[None,256,256,1],dtype='float32',name='val_output_img')

pred = mod(x1) #mod is the network
val = mod(x2)  #prediction for validation
los = tf.reduce_mean(tf.square(pred-y1))
val_los = tf.reduce_mean(tf.square(val-y2)) # validation loss
opt = tf.train.AdamOptimizer(learning_rate=0.001)
train = opt.minimize(los)
init = tf.global_variables_initializer()

А потом сделать что-то вроде этого

_,val_lo = session.run([train,val_los],feed_dict={x1:xtr,y1:ytr,x2:xval,ytr:yval})
person chhaya kumar das    schedule 06.02.2019
comment
Спасибо. Не могли бы вы дать мне некоторые подробности о том, как вы определяете мод? прогноз val будет иметь те же веса, что и pred? - person JJAlberto; 06.02.2019
comment
Он должен использовать те же веса. Если вы используете высокоуровневый API-интерфейс tensorflow, такой как keras, то, я думаю, об этом позаботятся. Я чувствую, что даже с низкоуровневым API, если вы поместите reuse= True в tf.variable_scope, он должен работать нормально. Я никогда не сталкивался с таким случаем, когда вместо новых используются старые гири. - person chhaya kumar das; 06.02.2019

В чем проблема таким же образом передать проверочный набор в конвейер данных?

person stillPatrick    schedule 06.02.2019