python - Keras model.fit UnboundLocalError

标签 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-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() 中。我的模型是这样的:

model = Sequential()
model.add(Dense(3, activation='sigmoid', input_dim=8))
model.add(Dropout(0.5))
model.add(Dense(10, activation='sigmoid'))

model.compile(loss='mean_squared_error', optimizer='sgd', metrics=['accuracy'])
print trainingInp
print trainingOut
model.fit(trainingInp, trainingOut, epochs=10, batch_size=1)

我打印我的数据以确保我没有传递空数据,并且它在进入 model.fit() 之前正确打印。

我不太确定如何解决它,因为我真的不知道问题出在哪里。问题似乎出在 batch_size,但我认为批量大小为 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

Created a pull request.


这是我得到它的方式:

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

从故障行向上搜索“arrays”表明它被定义在一个大的if的分支中。堵塞。所以,每个分支最终都应该在其工作过程中分配这个变量。事实上,他们都这样做,除了这个。因此,采用此分支的执行是变量最终未定义的唯一途径。

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

  • 所有其他分支都以 arrays = <something> 结尾本身,这条线看起来就像它,并且
  • 重新分配 data在这里是一个毫无意义的操作:
    • 它在不同的分支中有不同的类型(例如在一个 arrays = data 和另一个 arrays = [data] )
    • 未在其中任何一个中重新分配,因此 if block 不应该将它转换为一些常见的表示形式——因此,它很可能不会在
    • 上进一步使用

代码的作者很可能打错了字,而这正是他们本意如此。 Looking up Pandas.DataFrame.values 确认它是一个数组数组,因此将它直接分配给称为“数组”的东西看起来是合法的。

关于python - Keras model.fit UnboundLocalError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46999519/

相关文章:

python - 消息 'The Twitter REST API v1 is no longer active. Please migrate to API v1.1'

python - 类协程的一部分不是协程。为什么?

python - 仅当元素不存在时才将元素添加到列表中的最有效方法是什么?

tensorflow - 如何在训练后获得单个测试实例的嵌入表示

tensorflow - 基于AUC的提前停止

python - 如果日期字符串中有字符或负数,我该如何编写语句?

python - 删除 pandas 数据框中的字符串

python - Keras fit_generator 上的错误,多运行了几步

python - ImageData 生成器中的 validation_split 返回 0 个图像

python - 在构建编码器/解码器模型之前训练自动编码器是否有效?