如何在Keras中将矩阵输入转为单值输出并解决样本数不匹配问题
解决Keras输入输出样本数不匹配问题
错误原因
你的输入矩阵X包含5个样本(每行对应一个样本,共5行),但输出Y仅包含1个样本,两者样本数量不匹配,导致Keras抛出样本数不一致的错误。根据你的目标,分两种场景给出修改方案:
场景1:每个输入样本对应一个输出值(常规回归任务)
如果需求是让模型学习每行输入对应一个输出值,需为每个输入样本分配对应标签,保证X和Y的样本数一致(均为5)。
修改后的代码:
import numpy as np from keras.models import Sequential from keras.layers import Dense # Input (5个样本,每个样本4个特征) X = np.array([[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6], [4, 5, 6, 7], [5, 6, 7, 8]]) # Output:每个样本对应一个值,共5个(可替换为真实业务标签) Y = np.array([-1, -2, -3, -4, -5]) # 创建模型 model = Sequential() model.add(Dense(10, input_dim=4, activation='relu')) model.add(Dense(1, activation='linear')) # 编译模型 model.compile(loss='mean_squared_error', optimizer='adam') # 训练:样本数匹配,可正常运行 model.fit(X, Y, epochs=10, batch_size=1, verbose=1) # 预测 new_data = np.array([[6, 7, 8, 9]]) pred = model.predict(new_data) print("Prediction:", pred)
场景2:整个输入矩阵作为单个样本,输出单个值
如果需求是把整个5×4的矩阵作为一个输入样本,输出一个值,需调整X的形状,让它成为1个样本(样本维度放在第一维),同时保持Y的样本数为1。
修改后的代码:
import numpy as np from keras.models import Sequential from keras.layers import Dense # Input:将5×4矩阵展平为1个样本,形状变为(1, 20) X = np.array([[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6], [4, 5, 6, 7], [5, 6, 7, 8]]).reshape(1, -1) # Output:1个样本对应1个值 Y = np.array([-1]) # 创建模型:输入维度改为20(展平后的特征数) model = Sequential() model.add(Dense(10, input_dim=20, activation='relu')) model.add(Dense(1, activation='linear')) # 编译模型 model.compile(loss='mean_squared_error', optimizer='adam') # 训练:样本数均为1,可正常运行 model.fit(X, Y, epochs=10, batch_size=1, verbose=1) # 预测:新数据需保持相同形状(1个样本,展平为20维) new_data = np.array([[6, 7, 8, 9], [7, 8, 9, 10], [8, 9, 10, 11], [9, 10, 11, 12], [10, 11, 12, 13]]).reshape(1, -1) pred = model.predict(new_data) print("Prediction:", pred)
内容的提问来源于stack exchange,提问作者jones jones
相关产品推荐
相关产品推荐

