Tensorflow问题记录

"励志成为tf-boy"

Posted by Ziven on June 30, 2017

“用于记录使用Tensorflow过程中出现的问题。
PS:配合Ctrl+f食用更佳”

错误信息:ValueError: Variable conv1/weights/Adam/ does not exist, or was not created with tf.get_variable(). Did you mean to set reuse=None in VarScope?

解决办法:【scope 命名方法】【Sharing Variables

  • 这是由于共享变量引起的,在LSTM中时常会重复使用variable_scope,而在定义变量时若使用weights = tf.Variables(..., name=...)这种定义方式,当明明重复时,tensorflow会自动修改name以避免重复,而在LSTM中,我们时常会用到重复的变量名,因此我们需要使用weights = tf.get_variable(...)来定义变量,同时配合variable_scope.reuse_variable()来对变量进行复用。
    而我所遇见的问题是使用了tf.get_variable_scope.reuse_variable()将所有的变量都进行了复用,而在我的模型中CNN部分的变量是不需要复用的,因此,我将没有使用tf.get_variable_scope.reuse_variable(),而是单独对要复用的变量域使用variable_scope.reuse_variable(),于是解决了问题。
错误信息:matplotlib 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)

解决办法:我遇到这个问题是在matplotlib中plt.title()中的,plt.title()默认ASCII编码,不直接支持中文编码,因此一般使用plt.title(u'标题')来解决,而对于变量可以使用一下方式解决:

text = '标题'
plt.title(s=unicode(text, 'utf-8'))
Tensorflow 正则化方法:
tf.add_to_collection(tf.GraphKeys.WEIGHTS, W_2)
tf.add_to_collection(tf.GraphKeys.WEIGHTS, W_3)
regularizer = tf.contrib.layers.l2_regularizer(scale=5.0/50000)
reg_term = tf.contrib.layers.apply_regularization(regularizer)

loss = (tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(labels=y_, logits=z_3)) + reg_term)