如何使用Python生成编码器和解码器的自编码器?
TensorFlow是由Google提供的机器学习框架。它是一个开源框架,与Python一起用于实现算法、深度学习应用程序等。它用于研究和生产目的。
可以使用以下代码在Windows上安装“tensorflow”包 −
pip install tensorflow
张量是TensorFlow中使用的数据结构。它有助于在流程图中连接边缘。这个流程图称为“数据流图”。张量只是一个多维数组或列表。
Keras是作为ONEIROS项目(开放式神经电子智能机器人操作系统)的研究的一部分开发的。Keras是一个在Python中编写的深度学习API。它是一个高级API,具有有助于解决机器学习问题的生产型界面。它运行在TensorFlow框架之上。它是为了帮助快速实验而构建的。它提供了必要的抽象和构建块,这些块在开发和封装机器学习解决方案时必不可少。
Keras已经存在于Tensorflow包中。可以使用以下代码访问它。
import tensorflow
from tensorflow import keras
Keras函数式API有助于创建比使用顺序API创建的模型更加灵活的模型。函数式API可以处理具有非线性拓扑的模型,可以共享层,并处理多个输入和输出。深度学习模型通常是包含多个层的有向无环图(DAG)。函数式API有助于构建层的图形。
我们使用Google Colaboratory来运行下面的代码。Google Colab或Colaboratory可以在浏览器上运行Python代码,不需要任何配置,可以免费访问GPU(图形处理单元)。Colaboratory是建立在Jupyter Notebook之上的。以下是代码片段,查看如何使用编码器和解码器生成自编码器。
更多Python相关文章,请阅读:Python 教程
示例
encoder_input = keras.Input(shape=(28, 28, 1), name="img")
print("Adding layers to the model")
x = layers.Conv2D(16, 3, activation="relu")(encoder_input)
x = layers.Conv2D(32, 3, activation="relu")(x)
x = layers.MaxPooling2D(3)(x)
x = layers.Conv2D(32, 3, activation="relu")(x)
x = layers.Conv2D(16, 3, activation="relu")(x)
print("Performing global max pooling")
encoder_output = layers.GlobalMaxPooling2D()(x)
print("Creating a model using the layers")
encoder = keras.Model(encoder_input, encoder_output, name="encoder")
print("More information about the model")
encoder.summary()
print("Reshaping the layers in the model")
x = layers.Reshape((4, 4, 1))(encoder_output)
x = layers.Conv2DTranspose(16, 3, activation="relu")(x)
x = layers.Conv2DTranspose(32, 3, activation="relu")(x)
x = layers.UpSampling2D(3)(x)
x = layers.Conv2DTranspose(16, 3, activation="relu")(x)
decoder_output = layers.Conv2DTranspose(1, 3, activation="relu")(x)
autoencoder = keras.Model(encoder_input, decoder_output, name="autoencoder")
print("More information about the autoencoder")
autoencoder.summary()
代码来源 − https://www.tensorflow.org/guide/keras/functional
输出
Adding layers to the model
Performing global max pooling
Creating a model using the layers
More information about the model
Model: "encoder"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
img (InputLayer) [(None, 28, 28, 1)] 0
_________________________________________________________________
conv2d (Conv2D) (None, 26, 26, 16) 160
_________________________________________________________________
conv2d_1 (Conv2D) (None, 24, 24, 32) 4640
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 8, 8, 32) 0
_________________________________________________________________
conv2d_2 (Conv2D) (None, 6, 6, 32) 9248
_________________________________________________________________
conv2d_3 (Conv2D) (None, 4, 4, 16) 4624
_________________________________________________________________
global_max_pooling2d (Global (None, 16) 0
=================================================================
Total params: 18,672
Trainable params: 18,672
Non-trainable params: 0
_________________________________________________________________
Reshaping the layers in the model
More information about the autoencoder
Model: "autoencoder"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
img (InputLayer) [(None, 28, 28, 1)] 0
_________________________________________________________________
conv2d (Conv2D) (None, 26, 26, 16) 160
_________________________________________________________________
conv2d_1 (Conv2D) (None, 24, 24, 32) 4640
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 8, 8, 32) 0
_________________________________________________________________
conv2d_2 (Conv2D) (None, 6, 6, 32) 9248
_________________________________________________________________
conv2d_3 (Conv2D) (None, 4, 4, 16) 4624
_________________________________________________________________
global_max_pooling2d (Global (None, 16) 0
_________________________________________________________________
reshape (Reshape) (None, 4, 4, 1) 0
_________________________________________________________________
conv2d_transpose (Conv2DTran (None, 6, 6, 16) 160
_________________________________________________________________
conv2d_transpose_1 (Conv2DTr (None, 8, 8, 32) 4640
_________________________________________________________________
up_sampling2d (UpSampling2D) (None, 24, 24, 32) 0
_________________________________________________________________
conv2d_transpose_2 (Conv2DTr (None, 26, 26, 16) 4624
_________________________________________________________________
conv2d_transpose_3 (Conv2DTr (None, 28, 28, 1) 145
=================================================================
Total params: 28,241
Trainable params: 28,241
Non-trainable params: 0
_________________________________________________________________
解释
-
层被添加到模型中。
-
在这些层上执行全局最大池化。
-
使用这些层创建一个模型。
-
使用“summary”方法可以显示有关模型的更多信息。
-
使用功能性API,在指定图层的输入和输出后创建模型。
-
这表明可以使用单个图形来生成多个模型。
-
在这里,使用层的堆栈实例化了两个模型——一个编码器,将图像输入转换为16维向量,以及用于训练的自编码器模型。