TensorFlow Sequential模型输入维度不匹配报错求助
问题原因及解决方案
维度报错的核心原因
报错信息明确说明模型接收到的输入最后一维为28,和你设定的输入维度2499不匹配,你首先需要确认输入数据的实际维度,运行以下代码打印:
print(待输入模型的数组名.shape)
你预期输入形状为(72,2499),但实际预处理、加载数据的过程中大概率出现了操作失误,比如误切片取了部分特征、reshape参数写错、数据集加载错误等,导致最终送入模型的数据维度不符合预期。
你提供的代码本身存在多处错误,也会引发后续运行问题
- 变量名不统一:你定义的激活函数列表变量名为
activation,后续调用时错误写为actv,运行时会直接触发变量未定义报错 - 循环逻辑错误:你在隐藏层的循环内重复添加输出层,会导致模型结构冗余异常,正确逻辑应该是隐藏层全部添加完成后,单独加一次输出层
- 激活函数索引越界风险:你的
activation列表只有3个元素,原代码循环中直接取actv[x]会出现索引值超过列表长度的问题
修正后的模型构建代码:
import tensorflow as tf from tensorflow.keras.layers import Dense layers = [2499, 689, 363, 192] activation = ["relu", "relu", "sigmoid"] # 构建模型 model = tf.keras.Sequential() # 添加输入层+第一层隐藏层 model.add(Dense(layers[1], input_shape=(layers[0],), activation=activation[0])) # 添加后续隐藏层 for layer_idx in range(2, len(layers)-1): model.add(Dense(layers[layer_idx], activation=activation[layer_idx-1])) # 添加最终输出层 model.add(Dense(layers[-1], activation=activation[-1]))
修正代码后确认输入数据维度确实为(72,2499),再运行训练即可解决报错。
内容的提问来源于stack exchange,提问作者Bigyan Subedi
相关产品推荐
相关产品推荐

