| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- #abc부트캠프 #유클리드소프트 #고용노동부 #대한상공회의소 #미래내일일경험사업
- #abc 프로젝트 멘토링 #유클리드소프트 #고용노동부 #대한상공회의소 #미래내일일경험사업 #공부일지 #멘토링일지
- Today
- Total
나른한 코딩 생활
[23일차] ABC 부트캠프 패션 데이터 및 CNN 본문
이전까지 배웠던 케라스를 또다른 예제들을 통해서 공부해보자
오늘은 총 4개의 예제를 풀어보도록 하겠다
XOR 데이터 학습 및 예측
# 데이터 준비하기
"""
XOR
0, 0 -> 0
0, 1 -> 1
1, 0 -> 1
1, 1 -> 0
"""
import tensorflow as tf
data = tf.constant([[0, 0], [0, 1], [1, 0], [1, 1]],dtype=tf.int32, name="[x1,x2]")
# uint 와 int의 차이점은 ? u = unsigned 의 약자 / 기본적으로 사용하고 있는 int 는 signed
# 부호가 있냐 없냐의 차이이고, 이럴 경우 uint 는 양수값만을 취급
# 뒤의 숫자 8, 16, 32, 64 는 bit 수를 의미하며 단위의 크기를 결정
label = tf.constant([[0], [1], [1], [0]], dtype=tf.int32, name="y")
# 이렇게도 가능
other_data = tf.Variable([[0,0],[0,1],[1,0],[1,1]])
from tensorflow.keras import Sequential, Input
from tensorflow.keras.layers import Dense
model = Sequential([],name="MODEL")
model.add(Input(shape=(2,), dtype= tf.int32,name='INPUT'))
model.add(Dense(units=32,activation='relu',name='LAYER1'))
model.add(Dense(units=16,activation='relu',name='LAYER2'))
model.add(Dense(units=8,activation='relu',name='LAYER3'))
model.add(Dense(units=1,activation='sigmoid',name='OUTPUT'))
model.summary()
model.compile(loss='mse',optimizer='RMSProp')
# loss: 0.0055 loss: loss: 0.0054 loss: 0.0053 loss: 0.0052
model.fit(data,label,epochs=400)
#model.save('BEST_WEIGHTS.keras')
print(model.predict(data))
#ex) [[0.13784546] [0.98600066] [0.973925 ] [0.01885279]]

결과창을 보면 해당 코드를 실행할때마다 학습되는 정도가 다르기 때문에
손실률인 loss 와 predict 값이 바뀌는 것을 볼 수 있다
패션 아이템 학습 및 예측 - test 값 확인
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
fashion_mnist = tf.keras.datasets.fashion_mnist
print(fashion_mnist)
(X_train,y_train), (X_test,y_test) = fashion_mnist.load_data()
print(X_train)
print(X_train.shape) #(60000, 28, 28)
print(y_train)
print(y_train.shape) # (60000,)
print(X_test)
print(X_test.shape) # (10000, 28, 28)
print(y_test)
print(y_test.shape) # (10000,)
class_names = ['T-shirt', 'Trousers', 'Pullover', 'Dress', 'Coat',
'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']
# Sneakers ? / Ankel boots ?
for i in range(25):
plt.subplot(5,5,i+1)
plt.grid(visible=False)
plt.xticks(ticks=list())
plt.yticks(ticks=[])
plt.imshow(X_train[i],cmap=plt.cm.binary)
plt.show()
# 60000 개중 25개만 추출해서 확인
(X_train,X_test) = \
(np.divide(X_train,255.0), np.divide(X_test,255.0)) # \ <= 줄바꿈 문자
print(X_train)
#모델 설정하기
from tensorflow.keras import Sequential, Input
model = tf.keras.models.Sequential([],name='MODEL')
model.add(tf.keras.layers.Flatten(input_shape=(28, 28),name='FLATTEN'))
model.add(tf.keras.layers.Dense(units=128, activation='relu',name='LAYER1'))
model.add(tf.keras.layers.Dense(units=64, activation='relu',name='LAYER2'))
model.add(tf.keras.layers.Dense(units=10, activation='softmax',name='OUTPUT'))
model.summary()
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',
metrics=['accuracy']) # 0~9 까지 나오니깐 sparse_categorical 사용
#model.fit(X_train,y_train,epochs=100)
#model.save('2024-07-24.keras')
#model.evaluate(X_test,y_test,verbose=2)
model2 = tf.keras.models.load_model('2024-07-24.keras')
y_predict = model2.predict(X_test)
print(f'y_predict[0] : {np.round(y_predict[0])}')
print(f'y_test[0] : {y_test[0]}')
print(f'y_predict[1] : {np.round(y_predict[1])}')
print(f'y_test[1] : {y_test[1]}')
print(f'y_predict[10] : {np.round(y_predict[10])}')
print(f'y_test[10] : {y_test[10]}')

fashion_mnist 안에는 총 7만개의 데이터가 존재하며 6만개를 train 데이터 (훈련) 1만개를 test 데이터 (예측) 로 분류한다
OUTPUT을 포함하여 LAYER1, LAYER2 로 3번 학습
마지막에는 출력이 10개 이므로 활성화 함수를 softmax 로 설정한다

