AI 인공지능/딥러닝 Practices

07.31 CLASS SUMMARY (mnist ②)

dngus_tak 2021. 8. 1. 00:37

지난 번 mnist의 기본적인 모델을 만들었으나, 상당히 정확도가 떨어졌다.

그래서 정규화 및 오차함수를 설정해 최대한 손글씨에 근접하게 인식하도록 구체화시켰다.

x_train, x_test = x_train / 255.0 , x_test / 255.0

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Flatten, Dense, Dropout

model = Sequential([
                    Flatten(input_shape=(28,28)), 
                    Dense(128, activation='relu'), 
                    Dense(128, activation='relu'), 
                    Dropout(0.2), 
                    Dense(10,activation='softmax') 
])

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

model.fit(x_train, y_train, epochs=5)

model.evaluate(x_test, y_test, verbose=2)

pred = model.predict(x_test)

plt.imshow(x_test[3])
plt.show()
print(np.argmax(pred[3]))

그 결과, 다음이 도출되었다.

그러나 프로그램이 틀린 예측을 했을 경우, 실제와 오차를 모두 표기하기 위해 다음을 추가하면,

for i, p in enumerate(pred):
  result = np.argmax(p)
  if result != y_test[i]: #예측이 틀리면
    plt.imshow(x_test[i])
    plt.show()
    print('actual(실재값):',y_test[i],'predict(예측값):',result)

이렇게 실제값과 오차값을 동시에 표기해준다.