iris딥러닝.py
Iris 데이터셋을 사용한 딥러닝 다중 분류 예제
핵심 개념
- Sequential 모델 구축
- Dense 레이어 (완전 연결층)
- 원핫 인코딩 (to_categorical)
- StandardScaler를 이용한 데이터 정규화
from numpy.lib.npyio import load
from scipy.sparse.construct import random
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
import tensorflow as tf
tf.random.set_seed(2) #시드고정하기
iris = load_iris()
X_train, X_test , y_train, y_test = train_test_split(iris['data'], iris['target'],random_state=0)
#2.딥러닝 모델을 만든다
from tensorflow.keras import models
from tensorflow.keras import layers
#신경망 모델 만들기
network = models.Sequential()
#층을 추가한다. - 입력층과 출력층 두개는 추가해야 한다
network.add( layers.Dense(64, activation="relu", input_shape=(4, )))
network.add( layers.Dense(3, activation="softmax") )
network.compile( optimizer="sgd",
loss="categorical_crossentropy",
metrics=['accuracy'])
#입력데이터 스케일링
scalar = StandardScaler()
#학습을 한다
scalar.fit(X_train)
X_train = scalar.transform(X_train) #학습된 내용으로 데이터를 변환한다
X_test = scalar.transform(X_test) #학습된 내용으로 데이터를 변환한다
#다중이미지분류 - 딥러닝은 반드시 원핫인코딩으로 해서 전달해야 한다
from tensorflow.keras.utils import to_categorical #케라스가 제공하는 원핫인코딩
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)
#학습시작
hist = network.fit (
X_train,
y_train,
epochs=10, #총 학습횟수
batch_size=100
)
train_loss, train_acc = network.evaluate(X_train, y_train)
print("훈련셋 손실 {} 정확도 {}".format(train_loss, train_acc))
test_loss, test_acc = network.evaluate(X_test, y_test)
print("테스트셋 손실 {} 정확도 {}".format(test_loss, test_acc))
#예측하기
y_pred = network.predict(X_test)
print(y_pred[:10])
# result = network.predict_classes(X_test)
# print(result[:10])
import numpy as np
y_pred=np.argmax(y_pred, axis=1) #np.argmax [0.21312772 0.26518998 0.5216823 ] 젤 큰값이 있는곳을 반환
for i in range(20):
print( iris["target_names"][y_pred[i]])