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

TensorFlow Keras模型编译成功但summary未定义及数据适配错误求助

Keras模型未构建导致的异常解决

问题现象

使用Python 3.10.12 + TensorFlow 2.16.1定义Sequential模型后,出现两个异常:

  1. model.summary()输出显示所有层参数为0、输出形状为?,提示模型未构建;
  2. 运行训练脚本时触发ValueError,提示无法识别numpy.ndarray类型的输入数据。

模型构建代码

model = Sequential()
#model.add(embedding_layer)  # Add embedding layer if applicable
model.add(Dense(num_dense_units, activation='relu'))  # First dense layer with ReLU activation
model.add(Dense(len(set(cluster_labels)), activation='softmax'))  # Output layer with softmax for multi-class classification

# Model compilation
#model.compile(loss=CategoricalCrossentropy(), optimizer=Adam(), metrics=['accuracy'])
model.compile(loss=CategoricalCrossentropy(from_logits=True), optimizer=Adam(learning_rate=0.001), metrics=['accuracy'])
print(model.summary())

model.summary()输出结果(翻译后)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┓
┃ 层(类型)                         ┃ 输出形状                ┃         参数数量 ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━┩
│ embedding (Embedding)                │ ?                           │     0(未构建) │
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
│ dense_2 (Dense)                      │ ?                           │     0(未构建) │
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
│ dense_3 (Dense)                      │ ?                           │     0(未构建) │
└──────────────────────────────────────┴─────────────────────────────┴─────────────────┘
 总参数: 0 (0.00 B)
 可训练参数: 0 (0.00 B)
 不可训练参数: 0 (0.00 B)
None

运行时错误信息(翻译后)

File "/usr/local/lib/python3.10/dist-packages/keras/src/utils/traceback_utils.py", line 122, in error_handler
    raise e.with_traceback(filtered_tb) from None
  File "/usr/local/lib/python3.10/dist-packages/keras/src/trainers/data_adapters/__init__.py", line 120, in get_data_adapter
    raise ValueError(f"Unrecognized data type: x={x} (of type {type(x)})")
ValueError: 无法识别数据类型: x=[[ 0  0  0 ... 10  4  7]
 [ 0  0  0 ... 10  4  7]
 [ 0  0  0 ... 10  4  7]
 ...
 [ 0  0  0 ...  1  6 30]
 [ 0  0  0 ...  1  6 30]
 [ 0  0  0 ...  1  6 30]] (类型为 <class 'numpy.ndarray'>)

原因分析

  1. 模型未构建:Keras的Sequential模型需要明确输入形状才能计算各层参数和输出形状。代码中第一个Dense层未指定input_shape,也未通过喂入数据触发模型构建,导致所有层处于未初始化状态,参数为0、输出形状未知。
  2. 损失函数配置错误:输出层使用了softmax激活函数,但编译时设置了CategoricalCrossentropy(from_logits=True)。from_logits=True仅适用于输出层无激活函数的场景,该配置会导致损失计算逻辑混乱,进一步影响模型对输入数据的处理。
  3. 输入数据识别失败:模型未构建时,Keras无法确定输入数据的预期维度,因此数据适配器无法正确解析numpy.ndarray类型的输入,抛出识别错误。

解决步骤

1. 显式指定输入形状

在第一个Dense层中添加input_shape参数(替换input_dim为你的输入特征维度),让模型明确输入维度,触发构建:

model.add(Dense(num_dense_units, activation='relu', input_shape=(input_dim,)))

或者使用Input层作为模型的第一层:

model.add(Input(shape=(input_dim,)))
model.add(Dense(num_dense_units, activation='relu'))

2. 修正损失函数配置

由于输出层使用了softmax,需移除from_logits=True参数(默认from_logits=False):

model.compile(loss=CategoricalCrossentropy(), optimizer=Adam(learning_rate=0.001), metrics=['accuracy'])

如果希望使用from_logits=True,则需移除输出层的softmax激活函数:

model.add(Dense(len(set(cluster_labels))))  # 移除softmax
model.compile(loss=CategoricalCrossentropy(from_logits=True), optimizer=Adam(learning_rate=0.001), metrics=['accuracy'])

3. 验证模型构建

修改后运行model.summary(),会显示各层的正确输出形状和参数数量,说明模型已成功构建。此时再传入numpy.ndarray类型的输入数据,即可正常训练。

完整修正代码示例

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.losses import CategoricalCrossentropy
from tensorflow.keras.optimizers import Adam

# 假设输入特征维度为input_dim,需替换为实际值
input_dim = 100  # 示例值,根据你的数据调整
num_dense_units = 64
cluster_labels = [0,1,2,3]  # 示例标签

model = Sequential()
model.add(Dense(num_dense_units, activation='relu', input_shape=(input_dim,)))
model.add(Dense(len(set(cluster_labels)), activation='softmax'))

model.compile(loss=CategoricalCrossentropy(), optimizer=Adam(learning_rate=0.001), metrics=['accuracy'])
print(model.summary())

内容的提问来源于stack exchange,提问作者PHcoDer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 00:05:59