# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: light
#       format_version: '1.5'
#       jupytext_version: 1.14.4
#   kernelspec:
#     display_name: Python 3
#     name: python3
# ---

# + id="fWjWlshjLsok" colab_type="code" colab={}
import keras
from keras.datasets import mnist
from tensorflow.python.keras import Sequential
from tensorflow.python.keras.layers import Dense, Dropout
from tensorflow.compat.v1.keras.optimizers import RMSprop

# + id="mUZCxpzbL1P1" colab_type="code" colab={}
#Carregando treino e teste
#função possui parentes

(x_treino, y_treino),(x_teste, y_teste) = mnist.load_data()

# + id="-2EPDhqyNM18" colab_type="code" colab={"base_uri": "https://localhost:8080/", "height": 1000} outputId="bb64add2-cb9a-4a71-a10b-777711fee341"
#how many images I have for train?
print("img for train",len(x_treino))
#how many image for test?
print("img for test", len(x_teste))
#who type x_treino?
print("Tipo do x_treino", type(x_treino))
#get first image
primeira_imagem = x_treino[0]
print(primeira_imagem) 



# + id="RO-DKCK9OSIj" colab_type="code" colab={"base_uri": "https://localhost:8080/", "height": 282} outputId="d740eb7c-68d0-46eb-db9e-062122ef847c"
import matplotlib.pyplot as plt

indice = 15000

plt.imshow(x_treino[indice])
plt.show

# + id="v3VfulcHQPh3" colab_type="code" colab={}
#achatando matrizes de pixel e transformando em uma unica lista com valores entre 0 e 1
quantidade_treino = len(x_treino)
quantidade_teste = len(x_teste)

resolucao_imagem = x_treino[0].shape
resolucao_total = resolucao_imagem[0] * resolucao_imagem[1]

x_treino = x_treino.reshape(quantidade_treino, resolucao_total)
x_teste = x_teste.reshape(quantidade_teste, resolucao_total)


# + id="oCyxlqK2S6Za" colab_type="code" colab={"base_uri": "https://localhost:8080/", "height": 52} outputId="9b745769-8d60-4051-d8cd-86cc47042ad7"
#normalização dos dados
#255 vira 1
# 0 vira 0
#assim por diante


x_treino = x_treino.astype('float32')
x_teste = x_teste.astype('float32')

x_treino /= 255
x_teste /= 255

           
print(type(x_treino[0][350]))
print(x_treino[0][350])


# + id="Jg19KxBeUzJD" colab_type="code" colab={"base_uri": "https://localhost:8080/", "height": 1000} outputId="86d61317-9c7f-4329-e685-c72ee6dc7073"
#dados normalizados

print("Dados normalizados", x_treino[0])



# + id="_iHKq-iVWLwY" colab_type="code" colab={"base_uri": "https://localhost:8080/", "height": 70} outputId="8b5d47a1-98f7-43c4-c2ae-5e801a836013"
#camada de saida

valores_unicos = set(y_treino)
quantidade_valores_unicos = len(valores_unicos)
print(valores_unicos)

#transformação dos valores unicos em variaveis categoricas

#representação categorica de um numero em uma rede neural
# numero 0 -> [1,0,0,0,0,0,0,0,0,0]
#...
#numero 9 - > [0,0,0,0,0,0,0,0, 9]

print("y_treino[0 antes", y_treino[0] )
y_treino = keras.utils.to_categorical(y_treino, quantidade_valores_unicos)
y_teste = keras.utils.to_categorical(y_teste, quantidade_valores_unicos)

print("y_treino[0] depois", y_treino[0])

#executa apenas 1 vez ou pode quebrar todo código

# + id="zd0TMqnLWmoX" colab_type="code" colab={"base_uri": "https://localhost:8080/", "height": 336} outputId="89485325-6d1c-4f10-a4a5-cba92234a12e"
#criando modelo de rede neural

model = Sequential()

#primeira hidden layer com 30 neuronios e função de ativação ReLu
#Na camada 1 , informamos input shape, que é (784,) , ela é uma tupla, entao virgula é essencial


model.add(Dense(450, activation='relu', input_shape=(resolucao_total, )))

#adicionando dropout pra evitar overfit

model.add(Dropout(0.2))

#segunda hidden layer , essa tem pedaços maiores, entao sera cada uma com 20 neutonios + relu
model.add(Dense(300, activation='relu'))

#mais um regularizador apos a 2 hidden

model.add(Dropout(0.2))

#finalizamos com camada de saida, output , informando valores unicos

model.add(Dense(quantidade_valores_unicos, activation='softmax'))

#exibe modelo criado

model.summary()

# + id="SCm8A_R0d-A5" colab_type="code" colab={}
model.compile(loss='categorical_crossentropy', 
              optimizer=RMSprop(),
              metrics=['accuracy'])

# + id="xhEv3cUkfNfc" colab_type="code" colab={"base_uri": "https://localhost:8080/", "height": 727} outputId="8be60b21-b4ab-43ea-9bb5-95634fc9aaf7"
#Treinar o modelo

history = model.fit(x_treino,y_treino,
                    batch_size=128,
                    epochs=20
                    ,verbose=1
                    ,validation_data= (x_teste, y_teste))

# + id="FtCIpTgEgLA-" colab_type="code" colab={"base_uri": "https://localhost:8080/", "height": 371} outputId="2c919ac3-256e-455f-ff1f-a59413a5ab91"
#Fazendo nossas previsoes

indice = 9800


#Qual valor categorico de y_test[indice]

print("Valor categorico em y_teste[indice]", y_teste[indice])

#parece ser 7

#print(x_teste[indice])
imagem = x_teste[indice].reshape((1, resolucao_total))

#print(imagem)

#fazendo previsao

prediction = model.predict(imagem)
print("Previsão :", prediction)

#prediction_class = model.predict_classes(imagem)

import numpy as np

prediction_class = np.argmax(model.predict(imagem), axis= -1)

print("Previsão ajustada", prediction_class)

(x_treino_img, y_treino_img), (x_teste_img, y_teste_img) = mnist.load_data()
plt.imshow(x_teste_img[indice], cmap=plt.cm.binary)

# + id="LJvZf22eh12X" colab_type="code" colab={"base_uri": "https://localhost:8080/", "height": 1000} outputId="2c3153a0-8083-44db-8588-dfa34ef47751"
#Fazendo nossas previsoes

while True:
  print("digite um valor entre 0 e 10000")
  indice = int(input())

  if indice == -1:
    break

    
  #Qual valor categorico de y_test[indice]

  print("Valor categorico em y_teste[indice]", y_teste[indice])

  #print(x_teste[indice])
  imagem = x_teste[indice].reshape((1, resolucao_total))

  #print(imagem)

  #fazendo previsao

  prediction = model.predict(imagem)
  print("Previsão :", prediction)

  #prediction_class = model.predict_classes(imagem)

  import numpy as np

  prediction_class = np.argmax(model.predict(imagem), axis= -1)

  print("Previsão ajustada", prediction_class)

  (x_treino_img, y_treino_img), (x_teste_img, y_teste_img) = mnist.load_data()
  plt.imshow(x_teste_img[indice],  cmap=plt.cm.binary)
  plt.show()

# + id="L4UEqjzwkW0C" colab_type="code" colab={}


StarcoderdataJupyterScriptsDedupFiltered