You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 11:24:23