brunch
매거진 NCP AI

1Lab 3. 인공신경망 모델로 MNIST로 손글씨

by Master Seo

1.분석을 위한 파이썬 패키지 불러오기

import tensorflow as tf

import numpy as np

import matplotlib.pyplot as plt

%matplotlib inline

import timestart_time = time.time()



2.Mnist 데이터셋 업로드 및 데이터 살펴보기



import tensorflow as tf

import numpy as np

import matplotlib.pyplot as plt

%matplotlib inline

import timestart_time = time.time()



3.Mnist 데이터 확인하기 - 훈련 데이터에 가장 처음에 있는 데이터의 이미지와 실제 레이블 확인



4.MNIST 데이터 이미지 시각화하여 확인하기(트레인 데이터를 28*28 비트로 총 100개를 행,열 각 10개씩으로 표현)


row = 10

col = 10

n = row * col

plt.figure(figsize=(6,6)) for i in range(n):

ax = plt.subplot(row, col, i+1) plt.imshow(x_train[i].reshape(28,28)) plt.gray() ax.get_xaxis().set_visible(False) ax.get_yaxis().set_visible(False)

plt.show()



5.데이터 전처리하기 – 0~255.0 사이의 값을 갖는 픽셀값들을 0~1.0 사이의 값을 갖도록 구성


x_train, x_test = x_train/255.0, x_test/255.0


5.모델 구성


model = tf.keras.models.Sequential([

tf.keras.layers.Flatten(input_shape=(28,28)), #Flatten : 28*28 array => 1차원 배열로 정렬 tf.keras.layers.Dense(512,activation=tf.nn.relu), #activation 함수 : relu tf.keras.layers.Dense(10, activation=tf.nn.softmax) # 출력 함수 : max, 레이블 10개로 분류

])

model.summary()



ltensorflow.keras.models.Sequential()tensorflow.keras 라이브러리에서 제공하는 모델 생성
함수입니다.

lSequential() 함수는 다음과 같은 특징을 가지고 있습니다.

•순차적 모델 생성: 순차적 모델(Sequential Model)을 생성합니다.

•모델 구성 요소 추가: 모델에 구성 요소(Layer)를 추가하여 모델을 구성합니다.

•모델 설정: 모델의 설정을 변경합니다.

•모델 학습: 모델을 학습합니다.

•첫 번째 Dense() 레이어는 입력 데이터의 크기가 78432개의 유닛을 가진 relu 활성화 함수(딥러닝 활성 화 함수)를 사용하고,
두 번째 Dense() 레이어는 10개의 유닛을 가진 softmax 활성화 함수를 사용합니다





모델 컴파일

model.compile(optimizer='adam',

loss='sparse_categorical_crossentropy', #sparse : 희소행렬

metrics=['accuracy'])


l손실함수를 줄이기 위한 Optimizer는 adam(Adaptive Momentum Estimation)을 사용

l손실함수는 sparse_categorical_crossentropy를 사용

l평가지표로는 accuracy 사용

l모델 학습


model.fit(x_train, y_train, batch_size=1000, epochs=50) #epochs : 반복


l모델 평가


model.evaluate(x_test, y_test)




l테스트 이미지 업로드 -테스트 이미지는 그림판에서 픽셀 28*28로 지정하고 붓을 사용해 생성

l테스트 이미지는 아래 경로에서 다운로드

lhttps://kr.object.ncloudstorage.com/ai-edu/3.png

lJupyternotebookcontent라는 새 폴더를 만들고 해당 폴더에 위 테스트 이미지를 업로드


l배경과 숫자의 이미지 반전 학습 이미지는 흑백 배경에 흰 숫자이기 때문에 해당 형식에 맞추어 변경


l255 - np.array(img_png)는 이미지의 픽셀 값을 255에서 뺀 값을 반환하는 연산입니다.
이 연산은 이미지의 색상을 반전시키는 효과를 줍니다. 예를 들어, 흰색 이미지가 검은색으로 반전됩니다.




l데이터 전처리


l데이터의 배열을 실수로 바꾸고, 1차원 배열로 변경

image_arr = np.asarray(data_value[1:], dtype=np.float32).reshape((1,28,28,1))


l이미지 예측해보기

predictions = model(image_arr).numpy()

result = np.argmax(tf.nn.softmax(predictions).numpy()) print(f'이미지 분류 결과 : {result}')



l수행 시간 살펴보기 ( ※ 본 프로그램의 실행시간은 333초입니다. )


end_time = time.time()

exec_time = int(end_time - start_time)print(f"본 프로그램의 ❽ 실행시간은 {exec_time}초입니다.")



다음

https://brunch.co.kr/@topasvga/4983


keyword
매거진의 이전글1Demo 4. 알고리즘 살펴보기 : Random