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

Я пытаюсь построить график с обучением и проверкой той же модели (полностью подключенный 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 () несколько раз?

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

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

0 голосов
/ 06 февраля 2019

Вызов для проверки 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})
...