最近写tensorflow程序,出现了一些bug,苦苦困扰了我好久,最终终于明白是变量共享问题。
错误原因:将一段embedding的代码写到了一个函数内,这个函数被多个函数调用,因而产生了一些问题。
函数定义如下:
def embedding(input,num_classes,embedding_size,
scope=None):
#标签转embedding
with variable_scope.variable_scope(scope or "embedding"):
emotion_embedding = tf.get_variable("embedding", [num_classes, embedding_size],
dtype=tf.float32)
target_input = tf.nn.embedding_lookup(embedding, input)
return target_input
在其余函数中调用:
函数1中调用:
#label_input-->vector_input
with variable_scope.variable_scope("embedding"):
label_vectors = embedding_emotion(label_inputs, num_emotions, embedding_size)
函数2中也如此调用,出现错误,类型为题目所示。
最终发现是变量作用域问题,即不知道是否是同一个内容。若不是调用同一个,将其变量域命名为不同;若调用同一个,则在除第一个外,令reuse=True.