Keras 和错误:使用序列设置数组元素

Posted

技术标签:

【中文标题】Keras 和错误:使用序列设置数组元素【英文标题】:Keras and Error: Setting an array element with a sequence 【发布时间】:2018-12-30 08:29:42 【问题描述】:

我的神经网络中的多个数据源的输入存在问题。我的数据框是:

                           0  1  2                   3   4  
0        [True, True, False]  3 -1  [False, True, True]  1

输入与前 4 列相关,输出是最后一列。 当我训练我的神经网络时,我得到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内部产生的,而不是keras。不清楚你的代码是哪部分产生的,你应该包括完整的代码和 python 回溯。 你说得对,我编辑了包括完整代码和回溯。我希望现在更清楚了。 @MauroComi 我也遇到了同样的问题!当训练集中的行包含数字和数组之间的混合值时,这似乎是一个问题......如果我删除包含数组值的列,那么它可以工作 为什么要将数字和数组混合在同一列中?例如,如果第一行是“3”,第二行是“[0,1,0]”,这意味着什么? @JLewkovich 您和 Mauro 误解了输入值(以及 NN 中的神经元)的概念:基本上模型的输入始终是一组数值。它对应于一组神经元,其中每个神经元都有一个单个数值作为其输出。所以这意味着您不能将[True, True, False][False, True, True] 视为单独的输入值。相反,它们都包含 3 个单独的值(或者您可以将它们转换为一个或多个值)。正如@shadi 在她的回答中指出的那样,一种方法是展平数组,这样你就有 8 个输入值(不是 4 个)。 【参考方案1】:

numpy数组里面的列表在插入前需要展平。

array 在 OP 实现中是 [[False, False, True], 4, -10, [False, True, False], 1]

并且应该被展平为[False, False, True, 4, -10, False, True, False, 1]

Here 是一个工作的 jupyter 笔记本,展示了这一点。

【讨论】:

【参考方案2】:

首先,将输入数组转换为numpy数组,并将分类布尔输入转换为数字。然后,输入维度 = 8 而不是 4。

【讨论】:

不起作用,错误是一样的。转换后,numpy 数组包含 [list[1,0,1], 3, -1, [0,1,1]] 并给出相同的错误【参考方案3】:

您正在尝试向神经网络的神经元输入 2 种不同类型的数据。神经网络并不是一个神奇的盒子,可以将随机信息投入其中并期望它给出合理的输出。

NN 只接受数字作为输入。当你扁平化你的数据时

[False, False, True, 4, -10, False, True, False, 1] 到这种格式,你实际上正在做的就是将它转换成这个 [0,0,1,4,-10,0,1,0,1].

我不太确定你想从这些数据中得到什么,但是,如果你只想要 5 个特征,你可以为那些具有二进制值的特征获取多数结果。

arr = [[False, False, True], 4, -10, [False, True, False], 1]

可以转换成

arr = [False,4,-10,False,1]

这实际上意味着您的输入是

arr=[0,4,-10,0,1]

但是,在您执行此操作之前,请确保您尝试执行的操作是有意义的。您需要能够回答诸如“每个值代表什么?”、“我需要对数据进行归一化吗?”、“这个数据集中的真/假有意义吗?”之类的问题。

【讨论】:

以上是关于Keras 和错误:使用序列设置数组元素的主要内容,如果未能解决你的问题,请参考以下文章

python错误使用序列设置数组元素

python错误设置数组元素与序列

在训练 SVM 对图像进行分类时设置具有序列错误的数组元素

Python SVM 设置具有序列错误的数组元素

ValueError:使用序列python,numpy设置数组元素[重复]

Python错误为不同循环设置具有序列的数组元素[重复]