<jupyter_start><jupyter_text>Essa tarefa é referente ao curso de deep learning e tensorflow 2.0. do <NAME>.Basicamente é trabalhado em um dataset de roupas e acessórios onde o algoritmo deverá dizer qual tipo de roupa que é dentre a lista:0 - T-shirt/top1 - Trouser2 - Pullover3 - Dress4 - Coat5 - Sandal6 - Shirt7 - Sneaker8 - Bag9 - Ankle bootO dataset é divido entre 60.000 imagens de treino e mais 10.000 onde serão testadas o algoritmoVamos começar!! Cada imagem é composta de 28 x 28 pixels, onde cada pixel vai da cor 0 até 255, em tom monocromatico (preto e branco)<jupyter_code>xtrain[0].shape # representra o tamanho da imagem<jupyter_output><empty_output><jupyter_text>Abaixo podemos verificar a primeira foto em formato numérico... cada um dos pontos é um pixel, 0 sendo branco , 255 sendo preto<jupyter_code>xtrain[0]<jupyter_output><empty_output><jupyter_text>Abaixo podemos ver como é a imagem, podemos fazer isso também com qualquer outra imagem<jupyter_code>plt.imshow(xtrain[0], cmap = 'gray')
print(f"A classificação é o número: {ytrain[0]}")
plt.imshow(xtrain[5], cmap = 'gray')
print(f"A classificação é o número: {ytrain[5]}")<jupyter_output>A classificação é o número: 2<jupyter_text>No dataset xtrain e xtest ficam os pixels, no ytrain e ytest, o label de identificação de cada uma, por exemplo: shirt, bag, coat... Como podemos verificar a seguir:<jupyter_code>ytrain<jupyter_output><empty_output><jupyter_text>Para um melhor desempenho do algoritmo, devemos normalizar a imagem, ou seja, transformar todos os pixels entre o tamanho 0 e 1<jupyter_code>xtrain = xtrain / 255
xtest = xtest / 255
xtrain[0]<jupyter_output><empty_output><jupyter_text>Como possuímos 60.000 imagens com tamanho de 28 x 28, para podermos treinar o algoritmo devemos transformar em vetor, ou seja, (60 , 28 x 28)<jupyter_code>xtrain.shape
# como a dimensão de cada imagem é 28*28 mudamos toda a base de dados para o formato
#[-1 todos os elementos, altura * largura]
xtrain = xtrain.reshape(-1,28*28)
xtrain.shape
xtest = xtest.reshape(-1,28*28)
xtest.shape<jupyter_output><empty_output><jupyter_text>**Construindo a rede neural artificial**:**Partindo do pressuposto do seguinte link:**https://iaexpert.academy/2020/05/04/quantas-camadas-escondidas-e-quantos-neuronios-incluir-numa-rede-neural-artificial/:~:text=O%20n%C3%BAmero%20de%20neur%C3%B4nios%20escondidos%20deve%20ser%202%2F3,o%20dobro%20do%20tamanho%20da%20camada%20de%20entrada.**Temos:**1º - O número de neurônios escondidos deve estar entre o tamanho da camada de entrada e o da camada de saída. Usar o número médio entre as duas camadas é uma boa opção; ou seja... Uma camada oculta com 397 neurônios ((784 + 10)  /2) 2º - O número de neurônios escondidos deve ser 2/3 do tamanho da camada de entrada, mais o tamanho da camada de saída. Assim a camada oculta deverá ter 522 neurônios3º - O número de neurônios escondidos deve ser menor que o dobro do tamanho da camada de entrada. Ou seja, a camada escondida deverá ter menos do que 1568 neurôniosParâmetros: Camada de entrada: 784 neurôniosCamada oculta: 397 ~ 1568 (serão feitos testes com 397,522 e outro com valor de 700)Utilização do Droupout de 0.2 para zerar o valor de 20% dos neurônios Camada de Saída: 10 neurônios pois a quantidade de classes para serem previstas são de 10Modelo de ativação da camada de saída: 'softmax' pois existem mais de 2 classes para serem definidasModelo de ativação das demais camadas: 'relu'**------------------------Teste 1--------------------------------**Uma camada oculta com 397 neurônios ((784 + 10)  /2) Epoch 12model = tf.keras.models.Sequential() model.add(tf.keras.layers.Dense(units = 397, activation = "relu", input_shape=(784,)))model.add(tf.keras.layers.Dropout(0.2))model.add(tf.keras.layers.Dense(units=10, activation = "softmax")) adicionando a camada de saídaTest accuracy: 0.885200023651123**------------------------Teste 2--------------------------------**Uma camada oculta com 522 neurôniosEpoch = 12model = tf.keras.models.Sequential()model.add(tf.keras.layers.Dense(units = 522, activation = "relu", input_shape=(784,))) model.add(tf.keras.layers.Dropout(0.2))model.add(tf.keras.layers.Dense(units=10, activation = "softmax")) Test accuracy: 0.8902945968978128**-------------------------Teste 3 --------------------------------**Uma camada oculta com 700 neurôniosEpoch = 12model = tf.keras.models.Sequential() model.add(tf.keras.layers.Dense(units = 700, activation = "relu", input_shape=(784,))) camada de entrada + camada ocultamodel.add(tf.keras.layers.Dropout(0.2))model.add(tf.keras.layers.Dense(units=10, activation = "softmax")) Test accuracy: 0.8833000063896179**------------------------Teste 4-----------------------------------**Duas camadas ocultas de 397 neurônios, 12 epochsmodel = tf.keras.models.Sequential()model.add(tf.keras.layers.Dense(units = 397, activation = "relu", input_shape=(784,)))model.add(tf.keras.layers.Dropout(0.2))model.add(tf.keras.layers.Dense(units = 397, activation = "relu", input_shape=(784,))) model.add(tf.keras.layers.Dropout(0.2))model.add(tf.keras.layers.Dense(units=10, activation = "softmax")) Test accuracy: 0.8792999982833862**---------------------------Teste 5-----------------------------------**Duas camadas ocultas de 522 neurônios, 12 epochsmodel = tf.keras.models.Sequential() model.add(tf.keras.layers.Dense(units = 522, activation = "relu", input_shape=(784,)))model.add(tf.keras.layers.Dropout(0.2))model.add(tf.keras.layers.Dense(units = 522, activation = "relu", input_shape=(784,)))model.add(tf.keras.layers.Dropout(0.2))model.add(tf.keras.layers.Dense(units=10, activation = "softmax")) Test accuracy: 0.8866999745368958**---------------------------Teste 6 -----------------------------------**Duas camadas ocultas de 522 neurônios, 12 epochsmodel = tf.keras.models.Sequential() model.add(tf.keras.layers.Dense(units = 522, activation = "relu", input_shape=(784,))) camada de entrada + camada ocultamodel.add(tf.keras.layers.Dropout(0.2))model.add(tf.keras.layers.Dense(units = 522, activation = "relu", input_shape=(784,))) model.add(tf.keras.layers.Dropout(0.2))model.add(tf.keras.layers.Dense(units=10, activation = "softmax"))Test accuracy: 0.8851000070571899**-------------------------Teste 7 ----------------------------------**mesmos parâmetros do teste 2, porém com epoch = 15model = tf.keras.models.Sequential() model.add(tf.keras.layers.Dense(units = 522, activation = "relu", input_shape=(784,))) model.add(tf.keras.layers.Dropout(0.2))model.add(tf.keras.layers.Dense(units=10, activation = "softmax"))Test accuracy: 0.8925999999046326**-------------------------Teste 8 ----------------------------------**mesmos parâmetros do teste 2, porém com epoch = 10model = tf.keras.models.Sequential() model.add(tf.keras.layers.Dense(units = 522, activation = "relu", input_shape=(784,))) model.add(tf.keras.layers.Dropout(0.2))model.add(tf.keras.layers.Dense(units=10, activation = "softmax"))Test accuracy: 0.8841000199317932**Ou seja, os melhores parâmetros foram do teste 2 e do teste 7****Realizei todos os testes com os parâmetros anteriores, então a seguir utilizarei apenas os melhores parâmetros, que são referentes ao teste 7**"""<jupyter_code>#Parametros do teste 7
model = tf.keras.models.Sequential()

