This is a follow up question from my latest post: Put input in a tensorflow neural network
I precoded a neural network using tensorflow with the MNIST dataset, and with the help of @FinnE was able to change a bit of my code, the two files are listed below:
main.py:
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
mnist=tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train=tf.keras.utils.normalize(x_train, axis=1)
x_test=tf.keras.utils.normalize(x_test, axis=1)
model=tf.keras.models.Sequential()
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(128, activation=tf.nn.relu))
model.add(tf.keras.layers.Dense(128, activation=tf.nn.relu))
model.add(tf.keras.layers.Dense(10, activation=tf.nn.softmax))
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model.fit(x_train, y_train, epochs=3)
val_loss, val_acc = model.evaluate(x_test, y_test)
print(val_loss, val_acc)
model.save("num_reader.model")
new_model=tf.keras.models.load_model('num_reader.model')
predictions=new_model.predict([x_test])
print(predictions)
screen.py:
import tensorflow as tf
import pygame
import sys
import numpy as np
from main import *
import main as nn
class Screen:
def __init__(self):
pygame.init()
#self.screen=pygame.display.set_mode((28,28),pygame.FULLSCREEN)
self.screen=pygame.display.set_mode((280,280))
self.array=[]
self.setArr()
self.bg_color=(250, 250,250)
self.ok=False
self.full=[]
self.done=False
print(new_model)
self.result=0
def runGame(self):
self.screen.fill(self.bg_color)
while True:
pygame.display.flip()
self._check_events()
self.draw()
if self.full != []:
break
def _check_events(self):
for event in pygame.event.get():
if event.type==pygame.QUIT:
sys.exit()
if event.type==pygame.KEYDOWN:
if event.key==pygame.K_ESCAPE:
sys.exit()
if event.key==pygame.K_d:
self.done=True
self.decode()
print(len(self.full))
if event.key==pygame.K_c:
self.done=False
self.setArr()
self.screen.fill(self.bg_color)
if event.type==pygame.MOUSEBUTTONDOWN:
#print("mouseDown")
self.ok=True
elif event.type==pygame.MOUSEBUTTONUP:
self.ok=False
def setArr(self):
self.shortArr=[]
for y in range(28):
self.shortArr.append(0)
for x in range(28):
self.array.append(self.shortArr)
def draw(self):
if self.ok==True:
x,y=pygame.mouse.get_pos()
x=round(x/10)*10
y=round(y/10)*10
#print(x,y)
#print(self.array[int(x)//10][int(y)//10])
self.array[int(x)//10][int(y)//10]=1
pygame.draw.rect(self.screen, (0,0,0), pygame.Rect(x, y, 10, 10))
#print("draw")
def decode(self):
self.full=[]
for x in range(28):
for y in range(28):
self.full.append(self.array[x][y])
if __name__ == '__main__':
Sc=Screen()
Sc.runGame()
result = nn.new_model.predict(tf.keras.utils.normalize(np.array(Sc.full), axis=1))
print(result)
however I get the following error when the code is run.
Traceback (most recent call last):
File "C:\Users\user\Documents\Jake\machine learning\MNIST dataset SOLVED\screen.py", line 81, in <module>
result = nn.new_model.predict(tf.keras.utils.normalize(np.array(Sc.full), axis=1))
File "C:\Users\user\AppData\Local\Programs\Python\Python310\lib\site-packages\keras\utils\np_utils.py", line 89, in normalize
l2 = np.atleast_1d(np.linalg.norm(x, order, axis))
File "<__array_function__ internals>", line 180, in norm
File "C:\Users\user\AppData\Local\Programs\Python\Python310\lib\site-packages\numpy\linalg\linalg.py", line 2547, in norm
return sqrt(add.reduce(s, axis=axis, keepdims=keepdims))
numpy.AxisError: axis 1 is out of bounds for array of dimension 1