主要记录按照tensorflow教程书上的代码进行实际测试的时候碰到的一些坑点。
首先一点是mnist计算图的问题,使用以下代码进行初次申明所有tensor会碰到已经申请layer1/weights的情况,无法继续申请。可是明明是
初次申明!!
def get_weight_variable(shape, regularizer):
weights = tf.get_variable("weights",
shape,
initializer=tf.truncated_normal_initializer(stddev=0.1), )
if regularizer != None:
tf.add_to_collection('losses', regularizer(weights))
return weights
def inference(input_tensor, regularizer):
with tf.variable_scope('layer1'):
weights = get_weight_variable([INPUT_NODE, LAYER1_NODE], regularizer)
biases = tf.get_variable("biases", [LAYER1_NODE], initializer=tf.constant_initializer(0.0))
layer1 = tf.nn.relu(tf.matmul(input_tensor, weights) + biases)
with tf.variable_scope('layer2'):
weights = get_weight_variable([LAYER1_NODE, OUTPUT_NODE], regularizer)
biases = tf.get_variable("biases", [OUTPUT_NODE], initializer=tf.constant_initializer(0.0))
layer2 = tf.matmul(layer1, weights) + biases
return layer2
上述代码中仅仅只从外部调用了一次inference,每次调用get_weight_variable都是在一个不同的命名空间中,怎么可能会重复?!
上网查!
stackoverflow上清一色的。。。
加reuse!!
加你个头啊,都说了初次申明,怎么可能出现reuse的情况,又不是傻逼。
于是转向国内百度,偶然间看到了
tf.reset_default_graph()
感觉有点意思,于是加在了运行文件头上,搞定。
不是很清楚为啥内存里就又已经定义好了的计算图,有大神知道的话,小弟我也愿闻其详。
网友评论