核心要点
能说清三种建模范式:Sequential 适合单输入单输出线性堆叠,Functional API 适合多输入/分支/共享层,子类化 Model 适合完全自定义 call
能讲标准训练流 compile(配 optimizer/loss/metrics)→ fit → evaluate/predict
能指出 Dense 不加 softmax 时损失需 from_logits=True,二者只能取其一
能写出最小 MNIST:Flatten + Dense(128, relu) + Dense(10),用 SparseCategoricalCrossentropy
标准回答
在 TensorFlow 中构建 神经网络 主要有三种方式:
1. Sequential API(线性堆叠)
model = tf.keras.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(10),
])2. Functional API(多输入/分支)
inputs = tf.keras.Input(shape=(28, 28))
x = tf.keras.layers.Flatten()(inputs)
outputs = tf.keras.layers.Dense(10)(x)
model = tf.keras.Model(inputs, outputs)3. 子类化 Model(完全自定义 call)
训练:
model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics=['accuracy'])
model.fit(x_train, y_train, epochs=5, validation_split=0.1)数据用 tf.data.Dataset 可扩展大规模管道。部署 model.save('saved_model')。详见 深度学习基础。
常见误区
⚠️ 常见踩坑
最后一层已加 activation="softmax" 却又设 from_logits=True,相当于对概率再做一次 softmax,loss 收敛异常、精度上不去;另一个是 Sequential 首层不写 input_shape 又在 build/fit 前调 model.summary(),因权重尚未创建而报错。
追问
追问 1:from_logits=True 什么意思?
追问 2:Functional 和 Sequential 如何选?
题库专题:PyTorch 的 Sequential 模型是什么?与 Module 有何区别?单输入单输出、层逐个线性堆叠用 Sequential,最简洁;一旦需要多输入/多输出、分支合并、残差连接、共享层,就必须用 Functional API(以张量为节点连成图)。需要在 forward 里写动态控制流则子类化 Model。
题库延伸:与本追问相关的专题题 → PyTorch 的 Sequential 模型是什么?与 Module 有何区别?
延伸学习
与本题相关的知识库文章、术语、工具与行业资讯。
📰 AI 资讯
🛠️ AI 工具
- Pytorch
Meta 开源的深度学习框架,100K+ stars。以动态计算图和 Pythonic 风格著称,在学术界和工业界都有广泛应用,支持分布式训练、移动端部署和 ONNX 导出
- Tensorflow
全球最流行的机器学习框架之一,195K+ stars。Google 开源的端到端 ML 平台,支持 TensorFlow、Keras 等多种 API,覆盖深度学习、强化学习、移动端部署等全场景,是 AI 工程师的必备工具
- Keras
深度学习框架,64,020+ stars。高级神经网络 API,支持 TensorFlow、JAX、PyTorch 多后端。以用户友好著称,让深度学习从实验到生产的转化变得简单高效