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() 레이어는 입력 데이터의 크기가 784인 32개의 유닛을 가진 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
lJupyternotebook에 content라는 새 폴더를 만들고 해당 폴더에 위 테스트 이미지를 업로드
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