Вычисление среднеквадратичной ошибки y_true и y_pred имеют различное количество выходных данных (1! = 10) - PullRequest
0 голосов
/ 02 апреля 2020

Я действительно новичок с глубоким обучением. Я хочу выполнить задачу, которая требует: Оценить модель по данным испытаний и вычислить среднеквадратичную ошибку между прогнозируемой прочностью бетона и фактической прочностью бетона. Вы можете использовать функцию mean_squared_error из Scikit-learn.

вот мой код:

import pandas as pd
from tensorflow.python.keras import Sequential
from tensorflow.python.keras.layers import Dense
from sklearn.model_selection import train_test_split

concrete_data = pd.read_csv('https://cocl.us/concrete_data')

n_cols = concrete_data.shape[1]
model = Sequential()
model.add(Dense(units=10, activation='relu', input_shape=(n_cols-1,)))

model.compile(loss='mean_squared_error',
          optimizer='adam')


y = concrete_data.Cement
x = concrete_data.drop('Cement', axis=1)
xTrain, xTest, yTrain, yTest = train_test_split(x, y, test_size = 0.3)

model.fit(xTrain, yTrain, epochs=50)

и теперь для оценки среднеквадратичной ошибки я написал следующее:

from sklearn.metrics import mean_squared_error
predicted_y = model.predict(xTest)
mean_squared_error(yTest, predicted_y)

и я получил эту ошибку:

y_true and y_pred have different number of output (1!=10)

моя прогнозируемая форма: (309, 10)

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

Ответы [ 2 ]

4 голосов
/ 02 апреля 2020

Ваша y_test форма данных (N, 1), но поскольку вы поместили 10 нейронов в выходной слой, ваша модель делает 10 различных предсказаний, что является ошибкой.

Вам необходимо изменить количество нейронов в выходной слой до 1 или добавить новый выходной слой, который имеет только 1 нейрон.

Код ниже, вероятно, работает для вас.

import pandas as pd
from tensorflow.python.keras import Sequential
from tensorflow.python.keras.layers import Dense
from sklearn.model_selection import train_test_split

concrete_data = pd.read_csv('https://cocl.us/concrete_data')

n_cols = concrete_data.shape[1]
model = Sequential()
model.add(Dense(units=10, activation='relu', input_shape=(n_cols-1,)))           
model.add(Dense(units=1))
model.compile(loss='mean_squared_error',
          optimizer='adam')


y = concrete_data.Cement
x = concrete_data.drop('Cement', axis=1)
xTrain, xTest, yTrain, yTest = train_test_split(x, y, test_size = 0.3)

model.fit(xTrain, yTrain, epochs=50)
1 голос
/ 02 апреля 2020

На самом деле вы пытаетесь проверить mean_squared_error из y_test и predicted_y

. Вы должны проверить, что ваша модель предсказывает на x_test, что является предсказанием:

predicted_y = model.predict(x_test)

Тогда вы можете рассчитать ошибку:

mean_squared_error(y_test, predicted_y)
...