4

I have a problem with the input of multiple data sources in my neural network. My dataframe is:

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

The input is related to the first 4 columns, the output is the last one. When I train my neural network I get 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:

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.

Is this due to the fact that I have arrays in some columns, and integers in other columns? I thought Keras could handle that, but maybe I'm wrong. It's not clear to me how to handle concatenated data from multiple sources. Thank you!

8
  • The error is produced inside numpy, not keras. It is unclear which part of your code produces it, you should include full code and the python traceback. Commented Jul 23, 2018 at 6:04
  • You are right, I edited including the full code and the traceback. I hope it's more clear now. Commented Jul 23, 2018 at 8:37
  • @MauroComi I'm having this same issue! Seems to be a problem when rows in the training set contain values mixed between numeric and array...if I remove the columns that contain array values then it works Commented Mar 19, 2019 at 2:16
  • Why would you want to mix numeric and array in the same column? For example, what would it mean if the 1st row is "3" and the 2nd row is "[0,1,0]"? Commented Mar 19, 2019 at 3:57
  • @JLewkovich You and Mauro are misunderstanding the concept of input values (and neurons in a NN): basically the input to the models are always a set of numerical values. It corresponds to a set of neurons where each neuron has a single numerical value as its output. So this means that you can't consider [True, True, False] or [False, True, True] as an individual input value. Rather, they both consist of 3 separate values (or you can convert them to one or multiple values). As @shadi has pointed out in her answer, one approach is to flatten the array so you have 8 input values (not 4). Commented Mar 19, 2019 at 17:43

3 Answers 3

3

The list inside the numpy array needs to be flattened before insertion.

array is [[False, False, True], 4, -10, [False, True, False], 1] in the OP implementation,

and should be flattened to [False, False, True, 4, -10, False, True, False, 1].

Here is a working jupyter notebook demonstrating this.

Sign up to request clarification or add additional context in comments.

Comments

1

First of all, convert the input array into numpy array and convert the categorical boolean inputs into numbers. Then, give input dimension = 8 instead of 4.

1 Comment

It doesn't work, the error is the same. After converting, the numpy array contains [list[1,0,1], 3, -1, [0,1,1]] and it gives the same error
1

You are trying to input 2 different types of data to the neuron of a neural network. Neural networks isn't a magical box to throw random information into it and expect it to give a reasonable output.

NN's take only numbers as input. When you flatten your data

[False, False, True, 4, -10, False, True, False, 1] to this format, what you are effectively doing is converting it into this [0,0,1,4,-10,0,1,0,1].

I am not really sure what you want from this data but, if you want only 5 features, you can take the majority outcome for those with binary values.

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

can be converted to

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

which effectively means your input is

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

But, before you do this, be sure what you're trying to do makes sense. You need to be able to answer questions like "what does each value represent?", "do i need to normalize the data?", "Would True/False in this dataset make sense?".

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.