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日

相关文章

  • tensorflow中的卷积和池化层(一)

    在官方tutorial的帮助下,我们已经使用了最简单的CNN用于Mnist的问题,而其实在这个过程中,主要的问题在于如何设置CNN网络,这和Caffe等框架的原理是一样的,但是tf的设置似乎更加简洁、方便,这其实完全类似于Caffe的python接口,但是由于框架底层的实现不一样,tf无论是在单机还是分布式设备上的实现效率都受到一致认可。 CNN网络中的卷积…

    卷积神经网络 2023年4月6日
    00
  • 空洞卷积(dilated convolution)

          论文:Multi-scale context aggregation with dilated convolutions 简单讨论下dilated conv,中文可以叫做空洞卷积或者扩张卷积。首先介绍一下dilated conv诞生背景[4],再解释dilated conv操作本身,以及应用。 首先是诞生背景,在图像分割领域,图像输入到CNN(典…

    2023年4月8日
    00
  • 卷积神经网络对图片分类-中

    接上篇:卷积神经网络对图片分类-上   5 池层(Pooling Layers) 池层通常用在卷积层之后,池层的作用就是简化卷积层里输出的信息,  减少数据维度,降低计算开销,控制过拟合。   如之前所说,一张28X28的输入图片,经过5X5的过滤器后会得到一个24X24的特征图像,继续简化这个24X24特征图像里的信息,只保留关键信息。需要加入一个池层: …

    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
  • 解读等值线图的Python绘制方法

    下面是关于解读等值线图的Python绘制方法的完整攻略。 等值线图介绍 等值线图是一种用于可视化二维数据的图表,通常用于表示地形高度、气压、温度等连续变量的分布情况。等值线图将数据分成若干个等值区域,每个等值区域的数值相同,通过连续的等值线将这些区域连接起来,形成一张图表。 示例1:使用Matplotlib绘制等值线图 以下是一个使用Matplotlib绘制…

    卷积神经网络 2023年5月16日
    00
  • PyG搭建GCN模型实现节点分类GCNConv参数详解

    下面是关于使用PyG搭建GCN模型实现节点分类以及GCNConv参数详解的攻略,包含两个示例说明。 示例1:使用PyG搭建GCN模型实现节点分类 以下是一个使用PyG搭建GCN模型实现节点分类的示例: import torch import torch.nn.functional as F from torch_geometric.datasets impo…

    卷积神经网络 2023年5月16日
    00
  • 解读tf.keras.layers模块中的函数

    首先需要了解的是,tf.keras.layers模块包含了常用的神经网络层和模型结构,能够方便地搭建各种深度学习模型。 以下是几个tf.keras.layers模块中常用的函数及其解释。 Conv2D tf.keras.layers.Conv2D是二维卷积层,通常被用在图像处理方面,输出一个二维卷积结果。以下是一个简单的使用示例: import tensor…

    卷积神经网络 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部