UnboundLocalError:在赋值之前引用了局部变量“batch_index" [英] UnboundLocalError: local variable 'batch_index' referenced before assignment

查看:34
本文介绍了UnboundLocalError:在赋值之前引用了局部变量“batch_index"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这不是我的代码,这里是一行,它显示了一个问题:

This is NOT MY code by here is the line, where it shows a problem:

model.fit(trainX, trainY, batch_size=2, epochs=200, verbose=2)

(正如我现在所想,这段代码很可能使用了旧版本的 TF,因为 'epochs' 被写成 'nb_epoch').

(As I am thinking now, it is very possible this code uses an older version of TF, because 'epochs' was written as 'nb_epoch').

代码最后更新时间:2017年1月11日!

The last update of the code is from: Jan 11, 2017!

我已经尝试了互联网上的所有内容(不是那么多),包括查看 tensorflow/keras 的源代码以获取一些提示.只是为了说明我在代码中没有名为batch_index"的变量.

I have tried everything from the internet (which is not so much), including looking inside the source code of tensorflow/keras for some hints. Just to make it clear that I don't have a variable, called 'batch_index' inside the code.

到目前为止,我已经了解了不同版本的 TF(tensorflow/tensorflow/python/keras/engine/training_arrays.py).貌似都是2018年的版权,不过有的从fit_loop函数开始,有的从model_iteration开始(可能是fit_loop的更新).

So far I have looked inside different versions of TF (tensorflow/tensorflow/python/keras/engine/training_arrays.py). It appears that all are from 2018 copyright, but some start with the function fit_loop, and other with model_iteration (which is probably an update of fit_loop).

所以,这个batch_index"变量只能在第一个函数中看到.

So, this 'batch_index' variable can be seen only in the first function.

我想知道我是否朝着正确的方向前进??!

I wonder if I am going in the right direction at all??!

显示代码没有意义,因为正如我所解释的,代码中首先没有这样的变量.

There is no point in showing the code, because, as I explained, there is no such variable in the first place inside the code.

但是,这是函数stock_prediction"的一些代码,它给出了错误:

but, here is some code of the function 'stock_prediction', that gives the error:


def stock_prediction():

    # Collect data points from csv
    dataset = []

    with open(FILE_NAME) as f:
        for n, line in enumerate(f):
            if n != 0:
                dataset.append(float(line.split(',')[1]))

    dataset = np.array(dataset)

    # Create dataset matrix (X=t and Y=t+1)
    def create_dataset(dataset):
        dataX = [dataset[n+1] for n in range(len(dataset)-2)]
        return np.array(dataX), dataset[2:]
        
    trainX, trainY = create_dataset(dataset)

    # Create and fit Multilinear Perceptron model
    model = Sequential()
    model.add(Dense(8, input_dim=1, activation='relu'))
    model.add(Dense(1))
    model.compile(loss='mean_squared_error', optimizer='adam')
    model.fit(trainX, trainY, nb_epoch=200, batch_size=2, verbose=2)

    # Our prediction for tomorrow
    prediction = model.predict(np.array([dataset[0]]))
    result = 'The price will move from %s to %s' % (dataset[0], prediction[0][0])

    return result


---------------------------------------------------------------------------
UnboundLocalError                         Traceback (most recent call last)
<ipython-input-19-3dde95909d6e> in <module>
     14 
     15 # We have our file so we create the neural net and get the prediction
---> 16 print(stock_prediction())
     17 
     18 # We are done so we delete the csv file

<ipython-input-18-8bbf4f61c738> in stock_prediction()
     23     model.add(Dense(1))
     24     model.compile(loss='mean_squared_error', optimizer='adam')
---> 25     model.fit(trainX, trainY, batch_size=1, epochs=200, verbose=2)
     26 
     27     # Our prediction for tomorrow

~Anaconda3libsite-packageskerasengine	raining.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_freq, max_queue_size, workers, use_multiprocessing, **kwargs)
   1176                                         steps_per_epoch=steps_per_epoch,
   1177                                         validation_steps=validation_steps,
-> 1178                                         validation_freq=validation_freq)
   1179 
   1180     def evaluate(self,

~Anaconda3libsite-packageskerasengine	raining_arrays.py in fit_loop(model, fit_function, fit_inputs, out_labels, batch_size, epochs, verbose, callbacks, val_function, val_inputs, shuffle, callback_metrics, initial_epoch, steps_per_epoch, validation_steps, validation_freq)
    211                     break
    212 
--> 213             if batch_index == len(batches) - 1:  # Last batch.
    214                 if do_validation and should_run_validation(validation_freq, epoch):
    215                     val_outs = test_loop(model, val_function, val_inputs,

UnboundLocalError: local variable 'batch_index' referenced before assignment

稍微澄清一下:

我尝试查看我的 tf/keras 版本,结果如​​下:

I tried to see my version of tf/keras and here is it:

from tensorflow.python import keras
print(keras.__version__)
import keras
print(keras.__version__)
import tensorflow
print(tensorflow.__version__)

2.2.4-tf

2.2.5

1.14.0

为什么 keras 显示不同的版本??

Why keras shows different versions??

推荐答案

我检查了 training_arrays.py (此处) 出现错误的函数,正如我所见,我认为问题可能出在这些语句中(从第 177 - 205 行):

I checked in the training_arrays.py (here) the function in which you got the error and, as I can see, I think the problem could be in these statements (from lines 177 - 205):

batches = make_batches(num_train_samples, batch_size)
for batch_index, (batch_start, batch_end) in enumerate(batches): # the problem is here
    # do stuff
    ...
if batch_index == len(batches) - 1:
    # do stuff
    ...

如果批次是一个空列表,您可能会收到此错误.可能是你的训练集有问题?

If batches is an empty list, you could get this error. Could be that your training set has some problem?

这篇关于UnboundLocalError:在赋值之前引用了局部变量“batch_index"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