自编码器python
时间: 2023-08-27 12:17:01 浏览: 51
下面是一个简单的自编码器的Python代码示例:
```python
import numpy as np
import tensorflow as tf
from tensorflow import keras
# 加载数据集
(x_train, _), (x_test, _) = keras.datasets.mnist.load_data()
# 数据预处理
x_train = x_train.astype('float32') / 255.
x_test = x_test.astype('float32') / 255.
x_train = np.reshape(x_train, (len(x_train), 28, 28, 1))
x_test = np.reshape(x_test, (len(x_test), 28, 28, 1))
# 构建自编码器模型
input_img = keras.Input(shape=(28, 28, 1))
x = keras.layers.Conv2D(16, (3, 3), activation='relu', padding='same')(input_img)
x = keras.layers.MaxPooling2D((2, 2), padding='same')(x)
x = keras.layers.Conv2D(8, (3, 3), activation='relu', padding='same')(x)
x = keras.layers.MaxPooling2D((2, 2), padding='same')(x)
x = keras.layers.Conv2D(8, (3, 3), activation='relu', padding='same')(x)
encoded = keras.layers.MaxPooling2D((2, 2), padding='same')(x)
# 解码器
x = keras.layers.Conv2D(8, (3, 3), activation='relu', padding='same')(encoded)
x = keras.layers.UpSampling2D((2, 2))(x)
x = keras.layers.Conv2D(8, (3, 3), activation='relu', padding='same')(x)
x = keras.layers.UpSampling2D((2, 2))(x)
x = keras.layers.Conv2D(16, (3, 3), activation='relu')(x)
x = keras.layers.UpSampling2D((2, 2))(x)
decoded = keras.layers.Conv2D(1, (3, 3), activation='sigmoid', padding='same')(x)
autoencoder = keras.Model(input_img, decoded)
autoencoder.compile(optimizer='adam', loss='binary_crossentropy')
# 训练自编码器
autoencoder.fit(x_train, x_train,
epochs=10,
batch_size=128,
shuffle=True,
validation_data=(x_test, x_test))
# 使用自编码器进行预测
decoded_imgs = autoencoder.predict(x_test)
```
这个自编码器使用了卷积神经网络来对MNIST数据集中的手写数字进行编码和解码。编码器部分由几个卷积层和最大池化层组成,解码器部分由几个卷积层和上采样层组成。最后,使用二进制交叉熵作为损失函数进行训练,并使用Adam优化器来优化模型。