ValueError: Variable rnn/basic_rnn_cell/kernel already exists, disallowed. Did you mean to set reuse=True or reuse=tf.AUTO_REUSE in VarScope?

详细错误信息

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-3-7b6c61e32b09> in <module>129         plt.show()130
--> 131 prediction()<ipython-input-3-7b6c61e32b09> in prediction()107 def prediction():108     global batch_size
--> 109     pred,_=lstm(batch_size)      #预测时只输入[1,time_step,input_size]的测试数据110     saver=tf.train.Saver(tf.global_variables())111     with tf.Session() as sess:<ipython-input-3-7b6c61e32b09> in lstm(batch)62         #dynamic_rnn 用于创建由RNNCell细胞指定的循环神经网络,对inputs进行动态展开63         #output_rnn是记录lstm每个输出节点的结果,final_states是最后一个cell的结果
---> 64     output_rnn,final_states=tf.nn.dynamic_rnn(cell, input_rnn,initial_state=init_state, dtype=tf.float32)65     #函数的作用是将tensor变换为参数shape的形式。66     output=tf.reshape(output_rnn,[-1,rnn_unit])...........
.......................ValueError: Tensor("rnn/Const:0", shape=(1,), dtype=int32) must be from the same graph as Tensor("ExpandDims:0", shape=(1,), dtype=int32).

方案一:

使用如下方法对原始网络结构图进行重置:

tf.reset_default_graph()

方案二:

将模型建模部分与预测部分分离

以jupyter为例,那么在模型训练的时候,使用一个kernel并把模型文件保存在对应的目录中;

另外打开一个jupyter notebook,然后构建预测函数进行预测分析OK。

# 训练过程代码,在第一个jupyter notebook中;

import pandas as pd  #数据分析包
import numpy as np   #提供多维数组对象的库
import matplotlib.pyplot as plt  #画图的库
# import tensorflow as tf          #深度学习框架
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()#导入数据
f=open(r'600196.csv')
df=pd.read_csv(f)     #读入股票数据
data=np.array(df['target'])   #获取最高价序列
data=data[::-1]      #反转,使数据按照日期先后顺序排列
#以折线图展示data
plt.figure()
plt.plot(data)
plt.show()
normalize_data=(data-np.mean(data))/np.std(data)  #标准化
normalize_data=normalize_data[:,np.newaxis]       #增加维度#生成训练集
#设置常量
time_step=10      #时间步
rnn_unit=10       #hidden layer units
batch_size=60     #每一批次训练多少个样例
input_size=1      #输入层维度
output_size=1     #输出层维度
lr=0.0006         #学习率
train_x,train_y=[],[]   #训练集
for i in range(len(normalize_data)-time_step-1):x=normalize_data[i:i+time_step]y=normalize_data[i+1:i+time_step+1]train_x.append(x.tolist())  #将数组转化成列表train_y.append(y.tolist())#定义神经网络变量
X=tf.placeholder(tf.float32, [None,time_step,input_size])    #每批次输入网络的tensor/定义placeholder
Y=tf.placeholder(tf.float32, [None,time_step,output_size])   #每批次tensor对应的标签
#输入层、输出层权重、偏置
weights={'in':tf.Variable(tf.random_normal([input_size,rnn_unit])),'out':tf.Variable(tf.random_normal([rnn_unit,1]))}
biases={'in':tf.Variable(tf.constant(0.1,shape=[rnn_unit,])),'out':tf.Variable(tf.constant(0.1,shape=[1,]))}#定义神经网络变量
def lstm(batch):      #参数:输入网络批次数目w_in=weights['in']b_in=biases['in']input=tf.reshape(X,[-1,input_size])  #需要将tensor转成2维进行计算,计算后的结果作为隐藏层的输入input_rnn=tf.matmul(input,w_in)+b_in #表示矩阵乘法input_rnn=tf.reshape(input_rnn,[-1,time_step,rnn_unit])  #将tensor转成3维,作为lstm cell的输入cell=tf.nn.rnn_cell.BasicLSTMCell(rnn_unit)  #定义单个基本的LSTM单元init_state=cell.zero_state(batch,dtype=tf.float32)  #这个函数用于返回全0的state tensor#dynamic_rnn 用于创建由RNNCell细胞指定的循环神经网络,对inputs进行动态展开#output_rnn是记录lstm每个输出节点的结果,final_states是最后一个cell的结果output_rnn,final_states=tf.nn.dynamic_rnn(cell, input_rnn,initial_state=init_state, dtype=tf.float32)#函数的作用是将tensor变换为参数shape的形式。output=tf.reshape(output_rnn,[-1,rnn_unit])w_out=weights['out']b_out=biases['out']pred=tf.matmul(output,w_out)+b_out #表示矩阵乘法return pred,final_states#训练模型
def train_lstm():global batch_sizepred,_=lstm(batch_size) #调用的构建的lstm变量#损失函数 平均平方误差(MSE)loss=tf.reduce_mean(tf.square(tf.reshape(pred,[-1])-tf.reshape(Y, [-1])))#实现梯度下降算法的优化器,优化损失函数train_op=tf.train.AdamOptimizer(lr).minimize(loss)#保存和恢复模型的方法;方法返回checkpoint文件的路径。可以直接传给restore() 进行调用saver=tf.train.Saver(tf.global_variables())with tf.Session() as sess:sess.run(tf.global_variables_initializer())#重复训练10000次for i in range(10):step=0start=0end=start+batch_sizewhile(end<len(train_x)):_,loss_=sess.run([train_op,loss],feed_dict={X:train_x[start:end],Y:train_y[start:end]})start+=batch_sizeend=start+batch_size#每10步保存一次参数if step%10==0:print(i,step,loss_)print("保存模型:",saver.save(sess,'stock.model'))step+=1train_lstm()
tf.reset_default_graph()

