当前位置: 首页 > news >正文

python3+TensorFlow 2.x(六)自编码器

自动编码器

自动编码器(Autoencoder)是一种无监督学习算法,主要用于数据降维、特征学习和数据生成等任务。它由编码器和解码器组成,目标是将输入数据压缩为低维表示(编码),然后再从这个低维表示重构原始数据。自动编码器被广泛应用于图像去噪、特征提取和生成模型等场景。

实现

MNIST 数据集重构

import tensorflow as tf
from tensorflow.keras import layers, models
import matplotlib.pyplot as plt# 加载 MNIST 数据集
(train_images, _), (test_images, _) = tf.keras.datasets.mnist.load_data()# 归一化数据,将像素值缩放到 [0, 1]
train_images = train_images / 255.0
test_images = test_images / 255.0# 将数据的形状调整为 (batch_size, 28, 28, 1),因为 CNN 等网络需要 4D 输入
train_images = train_images.reshape((train_images.shape[0], 28, 28, 1))
test_images = test_images.reshape((test_images.shape[0], 28, 28, 1))# 使用 tf.data.Dataset 将数据分成批次
train_dataset = tf.data.Dataset.from_tensor_slices(train_images).batch(64)# 构建自动编码器
def build_autoencoder():# 编码器encoder_input = layers.Input(shape=(28, 28, 1))# 编码层:使用卷积层和池化层提取特征x = layers.Conv2D(32, (3, 3), activation='relu', padding='same')(encoder_input)x = layers.MaxPooling2D((2, 2), padding='same')(x)x = layers.Conv2D(64, (3, 3), activation='relu', padding='same')(x)encoded = layers.MaxPooling2D((2, 2), padding='same')(x)# 解码器x = layers.Conv2D(64, (3, 3), activation='relu', padding='same')(encoded)x = layers.UpSampling2D((2, 2))(x)x = layers.Conv2D(32, (3, 3), activation='relu', padding='same')(x)x = layers.UpSampling2D((2, 2))(x)decoded = layers.Conv2D(1, (3, 3), activation='sigmoid', padding='same')(x)# 自动编码器模型autoencoder = models.Model(encoder_input, decoded)return autoencoder# 构建自动编码器模型
autoencoder = build_autoencoder()# 编译模型
autoencoder.compile(optimizer='adam', loss='binary_crossentropy')# 训练模型
autoencoder.fit(train_images, train_images, epochs=10, batch_size=64, validation_data=(test_images, test_images))# 使用训练好的模型对测试集进行预测
decoded_images = autoencoder.predict(test_images)# 显示原始图像和重建图像
n = 10  # 展示 10 张图像
plt.figure(figsize=(20, 4))
for i in range(n):# 显示原始图像ax = plt.subplot(2, n, i + 1)plt.imshow(test_images[i].reshape(28, 28), cmap='gray')plt.axis('off')# 显示重建图像ax = plt.subplot(2, n, i + 1 + n)plt.imshow(decoded_images[i].reshape(28, 28), cmap='gray')plt.axis('off')plt.show()

代码解释

加载和预处理数据

MNIST 数据集包含了 60,000 张训练图像和 10,000 张测试图像,每张图像的大小是 28x28 像素,并且所有的图像是灰度图。将图像像素值归一化到 [0, 1] 范围,并将数据形状调整为 (28, 28, 1),因为自动编码器需要图像数据作为输入。

构建自动编码器模型

自动编码器的结构由两个主要部分组成:编码器和解码器。编码器将输入数据映射到一个低维空间(潜在空间)。解码器将潜在空间的表示恢复回原始数据空间。本例中使用CNN编码器将图像通过一系列卷积层和池化层进行降维。然后,解码器通过反卷积(转置卷积)将潜在空间的表示恢复为原始的图像。

编译和训练模型

在训练模型时,使用二元交叉熵作为损失函数,因为是进行图像的重建 (像素级重建) 优化器使用 Adam 优化器,它通常在很多深度学习任务中表现良好。

评估与可视化结果

使用训练好的模型对测试集进行预测,并将原始图像和重建图像进行对比,帮助可视化自动编码器的效果。

总结

自动编码器是一种无监督学习模型,可以用于特征提取、降维和图像生成等任务。实例中使用了卷积神经网络(CNN)来构建一个简单的自动编码器,并应用于 MNIST 数据集进行训练。通过这段代码,了解如何使用 TensorFlow 2.x 实现自动编码器,训练并评估模型的性能。

http://www.lryc.cn/news/541021.html

相关文章:

  • Redis-AOF
  • 【DeepSeek】本地部署,保姆级教程
  • 并查集算法篇上期:并查集原理及实现
  • 如何在WPS打开的word、excel文件中,使用AI?
  • 【Deepseek+Dify】wsl2+docker+Deepseek+Dify部署本地大模型知识库问题总结
  • C++初阶——简单实现vector
  • 1.21作业
  • 深度集成DeepSeek大模型:WebSocket流式聊天实现
  • Jmeter连接数据库、逻辑控制器、定时器
  • 『Linux笔记』进程间通信(IPC)详细介绍!
  • Jmeter进阶篇(34)如何解决jmeter.save.saveservice.timestamp_format=ms报错?
  • Visual Studio 2022配置网址参考
  • Redis中集合(Set)常见命令详解
  • 动态规划
  • stm32rtc实时时钟详解文章
  • DeepSeek 助力 Vue 开发:打造丝滑的 键盘快捷键(Keyboard Shortcuts)
  • 【第一节】C++设计模式(创建型模式)-工厂模式
  • 深入理解 SQL 注入漏洞及解决方案
  • 使用 deepseek实现 go语言,读取文本文件的功能,要求支持 ascii,utf-8 等多种格式自适应
  • 7.【线性代数】——求解Ax=0,主列和自由列
  • vue3结合后端传递过来的文件进行预览功能
  • 【Python爬虫(39)】掌控全局:分布式爬虫的任务管理与监控之道
  • Jenkins整合Jmeter实现接口自动化测试
  • Web 自动化测试提速利器:Aqua 的 Web Inspector (检查器)使用详解
  • 大语言模型:从开发到运行的深度解构
  • 【GoLang】【算法模板】2、GoLang 算法模板整理
  • 合理建模--最短路径
  • 喜报!博睿数据案例获经观传媒“2024年度数字转型创新案例”!
  • 基于图扑 HT 可视化技术打造智慧地下采矿可视化方案
  • 深度学习(2)-深度学习关键网络架构