variables - Tensorflow 值错误 : Variable already exists, 不允许

标签 variables tensorflow valueerror

我正在使用 tensorflow 预测具有不同时间段的金融时间序列。为了划分输入数据,我做了子样本并用于循环。
但是,我得到了这样的 ValueError;

ValueError: 变量 rnn/basic_lstm_cell/weights 已经存在,不允许。您的意思是在 VarScope 中设置重用 = True 吗?最初定义于:

如果没有子样本,此代码运行良好。
下面是我的代码。

    import tensorflow as tf
    import numpy as np
    import matplotlib
    import os
    import matplotlib.pyplot as plt

    class lstm:
        def __init__(self, x, y):
            # train Parameters
            self.seq_length = 50
            self.data_dim = x.shape[1]
            self.hidden_dim = self.data_dim*2
            self.output_dim = 1
            self.learning_rate = 0.0001
            self.iterations = 5 # originally 500

        def model(self,x,y):
            # build a dataset
            dataX = []
            dataY = []
            for i in range(0, len(y) - self.seq_length):
                _x = x[i:i + self.seq_length]
                _y = y[i + self.seq_length]
                dataX.append(_x)
                dataY.append(_y)

            train_size = int(len(dataY) * 0.7977)
            test_size = len(dataY) - train_size
            trainX, testX = np.array(dataX[0:train_size]), np.array(dataX[train_size:len(dataX)])
            trainY, testY = np.array(dataY[0:train_size]), np.array(dataY[train_size:len(dataY)])
            print(train_size,test_size)

            # input place holders
            X = tf.placeholder(tf.float32, [None, self.seq_length,         self.data_dim])
            Y = tf.placeholder(tf.float32, [None, 1])

            # build a LSTM network
            cell = tf.contrib.rnn.BasicLSTMCell(num_units=self.hidden_dim,state_is_tuple=True,  activation=tf.tanh) 
            outputs, _states = tf.nn.dynamic_rnn(cell, X, dtype=tf.float32)
            self.Y_pred = tf.contrib.layers.fully_connected(outputs[:, -1], self.output_dim, activation_fn=None) 
            # We use the last cell's output

            # cost/loss
            loss = tf.reduce_sum(tf.square(self.Y_pred - Y))  # sum of the squares
            # optimizer
            optimizer = tf.train.AdamOptimizer(self.learning_rate)
            train = optimizer.minimize(loss)

            # RMSE
            targets = tf.placeholder(tf.float32, [None, 1])
            predictions = tf.placeholder(tf.float32, [None, 1])
            rmse = tf.sqrt(tf.reduce_mean(tf.square(targets - predictions)))

            # training
            with tf.Session() as sess:
                init = tf.global_variables_initializer()
                sess.run(init)

                # Training step
                for i in range(self.iterations):
                    _, step_loss = sess.run([train, loss], feed_dict={X: trainX, Y: trainY})

                # prediction
                train_predict = sess.run(self.Y_pred, feed_dict={X: trainX})
                test_predict = sess.run(self.Y_pred, feed_dict={X: testX})

            return train_predict, test_predict 

    # variables definition
    tsx = []
    tsy = []
    tsr = []
    trp = []
    tep = []

    x = np.loadtxt('data.csv', delimiter=',') # data for analysis
    y = x[:,[-1]]
    z = np.loadtxt('rb.csv', delimiter=',')   # data for time series
    z1 = z[:,0] # start cell
    z2 = z[:,1] # end cell

    for i in range(1): # need to change to len(z)
        globals()['x_%s' % i] = x[int(z1[i]):int(z2[i]),:] # definition of x
        tsx.append(globals()["x_%s" % i])

        globals()['y_%s' % i] = y[int(z1[i])+1:int(z2[i])+1,:] # definition of y
        tsy.append(globals()["y_%s" % i])

        globals()['a_%s' % i] = lstm(tsx[i],tsy[i]) # definition of class  

        globals()['trp_%s' % i],globals()['tep_%s' % i] = globals()["a_%s" % i].model(tsx[i],tsy[i])
        trp.append(globals()["trp_%s" % i])
        tep.append(globals()["tep_%s" % i])

最佳答案

每次model方法被调用,您正在构建 LSTM 的计算图。第二次model方法被调用,tensorflow 发现你已经创建了同名的变量。如果reuse创建变量的范围的标志设置为 False , ValueError被提出。

要解决此问题,您必须将重用标志设置为 True调用 tf.get_variable_scope().reuse_variables()在你的循环结束时。

请注意,您不能在循环的开头添加它,因为那样您会尝试重用尚未创建的变量。

您可以在 tensorflow 文档中找到更多信息 here

关于variables - Tensorflow 值错误 : Variable already exists, 不允许,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46056206/

相关文章:

variables - 如何使用变量选择路径?

java - 他们可以将Javascript变量分配或获取到java变量吗?

variables - 如何在标题中获取 cucumber 场景变量?

python - Tensorflow 中的自动编码器 : save and load network + change hidden layer

python - 带提示数据集的 KNN

ruby-on-rails - 从 Ruby on Rails 应用程序中的模型访问数据

python - 非法指令(核心转储)tensorflow

python - 无法挤压 dim[1],期望维度为 1,结果为 2

Python3 Numpy 乘法 : Could not broadcast together with shapes (10, 10000) (10000, 10)

python - ValueError:无法处理 Python/MySQL 中的参数