2017-06-15 33 views
3

我加載虛擬數據到神經網絡,但是我收到一個錯誤,我似乎無法調試:Keras神經網絡錯誤:設置一個數組元素與序列

這裏是我的數據,可視化:

df: 
Label   Mar 
0 | [[.332, .326], [.058, .138]] 
0 | [[.234, .246], [.234, .395]] 
1 | [[.084, .23], [.745, .923]], 

我試圖用「月」列來預測「標籤」欄(我知道這個數據是沒有意義的,它只是類似於我的真實數據)。這裏是我的神經網絡代碼:

model = Sequential() 
model.add(Dense(3, input_dim=(1), activation='relu')) 
model.add(Dense(1, activation='sigmoid')) 
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) 
X = df['Mar'] 
Y = pd.get_dummies(df['Label']) 
model.fit(X, Y, epochs=150, batch_size=10) 

下面是創建我的樣本數據的代碼:

Sample = [{'Label': 0, 'Mar': [[.332, .326], [.058, .138]]}, 
{'Label': 0, 'Mar': [[.234, .246], [.013, .592]]}, 
{'Label': 1, 'Mar': [[.084, .23], [.745, .923]]}] 

df = pd.DataFrame(Sample) 

當我得到這個代碼的最後一行,我得到這個錯誤:

Epoch 1/150 
----------------------------------------------------------------------- 
ValueError       Traceback (most recent call last) 
<ipython-input-271-3d2506918d89> in <module>() 
----> 1 model.fit(X, Y, epochs=150, batch_size=10) 

/usr/local/lib/python2.7/site-packages/keras/models.pyc in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, **kwargs) 
    854        class_weight=class_weight, 
    855        sample_weight=sample_weight, 
--> 856        initial_epoch=initial_epoch) 
    857 
    858  def evaluate(self, x, y, batch_size=32, verbose=1, 

/usr/local/lib/python2.7/site-packages/keras/engine/training.pyc in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, **kwargs) 
    1496        val_f=val_f, val_ins=val_ins, shuffle=shuffle, 
    1497        callback_metrics=callback_metrics, 
-> 1498        initial_epoch=initial_epoch) 
    1499 
    1500  def evaluate(self, x, y, batch_size=32, verbose=1, sample_weight=None): 

/usr/local/lib/python2.7/site-packages/keras/engine/training.pyc in _fit_loop(self, f, ins, out_labels, batch_size, epochs, verbose, callbacks, val_f, val_ins, shuffle, callback_metrics, initial_epoch) 
    1150     batch_logs['size'] = len(batch_ids) 
    1151     callbacks.on_batch_begin(batch_index, batch_logs) 
-> 1152     outs = f(ins_batch) 
    1153     if not isinstance(outs, list): 
    1154      outs = [outs] 

/usr/local/lib/python2.7/site-packages/keras/backend/tensorflow_backend.pyc in __call__(self, inputs) 
    2227   session = get_session() 
    2228   updated = session.run(self.outputs + [self.updates_op], 
-> 2229        feed_dict=feed_dict) 
    2230   return updated[:len(self.outputs)] 
    2231 

/usr/local/lib/python2.7/site-packages/tensorflow/python/client/session.pyc in run(self, fetches, feed_dict, options, run_metadata) 
    776  try: 
    777  result = self._run(None, fetches, feed_dict, options_ptr, 
--> 778       run_metadata_ptr) 
    779  if run_metadata: 
    780   proto_data = tf_session.TF_GetBuffer(run_metadata_ptr) 

/usr/local/lib/python2.7/site-packages/tensorflow/python/client/session.pyc in _run(self, handle, fetches, feed_dict, options, run_metadata) 
    952    np_val = subfeed_val.to_numpy_array() 
    953   else: 
--> 954    np_val = np.asarray(subfeed_val, dtype=subfeed_dtype) 
    955 
    956   if (not is_tensor_handle_feed and 

/usr/local/lib/python2.7/site-packages/numpy/core/numeric.pyc in asarray(a, dtype, order) 
    529 
    530  """ 
--> 531  return array(a, dtype, copy=False, order=order) 
    532 
    533 

ValueError: setting an array element with a sequence. 

我現在懷疑它與我的輸入列是列表,而不是np數組有關?但是,我已經嘗試將它們放入數組中,而且我仍然遇到同樣的錯誤。會真的愛和欣賞幫助!

編輯我試過一個熱門的編碼標籤字段,因爲我在網上找到了可能有所幫助的地方。它並沒有在這一點上

+0

是什麼'Mar'意味着在這種情況下?每個輸入樣本是2 x 2矩陣嗎?您已經設置了輸入層,以便它接收一個神經元並將一個神經元輸出到隱藏層。您的數據的維度與您設置NN的方式相比並不相符。 – rayryeng

+0

Mar並不意味着什麼,它只是一組虛擬數據。至於你的其他觀點,我認爲這可能是問題所在,但我已經嘗試過多次改變NN形狀的期望,並且沒有接受任何東西。你有什麼建議? –

+0

我修復了尺寸大小,使其不會抱怨。輸入形狀是(3,)。問題仍然是「ValueError:使用序列設置數組元素」 –

回答

4

一對夫婦在這裏的問題幫助,

  1. 的輸入是錯誤的形狀
  2. 的輸入數組和列表的混合物。

一個可能的解決辦法是使用keras.layers.Flatten重塑你的數據,並pd.Series.tolist()均一化輸入數組的數據類型:

model = Sequential() 
model.add(Flatten(input_shape=(2,2))) 
model.add(Dense(3, activation='relu')) 
model.add(Dense(1, activation='sigmoid')) 
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) 
X = df['Mar'].tolist() 
Y = df['Label'] 
model.fit(X, Y, epochs=150, batch_size=10)