news 2026/9/19 10:42:16

数据压缩与降维利器:莫烦Python tutorials 自编码器Autoencoder实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
数据压缩与降维利器:莫烦Python tutorials 自编码器Autoencoder实战

数据压缩与降维利器:莫烦Python tutorials 自编码器Autoencoder实战

【免费下载链接】tutorials机器学习相关教程项目地址: https://gitcode.com/gh_mirrors/tut/tutorials

莫烦Python tutorials 是经典的机器学习教程仓库,本篇带你实战其中的自编码器(Autoencoder)教程:用 Keras 与 TensorFlow 两条路线搭建"编码器 + 解码器"网络,在 MNIST 数据集上完成数据压缩、降维可视化与图像重建,帮助新手快速掌握这个数据压缩与降维利器。

什么是自编码器 Autoencoder?

自编码器(Autoencoder)是一种无监督学习的神经网络,它的训练方式很特别:网络的输出就是输入本身

它由两部分组成:

  • 编码器(Encoder):把高维数据"压"成低维的潜在表示(bottleneck 瓶颈层),这一步就实现了数据压缩与降维
  • 解码器(Decoder):再把这个低维表示"解压"回原始维度,尽量还原输入数据。

当网络足够大时,模型被迫学会保留数据中最本质的特征,于是 Autoencoder 还能顺手胜任:特征提取、噪声去除、异常检测、数据生成等任务,堪称深度学习中的"瑞士军刀" 🛠️。

编码器与解码器的对称结构

以本仓库的 Keras 示例为例,网络结构呈典型的对称"沙漏形":

784 → 128 → 64 → 10 → 2 (编码器,逐层压缩) 2 → 10 → 64 → 128 → 784 (解码器,逐层还原)

输入是一幅 28×28 的 MNIST 手写数字图(共 784 个像素),最终被压缩成仅 2 个数字——压缩比高达 392:1,却能大致还原出数字轮廓。

环境准备:一键获取 tutorials 仓库代码

在开始之前,先克隆仓库拿到全部教程代码:

git clone https://gitcode.com/gh_mirrors/tut/tutorials

本篇实战只需要 Python 3 + 两个经典深度学习框架,任选其一即可:

路线代码位置依赖
Keras 版(推荐新手)kerasTUT/9-Autoencoder_example.pykerasnumpymatplotlib
TensorFlow 版tensorflowTUT/tf21_autoencoder/full_code.pytensorflow1.x、numpymatplotlib

💡 TensorFlow 示例使用的是 TF 1.x 的图式 API,新环境建议优先跑 Keras 版本,几行代码就能理解核心思想。

Keras 搭建自编码器 Autoencoder 的 5 个步骤

完整代码见 9-Autoencoder_example.py,跟着下面五步走一遍即可。

步骤1:加载 MNIST 数据集与数据预处理

先把像素值归一化到 0~1 再居中到 -0.5~0.5,并把 28×28 图像展平成 784 维向量:

x_train = x_train.astype('float32') / 255. - 0.5 # minmax 归一化 x_train = x_train.reshape((x_train.shape[0], -1)) # 展平为 (60000, 784)

归一化是数据压缩的关键一步——量纲统一后,损失函数和训练都会更稳定。

步骤2:定义编码器 Encoder 层

用四个全连接层把 784 维逐层压到 2 维,激活函数用 ReLU:

encoded = Dense(128, activation='relu')(input_img) encoded = Dense(64, activation='relu')(encoded) encoded = Dense(10, activation='relu')(encoded) encoder_output = Dense(2)(encoded)

步骤3:定义解码器 Decoder 层

解码器结构完全对称地"反向展开",输出层使用tanh,把预测值约束在合理范围内:

decoded = Dense(10, activation='relu')(encoder_output) decoded = Dense(64, activation='relu')(decoded) decoded = Dense(128, activation='relu')(decoded) decoded = Dense(784, activation='tanh')(decoded)

步骤4:编译模型,用输入本身当标签训练

Autoencoder 是无监督的——训练目标就是输入数据本身,这正是它"自编码"名称的由来:

autoencoder.compile(optimizer='adam', loss='mse') autoencoder.fit(x_train, x_train, epochs=20, batch_size=256, shuffle=True)

损失函数选均方误差(mse),优化器选 Adam,是重建类任务最稳妥的组合。

步骤5:2D 编码散点图,直观展示降维效果

把测试集送进编码器,得到每个数字图像的 2 维坐标,按真实标签上色:

