keras 的 example 文件 variational_autoencoder.py 解析
該代碼介紹了VAE自動編解碼器:
VAE的原理可以參考?https://www.cnblogs.com/huangshiyu13/p/6209016.html
編碼器的結構為:
__________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
==================================================================================================
encoder_input (InputLayer) (None, 784) 0
__________________________________________________________________________________________________
dense_1 (Dense) (None, 512) 401920 encoder_input[0][0]
__________________________________________________________________________________________________
z_mean (Dense) (None, 2) 1026 dense_1[0][0]
__________________________________________________________________________________________________
z_log_var (Dense) (None, 2) 1026 dense_1[0][0]
__________________________________________________________________________________________________
z (Lambda) (None, 2) 0 z_mean[0][0]z_log_var[0][0]
==================================================================================================
Total params: 403,972
Trainable params: 403,972
Non-trainable params: 0
__________________________________________________________________________________________________
解碼器的結構為:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
z_sampling (InputLayer) (None, 2) 0
_________________________________________________________________
dense_2 (Dense) (None, 512) 1536
_________________________________________________________________
dense_3 (Dense) (None, 784) 402192
=================================================================
Total params: 403,728
Trainable params: 403,728
Non-trainable params: 0
_________________________________________________________________
VAE就是把編碼器的輸入作為解碼器的輸出,完整的網(wǎng)絡:
__________________________________________________________________________________________
Layer (type) Output Shape Param #
==========================================================================================
encoder_input (InputLayer) (None, 784) 0
__________________________________________________________________________________________
encoder (Model) [(None, 2), (None, 2), (None, 2)] 403972
__________________________________________________________________________________________
decoder (Model) (None, 784) 403728
==========================================================================================
Total params: 807,700
Trainable params: 807,700
Non-trainable params: 0
__________________________________________________________________________________________
訓練時的輸入輸出一樣,也就是編碼之后再解碼,結果和輸入一致;
也就是把圖片編碼為一個二維向量,也就是一個坐標,這樣每個圖片都可以獲取到一個坐標,反之,指定范圍內(nèi)的坐標也可以直接解碼為一張圖片;
如果把數(shù)字圖片畫到特定坐標上,效果如下:
如果從特定坐標反向解碼為圖片,效果如下:
?
當然我的這個結果只是一個參考,因為每次訓練的結果都可能不一樣;
但我們可以確定的是,相同的數(shù)字圖片,其坐標很相近,反之,坐標相近的位置,其畫面也會很接近;
——————————————————————————————————————
代碼?variational_autoencoder_deconv.py 的原理和?variational_autoencoder.py 一致,只不過是用卷積和反卷積來替代全連接網(wǎng)絡,編碼器的網(wǎng)絡結構為:
__________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
==================================================================================================
encoder_input (InputLayer) (None, 28, 28, 1) 0
__________________________________________________________________________________________________
conv2d_1 (Conv2D) (None, 14, 14, 32) 320 encoder_input[0][0]
__________________________________________________________________________________________________
conv2d_2 (Conv2D) (None, 7, 7, 64) 18496 conv2d_1[0][0]
__________________________________________________________________________________________________
flatten_1 (Flatten) (None, 3136) 0 conv2d_2[0][0]
__________________________________________________________________________________________________
dense_1 (Dense) (None, 16) 50192 flatten_1[0][0]
__________________________________________________________________________________________________
z_mean (Dense) (None, 2) 34 dense_1[0][0]
__________________________________________________________________________________________________
z_log_var (Dense) (None, 2) 34 dense_1[0][0]
__________________________________________________________________________________________________
z (Lambda) (None, 2) 0 z_mean[0][0]z_log_var[0][0]
==================================================================================================
Total params: 69,076
Trainable params: 69,076
Non-trainable params: 0
__________________________________________________________________________________________________
解碼器的網(wǎng)絡結構為:
__________________________________________________________________________________________
Layer (type) Output Shape Param #
==========================================================================================
z_sampling (InputLayer) (None, 2) 0
__________________________________________________________________________________________
dense_2 (Dense) (None, 3136) 9408
__________________________________________________________________________________________
reshape_1 (Reshape) (None, 7, 7, 64) 0
__________________________________________________________________________________________
conv2d_transpose_1 (Conv2DTranspose) (None, 14, 14, 64) 36928
__________________________________________________________________________________________
conv2d_transpose_2 (Conv2DTranspose) (None, 28, 28, 32) 18464
__________________________________________________________________________________________
decoder_output (Conv2DTranspose) (None, 28, 28, 1) 289
==========================================================================================
Total params: 65,089
Trainable params: 65,089
Non-trainable params: 0
__________________________________________________________________________________________
VAE網(wǎng)絡的結構和上面一致:
__________________________________________________________________________________________
Layer (type) Output Shape Param #
==========================================================================================
encoder_input (InputLayer) (None, 28, 28, 1) 0
__________________________________________________________________________________________
encoder (Model) [(None, 2), (None, 2), (None, 2)] 69076
__________________________________________________________________________________________
decoder (Model) (None, 28, 28, 1) 65089
==========================================================================================
Total params: 134,165
Trainable params: 134,165
Non-trainable params: 0
__________________________________________________________________________________________
把相應的數(shù)字圖片畫到對應的坐標上,效果為:
從指定坐標值解碼出圖片,效果為:
?
總結
以上是生活随笔為你收集整理的keras 的 example 文件 variational_autoencoder.py 解析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: keras 的 example 文件 r
- 下一篇: keras 的 example 文件 n