我在神经网络中输入多个数据源时遇到了问题。我的数据框是:
0 1 2 3 4 0 [True, True, False] 3 -1 [False, True, True] 1
输入与前四列相关,输出是最后一列。当我训练我的神经网络时,我得到了Setting an array element with a sequence.
def network(): model = Sequential() model.add(Dense(output_dim=50, activation='relu', input_dim=4)) model.add(Dense(output_dim=50, activation='relu')) model.add(Dense(output_dim=50, activation='relu')) model.add(Dense(output_dim=1, activation='softmax')) opt = RMSprop(lr=0.00025) model.compile(loss='mse', optimizer=opt) return model data = pd.DataFrame() state = [0]*3 for i in range(3): state[i]= random.choice([True, False]) move = random.randint(1,4) reward = random.choice([-1, -10, 10]) future_state = [0]*3 for i in range(3): future_state[i] = random.choice([True, False]) Q = 1 array = [state, move, reward, future_state, Q] data = data.append([array]) training = data.drop([4], axis = 1) target = data[4] model = network() model.fit(training,target,epochs=2)
Python 错误跟踪:
Traceback (most recent call last): File "D:/Documents/PycharmProjects/SnakeGA/try.py", line 33, in <module> model.fit(training,target,epochs=2) File "D:\Anaconda3\lib\site-packages\keras\models.py", line 845, in fit initial_epoch=initial_epoch) File "D:\Anaconda3\lib\site-packages\keras\engine\training.py", line 1485, in fit initial_epoch=initial_epoch) File "D:\Anaconda3\lib\site-packages\keras\engine\training.py", line 1140, in _fit_loop outs = f(ins_batch) File "D:\Anaconda3\lib\site-packages\keras\backend\tensorflow_backend.py", line 2075, in __call__ feed_dict=feed_dict) File "D:\Anaconda3\lib\site-packages\tensorflow\python\client\session.py", line 900, in run run_metadata_ptr) File "D:\Anaconda3\lib\site-packages\tensorflow\python\client\session.py", line 1104, in _run np_val = np.asarray(subfeed_val, dtype=subfeed_dtype) File "D:\Anaconda3\lib\site-packages\numpy\core\numeric.py", line 492, in asarray return array(a, dtype, copy=False, order=order)ValueError: setting an array element with a sequence.
这是因为我在某些列中使用了数组,而在其他列中使用了整数吗?我以为Keras可以处理这种情况,但也许我错了。我不清楚如何处理来自多个来源的拼接数据。谢谢!
回答:
在插入之前,需要将numpy数组中的列表展平。
array
在原始实现中是 [[False, False, True], 4, -10, [False, True, False], 1]
,
应该展平为 [False, False, True, 4, -10, False, True, False, 1]
。
这里 有一个演示此操作的jupyter笔记本工作示例。