Keras搭建自编码器操作

下面是有关“Keras搭建自编码器操作”的完整攻略,其中包括两个示例说明。

自编码器简介

自编码器,是一种简单的神经网络,可以将数据压缩成低维度的表示,同时可以保持原始数据的重构能力。自编码器的核心思想是通过将数据从输入层(encoder)传递到隐层进行压缩,然后再将数据从隐层(decoder)传递到输出层进行解压缩重构。自编码器广泛用于数据降维、特征提取等领域。

搭建自编码器

搭建自编码器需要以下准备:

  • 数据集
  • Keras包

示例一:搭建基于MNIST数据集的自编码器

准备工作:

import numpy as np
import matplotlib.pyplot as plt
from tensorflow import keras
from tensorflow.keras import layers

# 加载数据集
(x_train, _), (x_test, _) = keras.datasets.mnist.load_data()

# 将像素点缩放到0-1之间
x_train = x_train.astype("float32") / 255.0
x_test = x_test.astype("float32") / 255.0

# 将数据转换为2D
x_train = np.reshape(x_train, (len(x_train), 784))
x_test = np.reshape(x_test, (len(x_test), 784))

搭建自编码器:

input_img = keras.Input(shape=(784,))
encoded = layers.Dense(128, activation="relu")(input_img)
encoded = layers.Dense(64, activation="relu")(encoded)
encoded = layers.Dense(32, activation="relu")(encoded)

decoded = layers.Dense(64, activation="relu")(encoded)
decoded = layers.Dense(128, activation="relu")(decoded)
decoded = layers.Dense(784, activation="sigmoid")(decoded)

model = keras.Model(input_img, decoded)

训练自编码器:

model.compile(optimizer="adam", loss="binary_crossentropy")
model.fit(
    x_train, x_train, 
    epochs=5, 
    batch_size=256, 
    shuffle=True, 
    validation_data=(x_test, x_test)
)

评估自编码器:

encoded_imgs = model.predict(x_test)

n = 10  # 显示10张数字图片
plt.figure(figsize=(20, 4))

for i in range(n):
    # 原始图片
    ax = plt.subplot(2, n, i + 1)
    plt.imshow(x_test[i].reshape(28, 28))
    plt.gray()
    ax.get_xaxis().set_visible(False)
    ax.get_yaxis().set_visible(False)

    # 重构图片
    ax = plt.subplot(2, n, i + n + 1)
    plt.imshow(encoded_imgs[i].reshape(28, 28))
    plt.gray()
    ax.get_xaxis().set_visible(False)
    ax.get_yaxis().set_visible(False)

plt.show()

示例二:搭建基于Fashion MNIST数据集的自编码器

准备工作:

import numpy as np
import matplotlib.pyplot as plt
from tensorflow import keras
from tensorflow.keras import layers

# 加载数据集
(x_train, _), (x_test, _) = keras.datasets.fashion_mnist.load_data()

# 将像素点缩放到0-1之间
x_train = x_train.astype("float32") / 255.0
x_test = x_test.astype("float32") / 255.0

# 将数据转换为2D
x_train = np.reshape(x_train, (len(x_train), 784))
x_test = np.reshape(x_test, (len(x_test), 784))

搭建自编码器:

input_img = keras.Input(shape=(784,))
encoded = layers.Dense(128, activation="relu")(input_img)
encoded = layers.Dense(64, activation="relu")(encoded)
encoded = layers.Dense(32, activation="relu")(encoded)

decoded = layers.Dense(64, activation="relu")(encoded)
decoded = layers.Dense(128, activation="relu")(decoded)
decoded = layers.Dense(784, activation="sigmoid")(decoded)

model = keras.Model(input_img, decoded)

训练自编码器:

model.compile(optimizer="adam", loss="binary_crossentropy")
model.fit(
    x_train, x_train, 
    epochs=5, 
    batch_size=256, 
    shuffle=True, 
    validation_data=(x_test, x_test)
)

评估自编码器:

encoded_imgs = model.predict(x_test)

n = 10  # 显示10张时尚图片
plt.figure(figsize=(20, 4))

for i in range(n):
    # 原始图片
    ax = plt.subplot(2, n, i + 1)
    plt.imshow(x_test[i].reshape(28, 28))
    plt.gray()
    ax.get_xaxis().set_visible(False)
    ax.get_yaxis().set_visible(False)

    # 重构图片
    ax = plt.subplot(2, n, i + n + 1)
    plt.imshow(encoded_imgs[i].reshape(28, 28))
    plt.gray()
    ax.get_xaxis().set_visible(False)
    ax.get_yaxis().set_visible(False)

