“用于记录使用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)