Ошибка при попытке предсказать с помощью новых данных в модели Keras

#python #tensorflow #machine-learning #keras #deep-learning

Вопрос:

Я получил набор данных, состоящий из 432 пакетов по 24 точки каждый из них. Форма всего набора данных: (432, 24)

Чтобы привести пример, это была бы одна партия:

 array([917,  15, 829,  87, 693,  71, 627, 359, 770, 303, 667, 367, 754,
       359, 532,  39, 683, 407, 333, 551, 516,  31, 675,  39])
 

с формой (24,)

Я снабжаю модель Keras этой информацией. Никаких проблем. Когда я пытаюсь прогнозировать с помощью новых данных с той же формой (24,):

 array([176,  71, 152,  63, 200,  71, 120,  87, 128,  87, 216, 103, 248,
       126, 144, 150, 128, 206, 192, 206, 112, 277, 216, 269])
 

Моя модель:

   model = keras.Sequential([
        keras.layers.Flatten(batch_input_shape=(None,24)),
        keras.layers.Dense(64, activation=tf.nn.relu),

        keras.layers.Dense(2, activation=tf.nn.sigmoid),
    ])

  model.compile(optimizer='adam',
                loss=tf.losses.categorical_crossentropy,
                metrics=['accuracy'])
 

Возникшая ошибка:

 ValueError: Input 0 of layer dense_24 is incompatible with the layer: expected axis -1 of input shape to have value 24 but received input with shape (None, 1)
 

введите описание изображения здесь

Комментарии:

1. Пожалуйста, покажите свой код, в котором вы на самом деле вызываете модель для прогнозирования ваших данных. Без этого никто не сможет помочь.

2. Обратите внимание, что если вы используете категориальную потерю перекрестной энтропии, вы должны использовать функцию активации tf.nn.softmax вместо tf.nn.sigmoid в последнем слое модели. В качестве альтернативы вы можете не включать функцию активации в последний слой и использовать loss=tf.keras.loss. Категориальная перекрестная энтропия(from_logits=True) в model.compile().

Ответ №1:

Возможно, попробуйте добавить измерение в вашу выборку данных, а затем ввести new_data его в вашу модель, чтобы сделать прогноз:

 import numpy as np


new_data= np.array([176,  71, 152,  63, 200,  71, 120,  87, 128,  87, 216, 103, 248,
       126, 144, 150, 128, 206, 192, 206, 112, 277, 216, 269])

new_data= np.expand_dims(new_data, axis=0)

prediction = model.predict(new_data)
print(prediction)
 

Комментарии:

1. спасибо, что сработало !