Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Keras model.fit UnboundLocalError_Python_Keras - Fatal编程技术网

Python Keras model.fit UnboundLocalError

Python Keras model.fit UnboundLocalError,python,keras,Python,Keras,我对keras和python还是新手,而且我遇到了一个我似乎无法理解的错误。 错误是: Traceback (most recent call last): File "/Users/N/PycharmProjects/hw2/hw2_1.py", line 35, in <module> model.fit(trainingInp, trainingOut, epochs=10, batch_size=1) File "/Library/Python/2.7/site-pa

我对keras和python还是新手,而且我遇到了一个我似乎无法理解的错误。 错误是:

Traceback (most recent call last):
  File "/Users/N/PycharmProjects/hw2/hw2_1.py", line 35, in <module>
model.fit(trainingInp, trainingOut, epochs=10, batch_size=1)
  File "/Library/Python/2.7/site-packages/keras/models.py", line 893, in fit
initial_epoch=initial_epoch)
  File "/Library/Python/2.7/site-packages/keras/engine/training.py", line 1555, in fit
batch_size=batch_size)
  File "/Library/Python/2.7/site-packages/keras/engine/training.py", line 1409, in _standardize_user_data
exception_prefix='input')
  File "/Library/Python/2.7/site-packages/keras/engine/training.py", line 126, in _standardize_input_data
array = arrays[i]
UnboundLocalError: local variable 'arrays' referenced before assignment
我打印数据以确保没有传入空数据,并且在进入model.fit()之前正确打印

我不太确定如何修复它,因为我真的不知道问题出在哪里。问题似乎是批次大小,但我认为允许批次大小为1

以下是我获取数据的方法。我保证数据没有任何空值

#read and categorize data
data = pandas.read_csv('cars.data.txt', delim_whitespace=True, header=None)

#turn class into an integer
enc = pandas.factorize(data['class'])
data["enc"] = enc[0]


#split the data set and make class into a matrix of outputs
trainingSet, testingSet = train_test_split(data, test_size=0.3)

trainingInp = trainingSet.iloc[:,1:9]
trainingOut = keras.utils.to_categorical(trainingSet['enc'], num_classes=10)

testingInp = testingSet.iloc[:,1:9]
testingOut = keras.utils.to_categorical(testingSet['enc'], num_classes=10)

看起来像Keras里的虫子

engine/training.py

elif data.__class__.__name__ == 'DataFrame':
    # test if data is a DataFrame, without pandas installed
    data = data.values
应该是

elif data.__class__.__name__ == 'DataFrame':
    # test if data is a DataFrame, without pandas installed
    arrays = data.values


我是这样得到的:

UnboundLocalError
意味着未定义变量——这实际上总是一个编程错误。故障线路所在的模块在使用变量之前不会检查任何条件。因此,代码假定它必须始终在此点定义

从故障行向上搜索“
数组
”显示它是在大型
if
块的分支中定义的。因此,每个分支都应该在其工作过程中分配这个变量。事实上,他们都这样做了,除了这个。因此,执行此分支是变量最终无法定义的唯一方式

现在,剩下的就是找出该分支中的预期代码应该是什么。看到了吗

  • 所有其他分支都以
    arrays=
    结束,这一行看起来很像,并且
  • 重新分配
    数据
    在这里是一个毫无意义的操作:
    • 它在不同的分支中有不同的类型(例如,在一个
      arrays=data
      和另一个
      arrays=[data]
    • 在其中任何一个中都不会重新分配,因此
      if
      块不应该将其转换为某种公共表示形式-因此,它很可能不会被进一步使用

代码的作者很可能是打字错误,这一定是他们想要的。确认它是一个数组,因此将其直接分配给称为“数组”的对象看起来是合法的。

有时,当您将Pandas系列或数据帧传递给keras估计器时,会出现此错误。 就这么做吧

df_train_x = df_train_x.values
df_test_x = df_test_x.values
然后


显示声明TrainingIP和trainingOut变量的代码。如果可能的话,也向我们展示数据。好的,我已经添加了变量声明。谢谢你的帮助。只是一个预感,你能试着将批量大小增加到2的幂或其他吗?或者批量大小为32?看看我的变量声明实际上就是答案。我的印象是train_test_split返回数组,但它仍然返回一个数据帧。当通过培训价值观时,问题就消失了。谢谢你的帮助。我想我需要更加注意我的声明。可能是重复的
df_train_x = df_train_x.values
df_test_x = df_test_x.values
estimator.fit(df_train_x , df_train_y)