我现在正在使用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是否有问题。我知道解决此问题的唯一方法是完全重新启动内核,这会导致变量丢失。
答案 0 :(得分:1)
在创建模型之前,请不要忘记重置默认图形tf.reset_default_graph()
。问题在于笔记本在单个线程中运行,并且每次您一次又一次地构建图形时,Tensorflow都会在图形上堆叠新节点。这就是为什么在Jupyter Notebook中进行原型制作时,始终在开始构建新图形时始终重置默认图形。
答案 1 :(得分:0)
每次调用函数classifier
时,都会创建其他图层,当您创建model
并对其进行编译时,仅将model
对象用于model.fit
和{{1} }