# 预测部分,在另外一个jupyter notebook中;

import pandas as pd  #数据分析包
import numpy as np   #提供多维数组对象的库
import matplotlib.pyplot as plt  #画图的库
# import tensorflow as tf          #深度学习框架
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()#导入数据
f=open(r'600196.csv')
df=pd.read_csv(f)     #读入股票数据
data=np.array(df['target'])   #获取最高价序列
data=data[::-1]      #反转,使数据按照日期先后顺序排列
#以折线图展示data
plt.figure()
plt.plot(data)
plt.show()
normalize_data=(data-np.mean(data))/np.std(data)  #标准化
normalize_data=normalize_data[:,np.newaxis]       #增加维度#生成训练集
#设置常量
time_step=10      #时间步
rnn_unit=10       #hidden layer units
batch_size=60     #每一批次训练多少个样例
input_size=1      #输入层维度
output_size=1     #输出层维度
lr=0.0006         #学习率
train_x,train_y=[],[]   #训练集
for i in range(len(normalize_data)-time_step-1):x=normalize_data[i:i+time_step]y=normalize_data[i+1:i+time_step+1]train_x.append(x.tolist())  #将数组转化成列表train_y.append(y.tolist())#定义神经网络变量
X=tf.placeholder(tf.float32, [None,time_step,input_size])    #每批次输入网络的tensor/定义placeholder
Y=tf.placeholder(tf.float32, [None,time_step,output_size])   #每批次tensor对应的标签
#输入层、输出层权重、偏置
weights={'in':tf.Variable(tf.random_normal([input_size,rnn_unit])),'out':tf.Variable(tf.random_normal([rnn_unit,1]))}
biases={'in':tf.Variable(tf.constant(0.1,shape=[rnn_unit,])),'out':tf.Variable(tf.constant(0.1,shape=[1,]))}#定义神经网络变量
def lstm(batch):      #参数:输入网络批次数目w_in=weights['in']b_in=biases['in']input=tf.reshape(X,[-1,input_size])  #需要将tensor转成2维进行计算,计算后的结果作为隐藏层的输入input_rnn=tf.matmul(input,w_in)+b_in #表示矩阵乘法input_rnn=tf.reshape(input_rnn,[-1,time_step,rnn_unit])  #将tensor转成3维,作为lstm cell的输入cell=tf.nn.rnn_cell.BasicLSTMCell(rnn_unit)  #定义单个基本的LSTM单元init_state=cell.zero_state(batch,dtype=tf.float32)  #这个函数用于返回全0的state tensor#dynamic_rnn 用于创建由RNNCell细胞指定的循环神经网络,对inputs进行动态展开#output_rnn是记录lstm每个输出节点的结果,final_states是最后一个cell的结果output_rnn,final_states=tf.nn.dynamic_rnn(cell, input_rnn,initial_state=init_state, dtype=tf.float32)#函数的作用是将tensor变换为参数shape的形式。output=tf.reshape(output_rnn,[-1,rnn_unit])w_out=weights['out']b_out=biases['out']pred=tf.matmul(output,w_out)+b_out #表示矩阵乘法return pred,final_states#预测模型
def prediction():pred,_=lstm(1)      #预测时只输入[1,time_step,input_size]的测试数据saver=tf.train.Saver(tf.global_variables())with tf.Session() as sess:#参数恢复module_file = tf.train.latest_checkpoint('.')saver.restore(sess, module_file)#取训练集最后一行为测试样本。shape=[1,time_step,input_size]prev_seq=train_x[-1]predict=[]#得到之后100个预测结果for i in range(100):next_seq=sess.run(pred,feed_dict={X:[prev_seq]})predict.append(next_seq[-1])#每次得到最后一个时间步的预测结果,与之前的数据加在一起,形成新的测试样本prev_seq=np.vstack((prev_seq[1:],next_seq[-1]))#以折线图表示结果plt.figure()plt.plot(list(range(len(normalize_data))), normalize_data, color='b')plt.plot(list(range(len(normalize_data), len(normalize_data) + len(predict))), predict, color='r')plt.show()prediction()

