学习记录--- 解决循环中 Tensor A must be from the same graph as Tensor B

使用LSTM 对时间序列预测的时候,每次预测一条序列是没有问题的,但写个循环想每次运行多条序列就一直报错,在网上翻了好几篇相似的帖子,有两种解决方法都试了,并没有解决。

有问题伪代码如下:

#一些参数设置
···#省略

#训练
def train_lstm():
    with tf.variable_scope('lstm'):
        pred,final_states1=lstm(batch_size)
···

#预测
def prediction():
    with tf.variable_scope('lstm',reuse=True):
        pred,_=lstm(batch_size)
···

#主函数
if __name__ == "__main__":
	···
	for i in range(2):
		#训练
		pred_value_,states_train_h=train_lstm(train_x,train_y)
		#预测
		states_test_h_= prediction()

BUG如下

ValueError: Tensor("lstm/rnn/Const:0", shape=(1,), dtype=int32) must be from the same graph as Tensor("ExpandDims:0", shape=(1,), dtype=int32).

在网上找了解决办法大都是以下两种:然而我试了好几处地方都没有解决

#1        tf.reset_default_graph()
#2       tf.Graph()

最后师姐给的解决方法: 在循环里添加标志位,说明每次测试、训练 都在一个图中,这应该是tensorflow的个性吧!小白不是很了解,但 是解决了循环时出错的问题。具体修改如下:

#一些参数设置
···#省略

#训练
def train_lstm(flag1):
    with tf.variable_scope(flag1):
        pred,final_states1=lstm(batch_size)
···

#预测
def prediction(flag2):
    with tf.variable_scope(flag2,reuse=True):
        pred,_=lstm(batch_size)
 ···

#主函数
if __name__ == "__main__":
	···
	for i in range(2):
		flag1 = str(i) 
		flag2 = str(i) #但我不知道训练和测试为什么不能用同一个flag1
		#训练
		pred_value_,states_train_h=train_lstm(train_x,train_y)
		#预测
		states_test_h_= prediction()

但我不知道训练和测试为什么不能用同一个flag

你可能感兴趣的:(大四暑假)