model.add(tf.keras.layers.Dense(units = 522, activation = "relu", input_shape=(784,)))

model.add(tf.keras.layers.Dropout(0.2))

model.add(tf.keras.layers.Dense(units=10, activation = "softmax"))
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy',
              metrics =['sparse_categorical_accuracy'])<jupyter_output><empty_output><jupyter_text>O sumário a seguir demonstra como se encontra a nossa rede neural atual<jupyter_code>model.summary()<jupyter_output>Model: "sequential_3"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_6 (Dense)              (None, 522)               409770    
_________________________________________________________________
dropout_3 (Dropout)          (None, 522)               0         
_________________________________________________________________
dense_7 (Dense)              (None, 10)                5230      
=================================================================
Total params: 415,000
Trainable params: 415,000
Non-trainable params: 0
_________________________________________________________________<jupyter_text>Treinamento da nossa rede neural, com os parâmetros passados anteriormente<jupyter_code>model.fit(xtrain,ytrain,epochs=15)
test_loss , test_accuracy = model.evaluate(xtest,ytest)<jupyter_output>313/313 [==============================] - 1s 2ms/step - loss: 0.3250 - sparse_categorical_accuracy: 0.8926<jupyter_text>O algoritmo deu uma precisão de 89,25% em todas as 10 mil imagens testadas<jupyter_code>print(f"Test accuracy: {test_accuracy}")
test_loss<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1757508342602892, 'fraction_numerical': 0.059621802002224694, 'mean_word_length': 4.230366492146596, 'pattern_counts': {'":': 0, '<': 39, '<?xml version=': 0, '>': 39, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '10', 'dir': 'jupyter-structured-clean-dedup', 'id': '588139', 'license': 'MIT', 'n_tokens_mistral': 3381, 'n_tokens_neox': 3011, 'n_words': 752, 'path': 'Redes_Neurais.ipynb', 'repo_name': 'LeopoldoZanellato/python', 'size': '8998'}