TensorFlow报错:Normalization层维度不匹配(ValueError)求助
问题解决:Normalization层维度不匹配ValueError
问题根源
代码存在一处关键逻辑错误:
- 你先通过
train_features.pop('HCO3')移除了训练集的标签列,此时train_features是7维特征数据 - 但随后执行
train_features = np.asarray(train_dataset.copy()).astype('float32'),这里的train_dataset是原始数据集(包含'HCO3'标签列),导致训练用的train_features变成8维 - 测试用的
test_features是执行test_features.pop('HCO3')后的7维数据,Normalization层适配了8维的训练数据,测试时输入7维数据自然触发维度不匹配错误
修正后的代码
#Split labels train_features = train_dataset.copy() test_features = test_dataset.copy() train_labels = train_features.pop('HCO3') test_labels = test_features.pop('HCO3') # 修正:使用已经移除标签的train_features转换数组,而非原始数据集 train_features = np.asarray(train_features).astype('float32') # 同步修正测试集特征的格式,确保和训练集一致 test_features = np.asarray(test_features).astype('float32') #Normalization normalizer = tf.keras.layers.Normalization(axis=-1) normalizer.adapt(np.array(train_features)) first = np.array(train_features[:1]) linear_model = tf.keras.Sequential([ normalizer, layers.Dense(units=1) ]) #Compilation linear_model.compile( optimizer=tf.keras.optimizers.Adam(learning_rate=0.1), loss='mean_absolute_error' ) history = linear_model.fit( train_features, train_labels, epochs=100, # Suppress logging. verbose=0, # Calculate validation results on 20% of the training data. validation_split = 0.2) #Track error for later test_results = {} test_results['linear_model'] = linear_model.evaluate(test_features, test_labels, verbose = 0)
关键修正点
- 将
train_features = np.asarray(train_dataset.copy()).astype('float32')改为train_features = np.asarray(train_features).astype('float32'),确保训练特征是移除标签后的7维数据 - 新增
test_features = np.asarray(test_features).astype('float32'),让测试特征的格式和训练特征完全对齐,避免潜在的类型或维度问题
内容的提问来源于stack exchange,提问作者Rena W
相关产品推荐
相关产品推荐

