/
Autoencoder_Tarefa_16.py
88 lines (63 loc) · 2.74 KB
/
Autoencoder_Tarefa_16.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
"""
Redes Neurais - Autoencoder
Aprendizagem não supervisionada
Redução de dimensionalidade - Tarefa
Base de dados CIFAR10
Construção de um autoencoder para redimensionamento, codificação e decodificação de imagens
"""
import numpy as np
import matplotlib.pyplot as plt
from keras.datasets import cifar10
from keras.models import Model, Sequential
from keras.layers import Input, Dense
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
(previsores_treinamento, _), (previsores_teste, _) = cifar10.load_data()
previsores_treinamento = previsores_treinamento.astype('float32') / 255
previsores_teste = previsores_teste.astype('float32') / 255
previsores_treinamento = previsores_treinamento.reshape((len(previsores_treinamento), np.prod(previsores_treinamento.shape[1:])))
previsores_teste = previsores_teste.reshape((len(previsores_teste), np.prod(previsores_teste.shape[1:])))
""" Algoritmo para o treinamento """
# 3072 - 1536 - 768 - 1536 - 3072
autoencoder = Sequential()
# Encode
autoencoder.add(Dense(units=1536, activation='relu', input_dim=3072))
autoencoder.add(Dense(units=768, activation='relu'))
# Decode
autoencoder.add(Dense(units=1536, activation='relu'))
autoencoder.add(Dense(units=3072, activation='sigmoid'))
print(autoencoder.summary())
autoencoder.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
autoencoder.fit(previsores_treinamento, previsores_treinamento, epochs=100, batch_size=256,
validation_data=(previsores_teste, previsores_teste))
""" Capturar o codificador """
# Criação manual da rede, capturando as camadas ocultas (que são as imagens codificadas)
dimensao_original = Input(shape=(3072,))
camada_encoder1 = autoencoder.layers[0]
camada_encoder2 = autoencoder.layers[1]
encoder = Model(dimensao_original, camada_encoder2(camada_encoder1(dimensao_original)))
print(encoder.summary())
imagens_codificadas = encoder.predict(previsores_teste)
imagens_decodificadas = autoencoder.predict(previsores_teste)
""" Visualização das imagens """
numero_imagens = 10
imagens_teste = np.random.randint(previsores_teste.shape[0], size=numero_imagens)
plt.figure(figsize=(18, 18))
for i, indice_imagem in enumerate(imagens_teste):
# Imagem original
eixo = plt.subplot(10, 10, i + 1)
plt.imshow(previsores_teste[indice_imagem].reshape(32, 32, 3))
plt.xticks(())
plt.yticks(())
# Imagem codificada
eixo = plt.subplot(10, 10, i + 1 + numero_imagens)
plt.imshow(imagens_codificadas[indice_imagem].reshape(16, 16, 3))
plt.xticks(())
plt.yticks(())
# Imagem reconstruída
eixo = plt.subplot(10, 10, i + 1 + numero_imagens * 2)
plt.imshow(imagens_decodificadas[indice_imagem].reshape(32, 32, 3))
plt.xticks(())
plt.yticks(())
plt.show()
print('\nFim')