Keras神经网络错误:使用序列设置数组元素 [英] Keras Neural Network Error: Setting an Array Element with a Sequence
问题描述
我正在将虚拟数据加载到神经网络中,但是却收到了我似乎无法调试的错误:
I'm loading dummy data into a neural network, but I'm receiving an error I can't seem to debug:
这是我的数据,可视化了:
Here is my data, visualized:
df:
Label Mar
0 | [[.332, .326], [.058, .138]]
0 | [[.234, .246], [.234, .395]]
1 | [[.084, .23], [.745, .923]],
我正在尝试使用"Mar"列来预测"Label"列(我知道此数据没有意义,它与我的真实数据相似).这是我的神经网络代码:
I'm trying to use the 'Mar' column to predict the 'Label' column (I know this data makes no sense, its just similar to my real data). Here is my neural network code:
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)
以下是创建我的示例数据的代码:
Here is the code to create my sample data:
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)
到达此代码的最后一行时,出现此错误:
When I get to the final row of this code, I get this error:
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数组)有关吗?但是,我尝试将它们首先放入数组,但仍然遇到相同的错误.真的会喜欢并感谢您的帮助!
I now suspect it has something to do with my input columns being list, not np arrays? However, I've tried making them into arrays first and I'm still getting the same error. Would really love and appreciate help!!
编辑我尝试了一种对标签字段进行热编码的方法,因为我发现在网上某个地方可能会有所帮助.目前还没有帮助
Edit I've tried one hot encoding the label field, as I found somewhere online that that may help. It hasn't helped at this point
推荐答案
这里有几个问题,
- 输入的形状错误
- 输入是数组和列表的混合.
一种可能的解决方案是使用keras.layers.Flatten
重塑数据,并使用pd.Series.tolist()
统一输入数组的数据类型:
One possible solution would be to use keras.layers.Flatten
to reshape your data, and pd.Series.tolist()
to uniformize the data type of the input array:
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)
这篇关于Keras神经网络错误:使用序列设置数组元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!