출력창을 확인해보면 y_predict[0]는 원 핫 인코딩으로 되어 있어서 10번째 중 마지막 1이 채워져 있어서
이미지를 통해 교차확인을 해보면 y_test[0] : 9 와 일치하는것을 알 수 있다
아래의 y_predict[1] 과 y_predict[10] 또한 학습이 잘 되었다
패션 아이템 학습 및 예측 - LAYER 늘리기, range로 데이터 뽑기
초반부는 위 코드와 동일하다
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
fashion_mnist = tf.keras.datasets.fashion_mnist
print(fashion_mnist)
(X_train,y_train), (X_test,y_test) = fashion_mnist.load_data()
print(X_train)
print(X_train.shape) #(60000, 28, 28)
print(y_train)
print(y_train.shape) # (60000,)
print(X_test)
print(X_test.shape) # (10000, 28, 28)
print(y_test)
print(y_test.shape) # (10000,)
class_names = ['T-shirt', 'Trousers', 'Pullover', 'Dress', 'Coat',
'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']
# Sneakers ? / Ankel boots ?
for i in range(25):
plt.subplot(5,5,i+1)
plt.grid(visible=False)
plt.xticks(ticks=list())
plt.yticks(ticks=[])
plt.imshow(X_train[i],cmap=plt.cm.binary)
plt.show()
# 60000 개중 25개만 추출해서 확인
(X_train,X_test) = \
(np.divide(X_train,255.0), np.divide(X_test,255.0)) # \ <= 줄바꿈 문자
print(X_train)
# 여기까진 위쪽 코드와 동일하다
아래 코드도 유사하나 이번에는 LAYER3 까지 포함하여 4번의 Dense를 거친다
이후 그렇게 학습된 model 을 저장하여 10개까지의 데이터가 학습되었는지 확인해본다
from tensorflow.keras import Sequential, Input
model = tf.keras.Sequential([
tf.keras.layers.Flatten(input_shape=(28,28),name='INPUT'),
tf.keras.layers.Dense(units=128, activation='relu',name='LAYER1'),
tf.keras.layers.Dense(units=64, activation='relu',name='LAYER2'),
tf.keras.layers.Dense(units=16, activation='relu',name='LAYER3'),
tf.keras.layers.Dense(units=10, activation='softmax',name='OUTPUT')
],name='MODEL')
print(model.summary())
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy')
# model.fit(x=X_train,y=y_train, epochs=100)
# model.save('2024-07-24-1.keras')
model2 = tf.keras.models.load_model('2024-07-24-1.keras')
y_predict = model2.predict(X_test)
import time
for i in range(10):
print(f'y_predict[{i}] : {np.round(y_predict[i])}')
print(f'y_test[{i}] : {y_test[i]}')
time.sleep(2)


패션 아이템 학습 및 예측 - CNN
컨볼루션(Convolution Neural Network: CNN) : 신경망에서는 하 위 레이어의 노드들과 상위 레이어의 노드들이 부분적으로만 연결되어 있다

지금까지 했던 작업을 CNN 작업으로 해보도록 하겠다
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
fashion_mnist = tf.keras.datasets.fashion_mnist
print(fashion_mnist)
(X_train,y_train), (X_test,y_test) = fashion_mnist.load_data()
print(X_train.shape) #(60000, 28, 28)
print(y_train.shape) # (60000,)
print(X_test.shape) # (10000, 28, 28)
print(y_test.shape) # (10000,)
# 이미지 뽑아오기
X_train_CNN = X_train.reshape((-1,28,28,1)) / 255.0
X_test_CNN = X_test.reshape((-1,28,28,1)) / 255.0
model_CNN = tf.keras.Sequential([
tf.keras.layers.Conv2D(filters=32, kernel_size=(3,3),padding='same', # 커널 사이즈는 보통 3,3 을 사용
activation='relu',input_shape=(28,28,1)), # padding = 'same' : 크기를 줄이지 않음
tf.keras.layers.MaxPooling2D(pool_size = (2,2),strides=2), # 풀 사이즈는 보통 2,2 를 사용 pdf 269
tf.keras.layers.Conv2D(filters=64, kernel_size=(3,3), padding = 'same',
activation='relu'),
tf.keras.layers.MaxPooling2D(pool_size = (2,2),strides=2),
tf.keras.layers.Conv2D(filters = 32, kernel_size=(3,3),padding='same',activation='relu'),
tf.keras.layers.MaxPooling2D(pool_size = (2,2),strides=2), # Convolution Network // Conv2D, MaxPooling2D 는 보통 쌍으로 움직인다
tf.keras.layers.Flatten(), # fully connected
tf.keras.layers.Dense(units=128, activation='relu',name='LAYER1'),
tf.keras.layers.Dense(units=64, activation='relu',name='LAYER2'),
tf.keras.layers.Dense(units=16, activation='relu',name='LAYER3'),
tf.keras.layers.Dense(units=10, activation='softmax',name='OUTPUT')
],name='CNN')
model_CNN.summary()
model_CNN.compile(optimizer='adam' ,loss='sparse_categorical_crossentropy',metrics=['accuracy'])
# model_CNN.fit(X_train_CNN,y_train,epochs=200)
# model_CNN.save('2024-07-24-CNN.keras')
model2 = tf.keras.models.load_model('2024-07-24-CNN.keras')
y_predict = model2.predict(X_test_CNN)
import time
for i in range(20):
print(f'y_predict[{i}] : {np.round(y_predict[i])}')
print(f'y_test[{i}] : {y_test[i]}')
print('-'*30)
time.sleep(2)


'ABC 부트캠프' 카테고리의 다른 글
| [25일차] ABC 부트캠프 정규화 / YOLO / 얼굴 학습 (0) | 2024.07.28 |
|---|---|
| [24일차] ABC 부트캠프 이미지 필터링 및 학습 (0) | 2024.07.28 |
| [22일차] ABC 부트캠프 케라스 심화 (1) | 2024.07.26 |
| [21일차] ABC 부트캠프 퍼셉트론 & MLP (3) | 2024.07.24 |
| [20일차] ABC 부트캠프 ESG포럼&세미나 2번째 시간 (1) | 2024.07.21 |