Количество слоев в модели NN увеличивается с каждым разом, когда я вызываю новый экземпляр модели. - PullRequest
0 голосов
/ 10 июня 2019

Я некоторое время работаю с tenorflow и jupyter, но я впервые столкнулся с этой проблемой. У меня есть модель NN, которая имеет 6 слоев, и я получаю экземпляр этой модели, вызывая функцию «классификатор»

def classifier(input_repr,prob,reuse=None):
    e_l1=tf.layers.dense(inputs=input_repr,units=512,activation=tf.nn.leaky_relu)
    e_l1=tf.nn.dropout(e_l1,prob)
    e_l2=tf.layers.dense(inputs=e_l1,units=256,activation=tf.nn.leaky_relu)
    e_l2=tf.nn.dropout(e_l2,prob)
    e_l3=tf.layers.dense(inputs=e_l2,units=128,activation=tf.nn.leaky_relu)  
    e_l3=tf.nn.dropout(e_l3,prob)
    e_l4=tf.layers.dense(inputs=e_l3,units=64,activation=tf.nn.leaky_relu)  
    e_l4=tf.nn.dropout(e_l4,prob)
    e_l5=tf.layers.dense(inputs=e_l4,units=32,activation=tf.nn.leaky_relu)  
    e_l5=tf.nn.dropout(e_l5,prob)
    d_l3=tf.layers.dense(inputs=e_l5,units=1,activation=tf.nn.leaky_relu)
    return d_l3

У меня также есть функция для визуализации сводки модели как

def model_summary():
    model_vars = tf.trainable_variables()
    slim.model_analyzer.analyze_vars(model_vars, print_info=True)

print(model_summary())

И я получаю экземпляр модели как,

model_output=classifier(input_repr,prob)

Проблема в том, что всякий раз, когда я вызываю это, а затем я вызываю model_summary (), слои укладываются в предыдущую модель. Например, если при первом вызове «classifier ()» model_Summary () показывает 5 слоев, но при повторном вызове показывает 10 слоев и так далее. Я всегда инициализирую снова перед вызовом метода classifier (), но это происходит снова и снова. Я не знаю, если это какая-то проблема с Jupyter. Единственный известный мне способ решения этой проблемы - полностью перезапустить ядро, что приводит к потере переменных.

Ответы [ 2 ]

1 голос
/ 10 июня 2019

Не забудьте сбросить график по умолчанию tf.reset_default_graph() перед созданием модели.Проблема заключается в том, что ноутбук работает в одном потоке, и Tensorflow размещает новые узлы на графике всякий раз, когда вы строите график снова и снова.Вот почему при создании прототипов в блокноте Jupyter всегда сбрасывайте график по умолчанию, когда вы начинаете создавать новый график.

0 голосов
/ 10 июня 2019

каждый раз, когда вы вызываете функцию classifier, вы создаете дополнительные слои, когда вы создаете свой model и компилируете его, используя только model объект для model.fit и model.predict

...