plt.show()

以上就是关于“Keras搭建自编码器操作”的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Keras搭建自编码器操作 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • 稀疏3d卷积

    输入 稀疏卷积的输入包括两部分,一个是坐标,另一个是特征。 self.scn_input = scn.InputLayer(3, sparse_shape.tolist()) # [h,w,l] coors = coors.int()[:, [1, 2, 3, 0]] # [h, w, l, batch] 将 batch_size调换到最后一个位置 ret …

    卷积神经网络 2023年4月8日
    00
  • 基于深度卷积神经网络和跳跃连接的图像去噪和超分辨

    Image Restoration Using Very Deep Convolutional Encoder-Decoder Networks with Symmetric Skip Connections 作者:Xiao-Jiao Mao、Chunhua Shen等 本文提出了一个深度的全卷积编码-解码框架来解决去噪和超分辨之类的图像修复问题。网络由多层…

    2023年4月8日
    00
  • 卷积的本质及物理意义(全面理解卷积)

    卷积的本质及物理意义(全面理解卷积) 卷积的本质及物理意义 提示:对卷积的理解分为三部分讲解1)信号的角度2)数学家的理解(外行)3)与多项式的关系 1 来源 卷积其实就是为冲击函数诞生的。“冲击函数”是狄拉克为了解决一些瞬间作用的物理现象而提出的符号。古人曰:“说一堆大道理不如举一个好例子”,冲量这一物理现象很能说明“冲击函数”。在t时间内对一物体作用F的…

    卷积神经网络 2023年4月8日
    00
  • 【深度学习】经典的卷积神经网络(LeNet、AlexNet、VGG)

    LeNet-5             LeNet-5网络结构来源于Yan LeCun提出的,原文为《Gradient-based learning applied to document recognition》,论文里使用的是mnist手写数字作为输入数据(32 * 32)进行验证。我们来看一下网络结构。         LeNet-5一共有8层: 1个…

    2023年4月8日
    00
  • PyTorch 中的傅里叶卷积实现示例

    下面是关于PyTorch中的傅里叶卷积实现示例的攻略,包含两个示例说明。 PyTorch中的傅里叶卷积 傅里叶卷积是一种基于傅里叶变换的卷积方法,可以有效地处理周期性信号。在PyTorch中,我们可以使用torch.fft模块中的函数实现傅里叶卷积。 具体来说,PyTorch中的傅里叶卷积分为两步:首先,我们需要将输入数据进行傅里叶变换;然后,我们将傅里叶变…

    卷积神经网络 2023年5月16日
    00
  • 基于卷积神经网络的匹配代价算法

    1、问题分析   立体匹配问题,即根据双目摄像头拍摄到的参考图像和目标图像,确定参考图像上每个点在目标图像上对应位置的一个过程。一般展示效果通过输出视差灰度图或伪彩色图像表示实际物体远近程度。直观上人眼可以直接评判立体匹配效果的好坏,客观上可以根据数据库提供的真实视差图计算匹配错误率,错误率越低说明模型的准确度越高。   近年来,随着深度学习的发展,卷积神经…

    2023年4月6日
    00
  • 【TensorFlow-windows】(五) CNN(卷积神经网络)对cifar10的识别

    主要内容: 1.基于CNN的cifar10识别(详细代码注释) 2.该实现中的函数总结 平台: 1.windows 10 64位 2.Anaconda3-4.2.0-Windows-x86_64.exe (当时TF还不支持python3.6,又懒得在高版本的anaconda下配置多个Python环境,于是装了一个3-4.2.0(默认装python3.5),建…

    卷积神经网络 2023年4月8日
    00
  • TensorFlow 卷积神经网络手写数字识别数据集介绍

    http://www.tensorflownews.com/,学习更多的机器学习、深度学习的知识! 手写数字识别 接下来将会以 MNIST 数据集为例,使用卷积层和池化层,实现一个卷积神经网络来进行手写数字识别,并输出卷积和池化效果。 数据准备 MNIST 数据集下载 MNIST 数据集可以从 THE MNIST DATABASE of handwritte…

    2023年4月8日
    00
合作推广
合作推广
分享本页
返回顶部