python - python ValueError:检查目标时出错:预期dense_2具有形状(12,)但得到形状为(1,)的数组
问题描述
编写程序,使用keras搭建BP神经网络预测数据(回归),程序如下:
bp_dataset = pd.read_csv('Dataset/allGlassStraightThroughTube.csv')
bp_tube_par = bp_dataset.iloc[:, 3:8]
bp_tube_eff = bp_dataset.iloc[:, -1:]
bp_tube_par_X_train,bp_tube_par_X_test,bp_tube_eff_Y_train,bp_tube_eff_Y_test = train_test_split(bp_tube_par,
bp_tube_eff,
random_state=33,
test_size=0.3)
# normalize the train and test Dataset
sc_X = StandardScaler()
sc_Y = StandardScaler()
sc_bp_tube_par_X_train = sc_X.fit_transform(bp_tube_par_X_train)
sc_bp_tube_par_X_test = sc_X.transform(bp_tube_par_X_test)
sc_bp_tube_eff_Y_train = sc_Y.fit_transform(bp_tube_eff_Y_train)
sc_bp_tube_eff_Y_test = sc_Y.transform(bp_tube_eff_Y_test)
# build BP neural network
model = Sequential()
model.add(Dense(12, input_dim=5, activation='relu'))
model.add(Dense(12, activation='linear'))
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy', 'mae'])
model.fit(sc_bp_tube_par_X_train, sc_bp_tube_eff_Y_train, epochs=100)
pre_sc_bp_tube_eff_Y_test = model.predict(sc_bp_tube_par_X_test)
但它错误:
Traceback (most recent call last):
File "C:/Users/win/PycharmProjects/allGlassStraightThroughTube/bpTest.py", line 44, in <module>
model.fit(sc_bp_tube_par_X_train, sc_bp_tube_eff_Y_train, epochs=100)
...
ValueError: Error when checking target: expected dense_2 to have shape (12,) but got array with shape (1,)
你能告诉我原因以及如何纠正吗
解决方案
model.add(Dense(12, activation='linear'))
这里的 12 代表输出维度。在您的情况下,12 是第二层的输入维度。Keras 处理中间层的输入尺寸,您不必明确提及。
你的代码应该是
model.add(Dense(1, activation='linear'))
推荐阅读
- sql - SQL Server:在日期之间的范围内包含最后一个日期
- python - 如何检测点云和三角形网格之间的交集?
- javascript - 渐进式网络应用角度下载/显示 pdf base 64
- python - 使用 matplotlib 绘制天气预报
- vb.net - 我无法在我的第二个表单上执行操作,这将改变我的第一个表单中的某些内容
- node.js - 一切解决后如何调用函数?
- nativescript - CSS 更改未反映在使用“tns 预览”的应用程序中
- c++ - 如何在 C++ 中将向量解析为布尔值?
- assembly - 任意精度整数除法,如何处理 32 位余数?
- postgresql - 如何修复“'utf-8'编解码器无法解码位置 187667 中的字节 0xad:无效起始字节”