keras-tcn
keras-tcn 是一个专为 Keras 打造的“时间卷积网络”插件,几行代码就能把传统 LSTM/GRU 换成更轻、更快、并行度更高的 TCN。它解决了长序列记忆不足、梯度消失、训练慢等痛点,在序列 MNIST、文本、金融时间序列等任务上常能直接超越循环网络。支持 Python 与 R,TensorFlow 2.9-2.19 均已验证,Mac 用户还能一键启用 GPU。开发者、机器学习研究者或任何想用卷积思路做时间序列建模的人都能即装即用;通过调节扩张卷积的层数、感受野、残差连接等参数,可灵活平衡精度与速度。
使用场景
一家做智慧物流的初创公司,需要实时预测全国 2000 多个分拨中心的未来 7 天包裹到达量,以便提前调度人力与车辆。
没有 keras-tcn 时
- 用 LSTM 建模,序列长度一旦超过 96 步(4 天×24 小时),训练时间从 2 小时飙升到 8 小时,GPU 利用率却不到 30 %。
- 为了缓解梯度消失,不得不堆 3 层 LSTM,参数膨胀到 1200 万,线上推理延迟 180 ms,无法做到分钟级更新。
- 遇到“618”大促这种超长周期模式,模型只能看到最近 4 天,导致峰值预测误差高达 35 %,临时加人成本翻倍。
- 不同分拨中心的历史长度差异大,短的 30 天、长的 2 年,LSTM 需要手动补零或截断,代码里一团 if-else。
使用 keras-tcn 后
- 同样 96 步输入,TCN 的并行卷积把训练时间从 8 小时压回 45 分钟,GPU 利用率稳定在 90 % 以上。
- 一层 TCN(nb_filters=128, dilations=[1,2,4,8,16,32])只有 400 万参数,推理延迟降到 25 ms,分钟级滚动预测轻松实现。
- 扩张卷积让感受野直接覆盖 7 天(168 步),大促峰值误差降到 12 %,提前 2 天完成人力排班,节省加班费 20 万元。
- keras-tcn 支持变长输入,直接把
(None, 24)喂进去即可,不同中心共用同一套模型文件,代码量减少 60 %。
keras-tcn 用卷积替代循环,既让长序列预测更快更准,又把工程复杂度降到可维护范围。
运行环境要求
- Linux
- macOS
- Windows
- 可选
- NVIDIA GPU 需安装 CUDA 11.2+(对应 TensorFlow 2.9–2.19)
- macOS 用户如需 GPU 需额外安装 tensorflow-metal
未说明

