IT's 우

생활코딩 머신러닝야학_Tensorflow 102 - 이미지 분류(CNN)/ 다섯번째 딥러닝 1- Flatten 본문

생활코딩/머신러닝(텐서플로우(python))

생활코딩 머신러닝야학_Tensorflow 102 - 이미지 분류(CNN)/ 다섯번째 딥러닝 1- Flatten

디우 2021. 1. 16. 02:01
728x90

이미지셋 데이터를 표 형태의 데이터로 변형해서 학습하기

딥러닝 모델의 "특징 자동 추출기"라는 별명의 의미 이해하기

 

 

 

이미지 셋 -> 데이터 표 , 두 가지 방법(reshape, flatten)

print(독립.shape)

#(60000, 28, 28)

 

① reshape

 

#이미지셋 데이터를 표 형태의 데이터로 변형하기 위해

#reshape를 사용한다.

독립.reshape(60000, 784)

print(독립.shape)

#(60000,784)

 

# 모델을 만들고

X = tf.keras.layers.Input(shape=[784])

H= tf.keras.layers.Dense(84, activation='swish')(X)

Y = tf.keras.layers.Dense(10, activation='softmax')(H)

model= tf.keras.models.Model(X, Y)

model.compile(loss='categorical_crossentropy', metrics='accuracy')

 

② Flatten

 

print(독립.shape)

#(60000, 28, 28)

 

#모델을 만들고

X = tf.keras.layers.Input(shape=[28, 28])

# Flatten 데이터를 한 줄로 펴준다.

H = tf.keras.layers.Flatten()(X)

H= tf.keras.layers.Dense(84, activation='swish')(H)

Y = tf.keras.layers.Dense(10, activation='softmax')(H)

model= tf.keras.models.Model(X, Y)

model.compile(loss='categorical_crossentropy', metrics='accuracy')

 

?????인공신경망 = "특징 자동 추출기"?????

 히든 레이어 없이 모델을 만들었다면 출력층의 첫 번째 결과는 입력층 노드의 모든 입력에 가중치를 붙여서 판단하게 된다. 모든 픽셀 값에 대해 가중치를 학습하게 된다는 것이다.

 학습이 끝났을 때 출력 값을 판단하기에 가중치가 높다는 것은 해당 픽셀 값이 매우 중요하다는 의미,

반대로 가중치가 낮다는 것은 해당 픽셀값이 쓸모없다는 의미

 히든 레이어를 사용한다면 첫 번째 결과를 판단하기 위한 수식에서 히든 레이어의 모든 노드가 입력으로 사용되는 것이고, 모든 입력에 가중치를 붙여서 판단하게 된다. 히든레이어의 결과는 인공신경망 구조 안에서 가중치 학습을 통해 컴퓨터 스스로 만들어 낸 값이다. 이러한 은닉층을 추가한 행동은 최종 결과를 판단하기 위해 컴퓨터에게 가장 중요한 특징을 찾도록 하는 것이다.

 

 

 

◎소스코드

 

1. 데이터를 reshape를 사용하여 이미지 셋 데이터를 표형태의 데이터로 바꾸어 모델 만들기

 

 

 

 

 

 

예상 값과 비교해보기!

 

 

 

 

 

 

 

 

2. 데이터를 flatten 사용하여 이미지셋 데이터를 표형태의 데이터로 바꾸어 모델 만들기

 

 

 

◎ 전체 소스코드

 

###########################
# 라이브러리 사용
import tensorflow as tf
import pandas as pd

###########################
# with reshape

# 데이터를 준비하고, 이미지 셋을 표로 만들어주기
(독립, 종속), _ = tf.keras.datasets.mnist.load_data()
독립 = 독립.reshape(60000, 784)
종속 = pd.get_dummies(종속)
print(독립.shape, 종속.shape)

# 모델을 만들고
X = tf.keras.layers.Input(shape=[784])
H = tf.keras.layers.Dense(84, activation='swish')(X)
Y = tf.keras.layers.Dense(10, activation='softmax')(H)
model = tf.keras.models.Model(X, Y)
model.compile(loss='categorical_crossentropy', metrics='accuracy')

# 모델을 학습하고
model.fit(독립, 종속, epochs=10)

# 모델을 이용합니다.
pred = model.predict(독립[0:5])
print(pd.DataFrame(pred).round(2))
print(종속[0:5])

###########################
# with flatten

# 데이터를 준비하고
(독립, 종속), _ = tf.keras.datasets.mnist.load_data()
# 독립 = 독립.reshape(60000, 784)
종속 = pd.get_dummies(종속)
print(독립.shape, 종속.shape)

# 모델을 만들고
X = tf.keras.layers.Input(shape=[28, 28])
H = tf.keras.layers.Flatten()(X)
H = tf.keras.layers.Dense(84, activation='swish')(H)
Y = tf.keras.layers.Dense(10, activation='softmax')(H)
model = tf.keras.models.Model(X, Y)
model.compile(loss='categorical_crossentropy', metrics='accuracy')

# 모델을 학습하고
model.fit(독립, 종속, epochs=10)

# 모델을 이용합니다.
pred = model.predict(독립[0:5])
print(pd.DataFrame(pred).round(2))
print(종속[0:5])

 

 

 

출처: www.opentutorials.org/module/5268/29787

이름 없는 노트북.pdf
0.21MB

 

728x90
반응형