Creek
Creek

Reputation: 215

ValueError: Error when checking model target: the list of Numpy arrays that you are passing to your model is not the size the model expected

I have multi-output

out = [Dense(19, name='one', activation='softmax')(out),
           Dense(19, name='two', activation='softmax')(out),
           Dense(19, name='three', activation='softmax')(out),
           Dense(19, name='four', activation='softmax')(out)]


model.fit(reshape_train_X,  y_onehot, batch_size=400, epochs=100, verbose=2,
          validation_split=0.2, callbacks=callbacks_list)

This is my y_onehot format:

[array([[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]],
      dtype=uint8), array([[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0]],dtype=uint8),.....]

And I got this error message

ValueError: Error when checking model target: the list of Numpy arrays that you are passing to your model is not the size the model expected. Expected to see 4 array(s), but instead got the following list of 5000 arrays: [array([[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 ...

I don't know why this error occurs when y_onehot has four lists in the array.

len(y_onehot): 5000

print("y_onehot", y_onehot[0])

[[1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0]]

print("y_onehot", len(y_onehot[0]))

y_onehot 4

I try this . But still didn't work.

Thanks for your help.

Upvotes: 2

Views: 1179

Answers (1)

Marco Cerliani
Marco Cerliani

Reputation: 22031

this is a dummy example. pay attention to your y. you have to pass in fit each output separated

inp = Input((50))
x = Dense(32)(inp)
x1 = Dense(19, name='one', activation='softmax')(x)
x2 = Dense(19, name='two', activation='softmax')(x)
x3 = Dense(19, name='three', activation='softmax')(x)
x4 = Dense(19, name='four', activation='softmax')(x)

model = Model(inp, [x1,x2,x3,x4])
model.compile('adam', 'categorical_crossentropy')

X = np.random.uniform(0,1, (5000,50))
y1 = np.random.randint(0,2, (5000,19))
y2 = np.random.randint(0,2, (5000,19))
y3 = np.random.randint(0,2, (5000,19))
y4 = np.random.randint(0,2, (5000,19))

model.fit(X, [y1,y2,y3,y4], epochs=10)

Upvotes: 1

Related Questions