[英]Keras model.fit UnboundLocalError
我還是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
這是我如何得到它:
UnboundLocalError
意味着未定義變量 - 這實際上總是編程錯誤。 在使用變量之前,故障線所屬的塊不會檢查任何條件。 因此,代碼假定它必須始終由此點定義。
從故障線上搜索“ arrays
”表明它是在一個大的if
塊的分支中定義的。 因此,每個分支都應該在其工作過程中最終分配此變量。 事實上,他們都這樣做,除了這一個。 因此,執行此分支的執行是變量最終未定義的唯一方式。
現在,剩下的就是找出該分支中的預期代碼應該是什么。 看見那個
arrays = <something>
結尾,這條線看起來就像它一樣 data
是一個毫無意義的操作:
arrays = data
,在另一個arrays = [data]
) if
塊不應該將其轉換為某種常見的表示形式 - 因此,它很可能不會被進一步使用 代碼的作者很可能寫了一個拼寫錯誤,這是他們一定想要的。 查找Pandas.DataFrame.values
確認它是一個數組數組,因此將它直接賦值給稱為“數組”的東西看起來是合法的。
當您將Pandas系列或數據幀傳遞給keras估算器時,有時會出現此錯誤。 只需這樣做
df_train_x = df_train_x.values
df_test_x = df_test_x.values
然后
estimator.fit(df_train_x , df_train_y)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.