Я генерирую модель машинного обучения, которая предсказывает состояние машины. Эта машина следует следующему уравнению: A x + B y = x_next, где x, y и x_next - это векторы 1x4. Итак, моя модель ML получает x и y в качестве входов и выходов x_next. Но во время обучения у меня возникла проблема.
data_chosen = random.sample(state_input_next_state_list, int(len(state_input_next_state_list)* 0.8 ))
#x_train = list(map(lambda x: np.array(x[0] + x[1]), data_chosen))
x_data = list(map(lambda x: np.vstack((x[0], x[1])) , data_chosen))
y_data = list(map(lambda x: np.array(x[2]), data_chosen))
print(x_data[0])
print(x_data[0].shape)
print(y_data[0])
print(type(x_data[0]))
# [[-0.10094348 -0.96692593 1.16288356 -1.39277914]
# [ 0. 0.00338941 0. -0.00338941]]
# (2, 4)
# [-0.11705892 -0.97656013 1.13967058 -1.37345424]
# <class 'numpy.ndarray'>
Обратите внимание на результат оператора печати.
model = Sequential()
model.add(Dense(max(x_data[0].shape), input_shape=x_data[0].shape, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(len(y_data[0]), activation='softmax'))
sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy',
optimizer=sgd,
metrics=['accuracy'])
model.fit(x_data, y_data,
epochs=20,
batch_size=len(y_data))
я получаю ошибку
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-105-f8499d1a6973> in <module>
1 model.fit(x_data, y_data,
2 epochs=20,
----> 3 batch_size=len(y_data))
c:\software\python37\lib\site-packages\keras\engine\training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_freq, max_queue_size, workers, use_multiprocessing, **kwargs)
1152 sample_weight=sample_weight,
1153 class_weight=class_weight,
-> 1154 batch_size=batch_size)
1155
1156 # Prepare validation data.
c:\software\python37\lib\site-packages\keras\engine\training.py in _standardize_user_data(self, x, y, sample_weight, class_weight, check_array_lengths, batch_size)
577 feed_input_shapes,
578 check_batch_axis=False, # Don't enforce the batch size.
--> 579 exception_prefix='input')
580
581 if y is not None:
c:\software\python37\lib\site-packages\keras\engine\training_utils.py in standardize_input_data(data, names, shapes, check_batch_axis, exception_prefix)
107 'Expected to see ' + str(len(names)) + ' array(s), '
108 'but instead got the following list of ' +
--> 109 str(len(data)) + ' arrays: ' + str(data)[:200] + '...')
110 elif len(names) > 1:
111 raise ValueError(
ValueError: Error when checking model input: the list of Numpy arrays that you are passing to your model is not the size the model expected. Expected to see 1 array(s), but instead got the following list of 3 arrays: [array([[-0.19053051, -0.38436736, 0.35624974, -0.04435445],
[ 0. , 0.00178595, 0. , -0.00178595]]), array([[-3.92162966e-01, 6.14237515e-01, -6.34753706e-01,
1.04811...