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日

相关文章

  • 卷积核尺寸如何选取呢?

    滤波器的大小选择 大部分卷积神经网络都会采用逐层递增(1⇒ 3 ⇒ 5 ⇒ 7)的方式。 每经过一次池化层,卷积层过滤器的深度都会乘以 2; 卷积神经网络中卷积核越小越好吗? 多个小的卷积核叠加使用要远比一个大的卷积核单独使用效果要好的多,在连通性不变的情况下,大大降低了参数个数和计算复杂度。 当然,卷积核也不是越小越好,对于特别稀疏的数据比如下图所示,当使…

    2023年4月8日
    00
  • Deconvolution 反卷积理解

        引入网友的一个回答如下 Deconvolution layer is a very unfortunate name and should rather be called a transposed convolutional layer.   Visually, for a transposed convolution with stride on…

    2023年4月6日
    00
  • 卷积神经网络CNN识别MNIST数据集

    这次我们将建立一个卷积神经网络,它可以把MNIST手写字符的识别准确率提升到99%,读者可能需要一些卷积神经网络的基础知识才能更好的理解本节的内容。 程序的开头是导入TensorFlow: import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data 接下…

    2023年4月8日
    00
  • 从神经网络到卷积神经网络(CNN)

    我们知道神经网络的结构是这样的: 那卷积神经网络跟它是什么关系呢?其实卷积神经网络依旧是层级网络,只是层的功能和形式做了变化,可以说是传统神经网络的一个改进。比如下图中就多了许多传统神经网络没有的层次。   卷积神经网络的层级结构      • 数据输入层/ Input layer  • 卷积计算层/ CONV layer  • ReLU激励层 / ReLU…

    2023年4月8日
    00
  • 深度学习七(卷积神经网络)

    转载:http://blog.csdn.net/zouxy09/article/details/8781543 接上   9.5、Convolutional Neural Networks卷积神经网络        卷积神经网络是人工神经网络的一种,已成为当前语音分析和图像识别领域的研究热点。它的权值共享网络结构使之更类似于生物神经网络,降低了网络模型的复杂…

    2023年4月8日
    00
  • 【将门创投】这12张图生动地告诉你,深度学习中的卷积网络是怎么一回事?

    现如今,卷积神经网络在人工智能领域应用的广泛性及重要性可谓是不言而喻。为了让大家对卷积的类型有一个清晰明了的认识,我快速概述了几种不同类型的二维卷积及其好处。     卷积(Convolutions)   首先,我们需要就定义卷积层的几个参数。   图1 二维卷积、内核大小为3、步幅为1   内核大小:内核大小定义了卷积的视野。二维的常见选择是3——即3×3…

    2023年4月6日
    00
  • 转载:cnn学习之卷积或者池化后输出的map的size计算

    相信各位在学习cnn的时候,常常对于卷积或者池化后所得map的的大小具体是多少,不知道怎么算。尤其涉及到边界的时候。   首先需要了解对于一个输入的input_height*input_widtht的图像,在卷积或者池化的时候,经常需要加padding,这是为了处理边界问题时而采用的一种方式,于是原输入就变成了下图所示:   对于输出的size计算 如下图:…

    2023年4月8日
    00
  • Python实战小项目之Mnist手写数字识别

    下面我会详细讲解“Python实战小项目之Mnist手写数字识别”的完整攻略。该攻略包含以下两条示例说明: 如何使用Python实现Mnist手写数字数据集的加载和预处理; 如何使用TensorFlow神经网络算法对Mnist手写数字数据进行训练和识别。 具体步骤如下: 1. 加载和预处理数据集 首先,我们需要将Mnist手写数字数据集下载下来。可以从官方网…

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