快速开始
Keras TCN
Keras 时间卷积网络。[论文]
已在 Tensorflow 2.9、2.10、2.11、2.12、2.13、2.14、2.15、2.16、2.17、2.18、2.19 上进行测试(截至2025年3月13日)。
如需使用 R 语言 的完整可用 Keras TCN 示例,请浏览此处。
pip install keras-tcn
对于 MacOS 用户 使用 GPU:pip install tensorflow-metal。
为什么选择 TCN(时间卷积网络)而非 LSTM/GRU?
- 在相同容量下,TCN 具有比循环架构更长的内存。
- 在长时序数据上表现优于 LSTM/GRU(例如 Seq. MNIST、加法问题、复制记忆、词级 PTB 等)。
- 并行性(卷积层)、灵活的感受野大小(模型能“看到”多远)、稳定的梯度(相比通过时间反向传播的梯度消失问题)……
扩张因果卷积层堆叠的可视化(Wavenet,2016)
TCN 层
TCN 类
TCN(
nb_filters=64,
kernel_size=3,
nb_stacks=1,
dilations=(1, 2, 4, 8, 16, 32),
padding='causal',
use_skip_connections=True,
dropout_rate=0.0,
return_sequences=False,
activation='relu',
kernel_initializer='he_normal',
use_batch_norm=False,
use_layer_norm=False,
go_backwards=False,
return_state=False,
**kwargs
)
参数说明
nb_filters:整数。卷积层中使用的滤波器数量。类似于 LSTM 的units。可以是一个列表。kernel_size:整数。每个卷积层中使用的卷积核大小。dilations:列表/元组。扩张列表。示例:[1, 2, 4, 8, 16, 32, 64]。nb_stacks:整数。使用的残差块堆栈数量。padding:字符串。卷积中使用的填充方式。“causal”表示因果网络(如原始实现),“same”表示非因果网络。use_skip_connections:布尔值。是否在每个残差块中添加从输入到输出的跳跃连接。return_sequences:布尔值。是否返回输出序列中的最后一个结果,还是整个序列。dropout_rate:介于 0 和 1 之间的浮点数。丢弃输入单元的比例。activation:残差块中使用的激活函数,即 o = activation(x + F(x))。kernel_initializer:卷积层权重矩阵的初始化方法(Conv1D)。use_batch_norm:是否在残差层中使用批归一化。use_layer_norm:是否在残差层中使用层归一化。go_backwards:布尔值(默认为 False)。如果为 True,则反向处理输入序列并返回反转后的序列。return_state:布尔值。是否在输出之外返回最后一个状态。默认为 False。kwargs:用于配置父类 Layer 的其他参数。例如,“name=str”,模型名称。当使用多个 TCN 时,应使用唯一名称。
输入形状
形状为 (batch_size, timesteps, input_dim) 的三维张量。
timesteps 可以是 None。这在每个序列长度不同时很有用:多长度序列示例。
输出形状
- 如果
return_sequences=True:形状为(batch_size, timesteps, nb_filters)的三维张量。 - 如果
return_sequences=False:形状为(batch_size, nb_filters)的二维张量。
如何选择合适的参数来配置我的 TCN 层?
以下是我使用 TCN 的一些经验总结:
nb_filters:任何卷积网络架构中都存在。它与模型的预测能力相关,并影响网络规模。通常越多越好,除非开始过拟合。这也类似于 LSTM/GRU 架构中的单元数量。kernel_size:控制卷积操作中考虑的空间范围/体积。通常取值在 2 到 8 之间。如果你认为序列主要依赖于 t-1 和 t-2,而对其他部分依赖较小,则可选择 2 或 3 的卷积核大小。对于 NLP 任务,我们倾向于更大的卷积核。较大的卷积核会使网络规模显著增大。dilations:控制 TCN 层的深度。通常建议使用包含多个 2 的列表。可以通过将 TCN 的感受野与序列中特征的长度相匹配来估算需要多少个扩张。例如,如果输入序列是周期性的,可以考虑将周期的倍数作为扩张值。nb_stacks:除非你的序列非常长(如包含数十万个时间步的波形),否则作用不大。padding:我只使用过“causal”,因为 TCN 代表时间卷积网络。因果填充可以防止信息泄漏。use_skip_connections:跳跃连接类似于 DenseNet,用于连接各层,有助于梯度流动。除非性能下降,否则应始终启用。return_sequences:与 LSTM 层中的参数相同。请参考 Keras 文档了解该参数。dropout_rate:类似于 LSTM 层中的recurrent_dropout。我通常不太使用,或将其设置为较低的值,如 0.05。activation:保持默认即可。我从未更改过。kernel_initializer:如果 TCN 的训练陷入停滞,不妨尝试更改此参数。例如:“glorot_uniform”。use_batch_norm、use_layer_norm:如果网络足够大且任务数据量充足,可以使用归一化。我通常更倾向于使用use_layer_norm,但你可以尝试看看哪种效果更好。
受体野
受体野的定义是:从当前时刻 T 的样本向前追溯的最大步数,即(块、层、堆栈、TCN)中的滤波器能够作用到的有效历史长度 + 1。TCN 的受体野可以通过以下公式计算:
其中,Nstack 表示堆栈的数量,Nb 表示每个堆栈中的残差块数量,d 是一个向量,包含每个堆栈中每个残差块的扩张率,K 则是卷积核的大小。之所以乘以 2,是因为单个 ResidualBlock 中包含两个 Conv1d 层。
理想情况下,你的受体野应该大于输入序列的最大长度;如果你将一个超过受体野长度的序列输入模型,那么序列中更靠前的多余值将会被零填充替代。
示例
注:与 TCN 不同,示例图中每层仅包含一个 Conv1d,因此公式变为 Rfield = 1 + (K-1)⋅Nstack⋅Σi di(不带系数 2)。
- 如果一个扩张卷积网络仅有一个由残差块组成的堆栈,卷积核大小为
2,扩张率为[1, 2, 4, 8],则其受体野为16。下图展示了这一情况:
ks = 2, dilations = [1, 2, 4, 8], 1 block
- 如果一个扩张卷积网络有 2 个由残差块组成的堆栈,则会出现如下情况,即受体野增至 31:
ks = 2, dilations = [1, 2, 4, 8], 2 blocks
- 如果我们将堆栈数量增加到 3 个,则受体野的大小会再次增大,如下所示:
ks = 2, dilations = [1, 2, 4, 8], 3 blocks
非因果 TCN
将 TCN 架构设计为非因果,使其能够考虑未来信息来进行预测,如图所示。
然而,这种设计不再适用于实时应用。
非因果 TCN - ks = 3, dilations = [1, 2, 4, 8], 1 block
要使用非因果 TCN,需在初始化 TCN 层时指定 padding='valid' 或 padding='same'。
运行
一旦 keras-tcn 作为包安装完毕,你就可以初步了解 TCN 能够完成的任务。为此,仓库中提供了一些任务示例:
cd adding_problem/
python main.py # 运行加法问题任务
cd copy_memory/
python main.py # 运行复制记忆任务
cd mnist_pixel/
python main.py # 运行顺序 MNIST 像素任务
通过使用 tensorflow-determinism 库,在(NVIDIA)GPU 上可以实现可复现的结果。该库已由 @lingdoc 在 keras-tcn 上进行了测试。
任务
Word PTB
语言建模仍然是循环网络的主要应用之一。在本例中,我们展示了 TCN 在 WordPTB 任务上无需过多调优即可超越 LSTM。

