Ввод 0 последовательного слоя несовместим со слоем: ожидаемая ось -1 входной формы должна иметь значение 6, но полученный ввод с формой (нет, 1)

#python #numpy #tensorflow #machine-learning #keras

Вопрос:

В настоящее время я пишу программу регрессии машинного обучения на Python с использованием Keras.

Я получаю несовместимую ошибку формы ввода… Пожалуйста, помогите!

Вот мой код

 import numpy as np
import pandas as pd
from keras import layers
from keras import models
from matplotlib import pyplot as plt
from sklearn.model_selection import train_test_split


data = pd.read_csv('path/to/csv', sep=',')
y = data.points

X = data.copy(deep=True)
X.drop(columns=['points'], inplace=True)

X_train, X_test, Y_train, Y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = models.Sequential()

model.add(layers.Dense(64, activation='relu', name='dense_1', input_shape=(6,)))
model.add(layers.Dense(64, activation='relu', name='dense_2'))
model.add(layers.Dense(1, name='output'))

model.compile(optimizer='adam', loss='mse', metrics=['mae'])

results = model.evaluate(X_test, Y_test) 
print("Results: ", results)

arr = np.array([0.04, 0.01, 0.35, 0, 0, 0.001])
prediction = model.predict(arr.reshape(-1, 1))
print(prediction)
 

Вот образец набора данных:

образец набора данных

Столбец «Точки» — это тот, который нужно предсказать.

В predict строке я получаю эту ошибку

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

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

1. Измените свою линию прогнозирования следующим образом: prediction = model.predict(arr.reshape((1,6))

2. Вау, спасибо @Kaveh!!! Теперь это работает 😀

Ответ №1:

Модель ожидает первое измерение в виде пакета, а другие измерения основаны на вашей входной модели. Итак, если входные (6,) данные вашей модели и вы хотите спрогнозировать один образец , вам следует передать данные с формой (1,6) .

Итак, измените свою линию прогнозирования следующим образом:

 prediction = model.predict(arr.reshape((1,-1)))