Как отладить «ValueError: Ошибка при проверке ввода» - PullRequest
0 голосов
/ 30 апреля 2019

Я обучил модель, используя керасы, теперь я хочу предсказать значение для каждой строки в панде.Я не знаю, где меняется форма ввода, он выглядит вплоть до этапа прогнозирования.

Я хочу сравнить производительность моего NN до и после загрузки обученных весов.Я уже сохранил свои веса

PS: я свободно следовал инструкциям этого урока

Создайте NN:

def create_model(sample_input): # numpy array so we can use .shape
    model = tf.keras.Sequential([
        layers.Dense(64, activation='relu', 
            input_shape=sample_input.shape),
        layers.Dense(64, activation='relu'),
        layers.Dense(9, activation='softmax')
    ])

    model.compile(optimizer=tf.train.RMSPropOptimizer(0.01),
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

    return model

Прогноз:

right = 0
wrong = 0
for index, row in X_test.iterrows():
    print(row.values.shape)
    prediction = model.predict(row.values)
    if prediction == y_test.values[index]:
        right += 1
    else:
        wrong +=1
print("Correct prediction = ", right)
print("Wrong prediction = ", wrong)

Однако я получаю этот вывод ( примечание: он ломается в первой итерации, обратите внимание, когда я печатаю форму образца для прогнозирования, он соответствует ожидаемому вводу, на который жаловался Керасо):

(11,)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-30-7b432180b212> in <module>
      3 for index, row in X_test.iterrows():
      4     print(row.values.shape)
----> 5     prediction = model.predict(row.values)
      6     if prediction == y_test.values[index]:
      7         right += 1

~/.local/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py in predict(self, x, batch_size, verbose, steps, max_queue_size, workers, use_multiprocessing)
   1094       # batch size.
   1095       x, _, _ = self._standardize_user_data(
-> 1096           x, check_steps=True, steps_name='steps', steps=steps)
   1097 
   1098     if (self.run_eagerly or (isinstance(x, iterator_ops.EagerIterator) and

~/.local/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py in _standardize_user_data(self, x, y, sample_weight, class_weight, batch_size, check_steps, steps_name, steps, validation_split, shuffle)
   2380         feed_input_shapes,
   2381         check_batch_axis=False,  # Don't enforce the batch size.
-> 2382         exception_prefix='input')
   2383 
   2384     if y is not None:

~/.local/lib/python3.6/site-packages/tensorflow/python/keras/engine/training_utils.py in standardize_input_data(data, names, shapes, check_batch_axis, exception_prefix)
    360                 'Error when checking ' + exception_prefix + ': expected ' +
    361                 names[i] + ' to have shape ' + str(shape) +
--> 362                 ' but got array with shape ' + str(data_shape))
    363   return data
    364 

ValueError: Error when checking input: expected dense_9_input to have shape (11,) but got array with shape (1,)

Я пытался обернуть его как model.predict([row.values]), думая, что в какой-то момент keras получает доступ к внутренним элементам, но не повезло, та же проблема.

Я ожидаю, что модель предсказываетчто-то, даже если это не так.

...