본문 바로가기

Deep Learning

Deep Learning : Flatten 라이브러리 사용하는 이유

model.add(tf.keras.layers.Flatten())
#Flatten은 데이터를 평평하게 일렬로 정렬한 형태의 데이터를 위한 가공이다.

tf.keras.layers.Flatten은 입력의 형태를 1차원으로 변환한다.

입력의 형태가 (None, 28, 28)일 때, (None, 784)로 변환된다.

 

<  실습  >

이미지의 가로 세로를 전부 일렬로 만드는 작업이 flatten 이다.

모델을 만들어 보자.

 
model = tf.keras.models.Sequential()

model.add(tf.keras.layers.Flatten()) #Flatten은 데이터를 평평하게 일렬로 정렬한 형태의 데이터를 위한 가공이다.

model.add(tf.keras.layers.Dense(128,'relu'))

28 * 28

training_images[0].shape

model.add(tf.keras.layers.Dense(10, 'softmax'))
 

 

꼭 암기하기 !

# 2개 분류의 문제일때는, 로스 펑션을 binary_crossentropy

# 3개 이상의 분류의 문제일때는? 2가지 경우가있다.

# 첫번째경우, y값이 레이블 인코딩으로 되어있는 경우 : 이땐 sparse_categorical_crossentropy 사용

# 두번째 경우, y값이 원핫 인코딩으로 되어있는경우: categorical_crossentropy 사용

 

training_labels

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

model.fit(training_images, training_labels, epochs= 5)
 

accuracy 가 약 90% 라는 뜻. 5 epochs 라 금방 끝났다.

학습에 사용하지 않는, 테스트 데이터를 통해서, 얼마나 정확도되 나오는지 확인해 본다.

model.evaluate(test_images, test_labels)

out :

313/313 [==============================] - 1s 2ms/step - loss: 0.3564 - accuracy: 0.8723
[0.3563694357872009, 0.8723000288009644]