参考:ValueError: Variable rnn/basic_rnn_cell/kernel already exists, disallowed. Did you mean to set reuse=True or reuse=tf.AUTO_REUSE in VarScope?

参考:Tensorflow: Variable rnn/basic_lstm_cell/kernel already exists, disallowed

ValueError: Variable rnn/basic_rnn_cell/kernel already exists, disallowed. Did you mean to set reuse相关推荐

  1. ValueError: Variable rnn/basic_lstm_cell/kernel already exists, disallowed.

    ValueError: Variable rnn/basic_lstm_cell/kernel already exists, disallowed. 用spyder运行mnist_lstm.py 第 ...

  2. ValueError: Variable eval_net/l1/w1 already exists, disallowed. Did you mean to set reuse=True or...

    当在spyder中运行代码时报错如下: ValueError: Variable eval_net/l1/w1 already exists, disallowed. Did you mean to ...

  3. Variable Generator/dense/kernel already exists, disallowed.

    Jupyter notebook运行下面程序:https://github.com/MorvanZhou/Tensorflow-Tutorial/blob/master/tutorial-conten ...

  4. tf1.x error:Variable generator/encoder_image/conv2d/kernel already exists, disallowed

    今天在用tf1.x进行重复多次计算的时候,出现问题Variable generator/encoder_image/conv2d/kernel already exists, disallowed 错 ...

  5. Variable W already exists, disallowed. Did you mean to set reuse=True or reuse=tf.AUTO_REUSE……

    Variable W already exists, disallowed. Did you mean to set reuse=True or reuse=tf.AUTO_REUSE in VarS ...

  6. Variable conv1/weights already exists, disallowed. Did you mean to set reuse=True...tensorflow报错

    在训练神经网络模型使用tensorflow时,training模块训练多次会出现报错如: 1,Variable conv1/weights already exists, disallowed. Di ...

  7. 【报错及解决】Variable w already exists, disallowed. Did you mean to set reuse=True in VarScope? Originally

    一.问题描述 在构建tensorflow计算图的时候,如下代码运行报错 x = tf.placeholder(tf.float32,[None,3072]) #[None] y = tf.placeh ...

  8. tensorflow Variable already exists, disallowed. Did you mean to set reuse=True or reuse=tf.AUTO_REUS

    问题描述 使用with tf.Session() as sess:后 下次循环进入再次使用 with tf.Session() 问题原因 tf.graph() 未清空 解决 在withtf.get_d ...

  9. ...weights already exists, disallowed. Did you mean to set reuse=True...(解决办法)

    model.inference(train_batch, BATCH_SIZE, N_CLASSES)这个里面应该有with tf.variable_scope('layer1'):这样的代码,改为w ...

最新文章

  1. 计算机网络 实验六 静态路由配置,实验六-静态路由配置.doc
  2. android tomtom gps location,TomTom智能地图修正 规避不能走的路
  3. 站在巨人肩膀上的意思就是拒绝重复造轮子,分享12个常见的js插件
  4. Python中import和from......import的区别
  5. postman根据请求内容生成对应的代码(Java、Go、C语言等)
  6. 奇特的恐怖之门:谈周德东的恐怖小说《门》
  7. oracle数据库要参考的书,[Oracle] 几本重要的电子图书下载-数据库专栏,ORACLE
  8. 前端面试:你应该了解的JS算法相关的知识
  9. [Win系统][临时方案]系统任务管理器不能使用临时性解决方案
  10. [转载]从零开始学习OpenGL ES之五 – 材质
  11. 界面原形设计/UI原型设计
  12. 淘宝上线独立搜索引擎一淘网
  13. 科研绘图,看这一篇就够了(内含免费送书活动)
  14. 水花兄弟又凑齐了(20220111 Week2-1)
  15. 移动端网页的基础制作
  16. MacbookPro安装前端开发环境的爬坑之旅
  17. 数字水印常见攻击类型汇总,噪声,缩放,旋转,剪切(附matlab代码)
  18. Layui.open 弹出上传图片、视频预览
  19. 读取txt的中文字符出现乱码
  20. linux中国vi,使用 Vi/Vim 编辑器:高级概念 | Linux 中国

热门文章

  1. shell中执行脚本并显示到终端和保存到日志文件中
  2. C#BindingSource用法、属性、事件
  3. 如何区分网线是几类的_认清网线的六种材质,挑选网线不再被坑
  4. clodeblocks debug断点调试_Go 的 Debug 工具 delve 介绍
  5. CVPR 2021 | 记录SCRFD人脸检测C++工程化(含docker镜像)
  6. EPSON机器人的以太网通讯简单总结
  7. QCustomPlot的简单用法总结
  8. 如何创建一个定时管理的页面
  9. 在IOS中创建get,set方法
  10. KinectFusion简介