신경망과 Tensorflow를 사용한 손 숫자 예측

이 블로그에서는 MNIST 데이터 세트를 사용하여 신경망 모델을 교육하는 방법과 이미지를 사용하여 숫자를 예측하는 방법을 보여줍니다.

Tensorflow 패키지가 설치되어 있는지 확인하십시오. 여기에서 Deep Learning 라이브러리로 활용됩니다.

우리에게 필요한 모든 패키지를 가져오자

import os  
import cv2 
import matplotlib.pyplot as plt 
import tensorflow as tf 
import numpy as np


모든 필수 패키지를 가져온 후에는 MNIST 데이터 세트를 가져와야 모델을 훈련할 수 있습니다. 데이터 세트를 가져온 후 교육 및 테스트로 분할합니다.

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) 


이제 우리의 신경망 모델을 통합할 시간입니다. Keras로 네트워크 모델을 만들어 봅시다.

Flatten 레이어를 사용하여 이미지의 치수를 단일 치수로 재구성합니다. 128개 뉴런, 128개 뉴런 및 64개 뉴런의 Dense 레이어는 각각 두 번째, 세 번째 및 네 번째 레이어를 구성합니다. 최종 출력 레이어는 MNIST 데이터 세트에 10개의 서로 다른 클래스가 있기 때문에 10개의 뉴런이 있는 Dense 레이어입니다.

model = tf.keras.Sequential() 
model.add(tf.keras.layers.Flatten(input_shape = (28 , 28))) 
model.add(tf.keras.layers.Dense(128 , activation='relu'))
model.add(tf.keras.layers.Dense(128 , activation='relu'))
model.add(tf.keras.layers.Dense(64 , activation='relu'))
model.add(tf.keras.layers.Dense(10 , activation='softmax')) 


나중에 adamoptimizer, accuracymetrices, sparse_categorical_crossentropyloss를 지정하여 네트워크 모델을 컴파일해 보겠습니다.

model.compile(optimizer='adam' , loss='sparse_categorical_crossentropy' , metrics=['accuracy']) 


마지막으로 fit 함수를 사용하여 모델을 훈련합니다.



학습된 모델을 테스트해야 합니다. figma로 생성된 입력 이미지를 제공할 예정입니다.digits라는 폴더를 만든 다음 그 안에 숫자 이미지를 digit1.png, digit2.png 등으로 넣습니다.

def predict_img(model):  
    image_number = 1
    while os.path.isfile(f"digits/digit{image_number}.png"):
        img = cv2.imread(f"digits/digit{image_number}.png")[:,:,0] 
        img = cv2.resize(img,(28 , 28))     
        img = np.invert(np.array([img]))
        prediction = model.predict(img) 
        print(f"This digit is probably a {np.argmax(prediction)}") 
        plt.imshow(img[0] , cmap = plt.cm.binary)
        plt.show()  
        image_number += 1 


모델을 매개변수로 사용하여 이 함수를 호출해 봅시다.

predict_img(model)


결과적으로 아래와 같은 일련의 사진을 얻을 수 있습니다.





이제 모델을 hand_digit.h5로 저장하고 해당 모델을 사용하여 예측을 수행하는 다른 접근 방식을 시도해 보겠습니다.

model.save('hand_digit.h5')

loaded_model = tf.keras.models.load_model('hand_digit.h5') 

loss , accuracy = model.evaluate(x_test , y_test ) 
print(loss) 
print(accuracy)

predict_img(loaded_model)


결과적으로 최종 출력은 다음과 같습니다.





그 결과 다른 네트워크를 개발하고 작업했습니다. jupyter 파일은 내 github 저장소에서 찾을 수 있습니다.

Github 레포 : https://github.com/ndrohith09/Hand-digit-classificaiton-using-MNIST-dataset-and-CNN

이 블로그가 손 숫자 인식을 위한 자신만의 CNN 모델을 만드는 데 도움이 되기를 바랍니다.

좋은 웹페이지 즐겨찾기