郭震 AI公众号:郭震AI

12 Keras框架从零教程系列:建立自定义模型

发布日期:

最近更新:

分类: Keras

预计阅读: 4 分钟

阅读次数: 0

预计阅读4 分钟
结构重点6 个
图文要点6 张
正文规模1.5k 字

整理说明

这篇内容怎么整理

郭震 · 2026-06-04

独立整理围绕 6 个结构重点拆成环境、步骤、验证点和常见误区,尽量让读者能照着复现。
图文对照保留 6 张和配置、流程、判断结果有关的图片,方便快速定位正文重点。
持续校对工具、模型和命令变化较快,后续优先修正入口、参数和风险提醒。

阅读路线

先按这条路线读

先抓住主线,再回到代码、配置和图文细节,读起来会更稳。

图文要点

先看本文图文节点

按图先建立主线,再跳回正文核对步骤、配置和判断标准。

建立自定义模型流程图查看大图
建立自定义模型流程图

自定义模型给了最大灵活性,也把更多责任交给开发者。越自由,越要写清楚输入输出和测试样例。

建立自定义模型实操核对图查看大图
建立自定义模型实操核对图

我会先用一小批假数据调用 call()。自定义逻辑如果没有最小测试,后续训练很难排错。

在本篇教程中,我们将学习如何在Keras框架中建立一个自定义模型。也就是说,我们会创建一个模型类,以便灵活定义神经网络的结构、前向传播逻辑,以及如何计算损失和更新权重。这为我们提供了更大的自由度,可以精确控制模型的每一个细节。

1. 自定义模型的基础

Keras提供了一个名为tf.keras.Model的基类,我们可以通过继承这个类来创建自己的模型。在自定义模型中,我们需要实现两个主要的方法:__init__()call()

Keras自定义模型判断卡查看大图
Keras自定义模型判断卡

建立 Keras 自定义模型时,先确认继承结构、层初始化、调用流程、损失计算和训练接口。

  • __init__(): 初始化模型的各个层。
  • call(): 定义前向传播的逻辑。

2. 创建自定义模型

下面是一个示例,我们将创建一个简单的神经网络,包含一个输入层、一个隐藏层和一个输出层。

Keras阅读地图卡查看大图
Keras阅读地图卡

《Keras框架从零教程系列:建立自定义模型》适合边看图边读正文。先确认问题和判断标准,再看概念解释与练习步骤,信息会更容易连成一条线。

import tensorflow as tf

class CustomModel(tf.keras.Model):
    def __init__(self):
        super(CustomModel, self).__init__()
        self.dense1 = tf.keras.layers.Dense(64, activation='relu')
        self.dense2 = tf.keras.layers.Dense(10, activation='softmax')

    def call(self, inputs):
        x = self.dense1(inputs)
        return self.dense2(x)

在上述代码中,我们构建了一个名为CustomModel的自定义模型。其中,dense1是一个具有64个神经元的全连接层,激活函数使用ReLU;而dense2是一个具有10个神经元的全连接层,激活函数使用softmax。这个模型可以用于多分类任务。

3. 实例化和使用自定义模型

要使用我们刚刚创建的自定义模型,我们需要实例化它并提供输入数据。注意,模型的输入应该符合我们定义的层的输入形状。

# 实例化模型
model = CustomModel()

# 创建随机输入,假设输入数据的形状是(32, 20)
input_data = tf.random.normal((32, 20))

# 进行前向传播
output = model(input_data)

print(output.shape)  # 输出的形状应该是(32, 10)

在这个例子中,我们生成了一个具有32个样本、20个特征的随机输入,并通过自定义模型进行前向传播,最终输出的结果形状为(32, 10),这代表32个样本的10个类的预测概率。

4. 自定义损失函数和指标(可选)

在一些情况下,我们需要自定义损失函数或者指标来符合特定的需求。可以在模型的call()方法中计算损失。在Keras中,损失函数通常接受预测值和真实标签作为输入。

下面是一个简单的自定义损失函数示例:

class CustomModel(tf.keras.Model):
    def __init__(self):
        super(CustomModel, self).__init__()
        self.dense1 = tf.keras.layers.Dense(64, activation='relu')
        self.dense2 = tf.keras.layers.Dense(10, activation='softmax')

    def call(self, inputs):
        x = self.dense1(inputs)
        return self.dense2(x)

    def compute_loss(self, y_true, y_pred):
        return tf.reduce_mean(tf.keras.losses.sparse_categorical_crossentropy(y_true, y_pred))

在这个例子中,我们在模型中增加了一个compute_loss()方法,用于计算损失。我们使用了tf.keras.losses.sparse_categorical_crossentropy()函数来计算多分类的损失。

5. 与功能API的区别

在上一篇教程中,我们使用了Keras的功能API构建模型,其灵活性和表现力很强。而在自定义模型中,我们可以更加深入地控制模型的结构,包括动态选择不同的计算路径和实现复杂的前向传播。这种方式特别适合一些不规则的网络结构,比如循环神经网络(RNN)或者生成对抗网络(GAN)。

Keras框架从零教程系列:建立自定义模型应用复盘卡查看大图
Keras框架从零教程系列:建立自定义模型应用复盘卡

读到这里,可以把《Keras框架从零教程系列:建立自定义模型》整理成一张复盘表:先说清主线,再拿一个小任务检查结果。

Keras框架从零教程系列:建立自定义模型应用检查卡查看大图
Keras框架从零教程系列:建立自定义模型应用检查卡

读完《Keras框架从零教程系列:建立自定义模型》后,可以先挑一个小样例走完整流程,再判断哪些步骤已经能独立完成。

6. 小结

在本篇教程中,我们学习了如何建立一个自定义模型并进行前向传播。自定义模型是Keras中非常强大的特性,它允许我们精确控制模型的每一部分。接下来,我们将在下一篇中讲解如何对模型进行编译,准备训练和优化模型。

通过本篇教程,你现在应该可以自由地创建属于自己的自定义模型,灵活应对各种机器学习任务。希望你能继续探索Keras的更多功能!

继续阅读

从这篇继续找到相关教程

AI 教程总索引

常见问题

读前先确认这三点

Keras框架从零教程系列:建立自定义模型适合谁读?

这是 Keras 入门 系列第 12 / 28 篇,适合正在学习Keras 入门,并且需要把概念落到操作步骤或判断标准里的读者。

读这篇Keras 入门教程要多久?

按中文技术文章阅读速度估算,通读大约 4 分钟;如果要跟着复现,建议把命令、配置和结果检查分开做。

这篇文章里的图文节点怎么用?

正文里有 6 个图文节点,可以先用它们抓住流程、配置和判断点,再回到对应段落细读。

分享文章

转发到常用平台

微信/朋友圈可先复制链接

相关教程

AI 教程总索引

继续阅读

继续找到相关 AI 教程

返回栏目

Reader Messages

读者留言

有问题、补充资料或实测结果,可以直接留下。这里不需要登录。

最多 800 字

为了防刷,每条留言会做长度、链接数量和提交频率限制。

0/800

留言列表

0
正在加载留言...