TCN 与 LSTM(权重数量相当)
加法任务
该任务要求将一个大型十进制数数组与一个相同长度的布尔数组一同输入网络。目标是在布尔数组中出现两个 1 的位置对这两个十进制数进行求和。
解释
加法问题任务
实施结果
782/782 [==============================] - 154s 197ms/step - loss: 0.8437 - val_loss: 0.1883
782/782 [==============================] - 154s 196ms/step - loss: 0.0702 - val_loss: 0.0111
[...]
782/782 [==============================] - 152s 194ms/step - loss: 6.9630e-04 - val_loss: 3.7180e-04
复制记忆任务
复制记忆任务涉及一个非常大的数组:
- 开头是一个长度为 N 的向量 x,这是需要复制的向量。
- 末尾有 N+1 个 9,其中第一个 9 被视为分隔符。
- 中间只有 0。
任务的目标是将向量 x 的内容复制到大数组的末尾。通过增加中间的 0 的数量,任务的复杂度得以提升。
解释
复制记忆任务
实施结果(前几轮)
118/118 [==============================] - 17s 143ms/step - loss: 1.1732 - accuracy: 0.6725 - val_loss: 0.1119 - val_accuracy: 0.9796
[...]
118/118 [==============================] - 15s 125ms/step - loss: 0.0268 - accuracy: 0.9885 - val_loss: 0.0206 - val_accuracy: 0.9908
118/118 [==============================] - 15s 125ms/step - loss: 0.0228 - accuracy: 0.9900 - val_loss: 0.0169 - val_accuracy: 0.9933
顺序 MNIST
解释
这里的思路是将 MNIST 图像视为一维序列并输入网络。由于序列长度为 28×28=784 个元素,这项任务尤其困难。为了正确分类,网络必须记住整个序列。普通的 LSTM 在这项任务上表现不佳。
顺序 MNIST
实施结果
1875/1875 [==============================] - 46s 25ms/step - loss: 0.0949 - accuracy: 0.9706 - val_loss: 0.0763 - val_accuracy: 0.9756
1875/1875 [==============================] - 46s 25ms/step - loss: 0.0831 - accuracy: 0.9743 - val_loss: 0.0656 - val_accuracy: 0.9807
[...]
1875/1875 [==============================] - 46s 25ms/step - loss: 0.0486 - accuracy: 0.9840 - val_loss: 0.0572 - val_accuracy: 0.9832
1875/1875 [==============================] - 46s 25ms/step - loss: 0.0453 - accuracy: 0.9858 - val_loss: 0.0424 - val_accuracy: 0.9862
R 语言
关于使用 R 语言 完整运行 Keras TCN 的示例,请浏览此处。
参考文献
- https://github.com/locuslab/TCN/(Pytorch 版 TCN)
- https://arxiv.org/pdf/1803.01271(通用卷积与循环网络在序列建模中的实证评估)
- https://arxiv.org/pdf/1609.03499(原始 Wavenet 论文)
- https://github.com/Baichenjia/Tensorflow-TCN(TensorFlow Eager 版 TCN 实现)
引用
@misc{KerasTCN,
author = {Philippe Remy},
title = {用于 Keras 的时间卷积网络},
year = {2020},
publisher = {GitHub},
journal = {GitHub 仓库},
howpublished = {\url{https://github.com/philipperemy/keras-tcn}},
}
贡献者
版本历史
3.3.02021/02/163.2.12021/01/023.1.02020/04/252.7.02019/06/142.5.72019/02/262.5.62019/02/242.3.62019/02/202.3.52019/01/09常见问题
相似工具推荐
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

