1
resposta

Pera de eficiência da rede

Na aula sobre o número de camadas, a perda de eficiência na rede se dá pelo execução da normalização repetidas vezes?

1 resposta

Olá Marco.

Exatamente, infelizmente por a normalização estar ocorrendo toda vez que treinamos o modelo os nossos resultados foram prejudicados.

Para resolver isso, basta colocar a normalização em outra célula e/ou criar uma nova variável, essa que vai salvar os nossos dados de treino já normalizados.

imagens_treino_normalizado = imagens_treino/ float(255)

E na célula seguinte temos apenas a criação e treinamento do modelo.

modelo = keras.Sequential([
                           keras.layers.Flatten(input_shape=(28,28)),
                           keras.layers.Dense(256, activation=tensorflow.nn.relu),
                           keras.layers.Dense(128, activation=tensorflow.nn.relu),
                           keras.layers.Dense(64, activation=tensorflow.nn.relu),
                           keras.layers.Dense(10, activation=tensorflow.nn.softmax)
])

modelo.compile(optimizer='adam',
               loss='sparse_categorical_crossentropy')

modelo.fit(imagens_treino_normalizado, identificacoes_treino)

Fiz alguns testes para ver a diferença que essa separação fez:

  • Utilizando apenas 2 camadas tivemos o resultado (Tempo: 5s 82us/sample - Perda: 0.4845)
modelo = keras.Sequential([
                           keras.layers.Flatten(input_shape=(28,28)),
                           keras.layers.Dense(256, activation=tensorflow.nn.relu),
                           keras.layers.Dense(10, activation=tensorflow.nn.softmax)
])

modelo.compile(optimizer='adam',
               loss='sparse_categorical_crossentropy')

modelo.fit(imagens_treino_normalizado, identificacoes_treino)
  • Utilizando apenas 3 camadas tivemos o resultado (Tempo: 6s 103us/sample Perda: 0.4758)
modelo = keras.Sequential([
                           keras.layers.Flatten(input_shape=(28,28)),
                           keras.layers.Dense(256, activation=tensorflow.nn.relu),
                           keras.layers.Dense(128, activation=tensorflow.nn.relu),
                           keras.layers.Dense(10, activation=tensorflow.nn.softmax)
])

modelo.compile(optimizer='adam',
               loss='sparse_categorical_crossentropy')

modelo.fit(imagens_treino_normalizado, identificacoes_treino)
  • Utilizando apenas 4 camadas tivemos o resultado (Tempo: 6s 96us/sample Perda: 0.4819)
modelo = keras.Sequential([
                           keras.layers.Flatten(input_shape=(28,28)),
                           keras.layers.Dense(256, activation=tensorflow.nn.relu),
                           keras.layers.Dense(128, activation=tensorflow.nn.relu),
                           keras.layers.Dense(64, activation=tensorflow.nn.relu),
                           keras.layers.Dense(10, activation=tensorflow.nn.softmax)
])

modelo.compile(optimizer='adam',
               loss='sparse_categorical_crossentropy')

modelo.fit(imagens_treino_normalizado, identificacoes_treino)

Com esses resultados conseguimos medir que o tempo de treinamento realmente aumentou e também que aumentar o numero de camadas não necessariamente vai diminuir nossa perda.

Espero ter ajudado, qualquer duvida não hesite em perguntar.

Bons Estudos.