我在神经网络中输入多个数据源时遇到问题。我的数据框是:
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可以解决这个问题,但也许我错了。我不清楚如何处理来自多个来源的串联数据。 谢谢!
答案 0 :(得分:1)
在插入之前,需要将numpy数组中的列表弄平。
array
在OP实现中是[[False, False, True], 4, -10, [False, True, False], 1]
,
,并且应展平为[False, False, True, 4, -10, False, True, False, 1]
。
Here是正在运行的Jupyter笔记本,证明了这一点。
答案 1 :(得分:0)
首先,将输入数组转换为numpy数组,并将分类布尔输入转换为数字。然后,输入尺寸= 8,而不是4。
答案 2 :(得分:0)
您正在尝试向神经网络的神经元输入2种不同类型的数据。神经网络并不是将随机信息投入其中并期望其提供合理输出的神奇盒子。
NN仅接受数字作为输入。整理数据
labels = input[0].str.findall(r'(__label__[\w]+)')
转换为这种格式,您正在有效地将其转换为
[False, False, True, 4, -10, False, True, False, 1]
。
我不太确定您要从此数据中得到什么,但是,如果您只想要5个功能,那么对于具有二进制值的那些功能,您可以取大多数结果。
[0,0,1,4,-10,0,1,0,1]
可以转换为
arr = [[False, False, True], 4, -10, [False, True, False], 1]
这实际上意味着您的输入是
arr = [False,4,-10,False,1]
但是,在执行此操作之前,请确保您要执行的操作有意义。您需要能够回答“每个值代表什么?”,“我是否需要对数据进行规范化”,“此数据集中的True / False是否有意义?”之类的问题。