每当我调用模型的新实例时,NN模型中的层数就不断增加

时间:2019-06-10 08:00:13

标签: tensorflow machine-learning jupyter-notebook

我现在正在使用tensorflow和jupyter工作一段时间,但这是我第一次遇到此问题。我有一个具有6层的NN模型,可以通过调用函数“分类器”来获得该模型的实例

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 个答案:

答案 0 :(得分:1)

在创建模型之前,请不要忘记重置默认图形tf.reset_default_graph()。问题在于笔记本在单个线程中运行,并且每次您一次又一次地构建图形时,Tensorflow都会在图形上堆叠新节点。这就是为什么在Jupyter Notebook中进行原型制作时,始终在开始构建新图形时始终重置默认图形。

答案 1 :(得分:0)

每次调用函数classifier时,都会创建其他图层,当您创建model并对其进行编译时,仅将model对象用于model.fit和{{1} }