首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算均方误差返回y_true和y_pred的输出数不同(1!=10)

计算均方误差返回y_true和y_pred的输出数不同(1!=10)
EN

Stack Overflow用户
提问于 2020-04-02 17:19:27
回答 3查看 4.8K关注 0票数 1

对于深度学习,我真的是个新手。我想做一个任务:根据测试数据对模型进行评估,并计算预测混凝土强度与实际混凝土强度之间的均方误差。您可以使用Scikit-learn中的mean_squared_error函数。

下面是我的代码:

代码语言:javascript
复制
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)

现在为了评估均方误差,我写了这个:

代码语言:javascript
复制
from sklearn.metrics import mean_squared_error
predicted_y = model.predict(xTest)
mean_squared_error(yTest, predicted_y)

我得到了这个错误:

代码语言:javascript
复制
y_true and y_pred have different number of output (1!=10)

我的predicted_y形状是:(309,10)

我用谷歌搜索了一下,但我真的找不到解决这个问题的答案。我不知道我的代码出了什么问题。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-04-02 19:44:13

您的y_test数据形状是(N,1),但是因为您在输出层中放置了10个神经元,所以您的模型做出了10个不同的预测,这是错误的。

您需要将输出层中的神经元数量更改为1,或者添加一个只有1个神经元的新输出层。

下面的代码可能适合您。

代码语言:javascript
复制
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)
票数 5
EN

Stack Overflow用户

发布于 2020-04-02 17:23:24

实际上,您要检查的是y_testmean_squared_errorpredicted_y

你必须检查你的模型在x_test上的预测,这就是预测:

代码语言:javascript
复制
predicted_y = model.predict(x_test)

然后,您可以计算误差:

代码语言:javascript
复制
mean_squared_error(y_test, predicted_y)
票数 3
EN

Stack Overflow用户

发布于 2021-06-18 23:24:07

代码语言:javascript
复制
y_pred = model.predict(x_test).sum(axis=1)

试试这个,它对我很管用

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60988136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档