- Dense 층을 구성, 입력데이터모양, 활성화 함수, 출력뉴런의 개수
- Sequence로 층을 연결
- model = keras, Sequencial(dense)
- compile : 손실함수, 평가방법
- model.compile(loss= , metrics='acc')
- 학습 : fit, 에포크수
- model.fit(x,y,epochs=50, validation_data=(XX_val, yy_val))
1. 딥러닝으로 패션 데이터 분류하기
keras.datasets를 통해 패션 데이터를 불러온다.
from tensorflow import keras
(X_train, y_train),(X_test, y_test) = keras.datasets.fashion_mnist.load_data()
이 데이터는 이미지 데이터들이다.
시각화
import matplotlib.pyplot as plt
fig, axs = plt.subplots(1,10,figsize=(10,10))
for i in range(10):
axs[i].imshow(X_train[i], cmap='gray_r')
axs[i].axis('off')
plt.show()

Scaling
X_train_scaled = X_train / 255.0
X_train_scaled = X_train_scaled.reshape(-1, 28*28)
X_test_scaled = (X_test / 255.0).reshape(-1,28*28)
print(X_train_scaled.shape)
패션 MNIST의 경우 각 픽셀은 0~255 사이의 정숫값을 가진다. 따라서 255로 나누어 0~1 사이의 값으로 정규화한다.
reshape() 메서드를 사용해 2차원 배열인 각 샘플을 1차원 배열로 펼친다.
SGDClassifier는 2차원 입력을 다루지 못한다.
SGDClassifier
from sklearn.model_selection import cross_validate
from sklearn.linear_model import SGDClassifier
sc = SGDClassifier(loss = 'log_loss', max_iter = 5, random_state=42)
scores = cross_validate(sc, X_train_scaled, y_train, n_jobs=-1)
print(np.mean(scores['test_score']))

cross_validate 함수를 사용해 이 데이터에서 교차 검증으로 성능을 확인해본다.
인공신경망
1) 훈련 세트, 검증 세트로 데이터 분리하기
from sklearn.model_selection import train_test_split
XX_train, XX_val, yy_train, yy_val = train_test_split(X_train_scaled, y_train, stratify=y_train, random_state=42)
2) dense, sequential
케라스의 레이어 패키지 안에는 다양한 층이 있는데, 가장 기본이 되는 층 : 밀집층
dense = keras.layers.Dense(10, activation='softmax', input_shape= (XX_train.shape[1],))
model = keras.Sequential(dense)
Dense(뉴런 개수, 뉴런의 출력에 적용할 함수, 입력의 크기)
10개의 패션 아이템을 분류하기 때문에 첫 번재 매개변수로 뉴런 개수 = 10으로 지정
10개의 뉴런에서 출력되는 값을 확률로 바꾸기 위해서 소프트맥스 함수 사용
- 만약 2개의 클래스를 분류하는 이진 분류라면 : 시그모이드 함수
keras.Sequential(dense)
Sequential 클래스의 객체를 만들 때 밀집층의 객체 dense 전달
3) compile
# 이진분류 binary_crossentropy
# 다중분류 categorical_crossentropy --> 레이블이 one hot으로 처리되었을 때
# 다중분류 sparse_categorical_crossentropy --> 레이블이 one hot으로 처리되지 않았을 때
model.compile(loss = 'sparse_categorical_crossentropy',metrics='acc') # acc -> accuracy
꼭 손실 함수의 종류를 지정해줘야 한다.
- 이진 분류 : loss = 'binary_crossentropy'
- 다중 분류 : loss = 'categorical_crossentropy'
다중 분류에서 크로스 엔트로피 손실 함수를 사용하려면 원-핫 인코딩으로 변환 필요
텐서플로에서는 정수로 된 타깃값을 원-핫 인코딩으로 바꾸지 않고 그냥 사용 가능
-> sparse_categorical_crossentropy
4) fit, evaluate
model.fit(XX_train, yy_train, epochs=10,validation_data= (XX_val, yy_val))
model.evaluate(X_test_scaled, y_test)
2. iris 데이터 분류하기
from sklearn.datasets import load_iris
data = load_iris()
X = data.data
y = data.target
np.unique(y,return_counts=True)
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
plt.scatter(X_pca[:,0],X_pca[:,1],c=y)
plt.show()

from tensorflow.keras.layers import Dense
from tensorflow.keras import Sequential
from tensorflow import keras
X_train, X_test, y_train, y_test = train_test_split(X,y,stratify=y, random_state=42)
dense = Dense(3, activation='softmax', input_shape= (4,))
model = Sequential(dense)
model.compile(loss = keras.losses.sparse_categorical_crossentropy ,metrics='acc') # acc -> accuracy
model.fit(X_train, y_train, validation_split=0.2,epochs=100)
model.evaluate(X_test, y_test)
'ML,DL' 카테고리의 다른 글
[DL] SRGAN : 이미지 화질 개선 (0) | 2024.05.03 |
---|---|
[DL] 인공 신경망 - 심층 신경망(렐루 함수, Flatten) (0) | 2024.04.16 |
[ML] 트리의 앙상블 (1) | 2024.04.12 |
[ML] 확률적 경사 하강법 (0) | 2024.04.08 |
[ML] 로지스틱 회귀 Logistic Regression (0) | 2024.04.08 |