encoded_imgs = encoder.predict(x_test) plt.scatter(encoded_imgs[:, 0], encoded_imgs[:, 1], c=y_test)

你会惊讶地发现:仅仅 2 个数字就能把 0~9 的图像聚成 10 个簇——这就是 Autoencoder 做降维可视化的魔力 📊。

TensorFlow 版 Autoencoder:重建效果对比图怎么画

TensorFlow 完整代码展示了另一条路线:手写编码器与解码器函数,再用tf.matmul+sigmoid搭建 784 → 256 → 128 的压缩网络,损失同样是最小化重建误差,优化器用 Adam:

cost = tf.reduce_mean(tf.pow(y_true - y_pred, 2)) # 重建平方误差 optimizer = tf.train.AdamOptimizer(learning_rate).minimize(cost)

训练 5 个 epoch 后,代码用plt.subplots(2, 10, ...)原图重建图上下并排绘制成对比图,一眼看出压缩后保留了哪些笔画特征。文件中还附赠了一份被注释的"深编码器"配置(784 → 128 → 64 → 10 → 2),把它打开就能做 2D 降维散点图,与 Keras 版殊途同归。

自编码器 Autoencoder 调参与常见问题 FAQ

Q1:瓶颈维度(encoding_dim)怎么选?维度越小,压缩比越高、信息损失越大。若目标是降维可视化,从 2~10 维起步;若用于去噪或特征提取,可以放宽到 64~128 维。

Q2:为什么输出层要用 tanh / sigmoid?解码器输出代表重建的像素值,必须落在输入数据的取值范围内(本例归一化后为 -0.5~0.5 附近),带饱和激活函数能天然约束这个范围。

Q3:训练损失不下降怎么办?先检查数据是否归一化、fit的标签是否传入的是输入本身(fit(x, x)),再尝试调低学习率或增加 encoder 层数。

Q4:TF 1.x 代码在 TF 2.x 环境报错了?tf.Sessiontf.placeholder替换为 TF2 API,或直接改用 Keras 示例,思路完全一致。

扩展学习:仓库内相关教程导航

学完 Autoencoder,可以继续按图索骥深入 tensorflowTUT/README.md 与 kerasTUT/README.md:

  • 正则化防过拟合:tensorflowTUT/tf17_dropout/full_code.py
  • 保存训练好的网络:tensorflowTUT/tf19_saver.py
  • 卷积网络 CNN:tensorflowTUT/tf18_CNN2/full_code.py
  • Keras 快速上手:kerasTUT/4-regressor_example.py
  • 仓库全部内容地图:README.md

总结:从数据压缩到特征提取

自编码器 Autoencoder 用一个"对称沙漏"结构就打通了数据压缩、降维可视化、特征提取三大场景。通过本仓库 Keras 示例 的五步走,你只需不到 60 行代码就能亲手压缩 MNIST;再用 TensorFlow 示例 观察重建对比图,就能真正理解"降维为何不丢关键信息"。动手跑一遍,你就拥有了这把深度学习工具箱里的利器 🚀

【免费下载链接】tutorials机器学习相关教程项目地址: https://gitcode.com/gh_mirrors/tut/tutorials

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/19 10:40:46

离职交机电脑隐私清理指南:从浏览器到系统残留的全面清除

离职这事,办手续、交接、吃散伙饭,每一步都有章可循,但有一件事最容易被忽略,却又最容易留下隐患——交还电脑前的个人隐私清理。别小看这一步,我见过太多人以为"退出微信、删几个文件夹"就算完事&#xff0…

作者头像 李华
网站建设 2026/9/19 10:38:54

Trae国际版/国内版下载安装指南:版本选择、MCP配置与高效使用

同事昨天突然问我:"你电脑上那个 Trae 是国际版还是国内版?我想装国际版/海外版,但搜出来一堆下载链接,也不知道哪个是真的。"我愣了一下,因为这个问题我一开始也搞不明白。Trae 是字节跳动推出的 AI IDE&am…

作者头像 李华
网站建设 2026/9/19 10:38:13

AIGC检测不是红绿灯,而是语言指纹校准器

1. 这不是“防伪标签”,而是内容可信度的校准器最近帮高校教务处做课程作业抽检,发现一个现象:同一门《新媒体写作》课的32份学生报告里,有7份在语言节奏、案例密度和段落过渡上呈现出惊人的同质化——不是抄作业,是抄…

作者头像 李华