티스토리 뷰

반응형

> 데이터를 모델에 집어넣기 전에 데이터 사이즈를 맞춰줘야 한다. 기본적으로 tensorflow에서 제공하는 MNIST 예제를 통해 데이터 size를 변경하는 법을 알아보자.

 

 

1. 데이터 불러오기

데이터 사이즈 변경을 위한 블로그이기 때문에 코드만 간단히 적어보겠다.

 

import tensorflow as tf
from tensorflow.keras import datasets

mnist = datasets.mnist
(train_x, train_y), (test_x, test_y) = mnist.load_data()
print(train_x.shape)
'''
(6000, 28, 28)
'''

 

train_x.shape 로 결과 값을 보면, 6000개의 데이터가 (28, 28)로 가로 픽셀이 지정되어 있는 것을 알 수 있다. 즉, 3차원으로 주어진 데이터를 4차원으로 변경해야 한다. 아래의 예는 (6000, 28, 28)을 가지고 있는 train_x를 기준으로 변경을 해볼 예정이다.

 

 

 

2. 데이터 size 변경하기

> 데이터 size를 변경하는 이유는 간단하다. 우리가 훈련 시킬 모델에 입력할 수 있는 차원으로 넣어줘야 하기 때문이다. 즉 모델마다 input_size가 달라지는게 당연하다. 데이터 size,  즉, 데이터 차원을 늘리는 방법에는 numpy 방식과 tensor flow방식이 있다. 둘 다 알아보자.

 

numpy 방법

 

print(train_x.shape)
'''
(6000, 28, 28)
'''

new_train_x = np.expand_dims(train_x, -1) 
print(new_train_x.shape)
```
(60000, 28, 28, 1)
```

 

np.expand_dims(train_x, -1) 

  • train_x 위치에 변경하려는 배열을 넣어준다.
  • -1은 가장 뒷부분의 차원을 추가하여준다는 것을 알 수 있다.

 

 

tensorflow 방법

new_train_x = tf.expand_dims(train_x, -1)
print(new_train_x.shape)
'''
TensorShape([60000, 28, 28, 1])
'''

 

numpy 방법과 비슷하다는 것을 알 수 있다. expand_dims을 활용하는 것 말고도 아래의 방법으로도 차원 변경이 가능하다.

 

 

print(train_x[..., tf.newaxis].shape)
'''
(60000, 28, 28, 1)
'''

 

train_x [..., tf.newaxis]

이 방법은 [] 안에 기존의 배열을...으로 적고, 추가하고 싶은 위치에 tf.newaxis를 적어주면 간단히 size 변경이 된다.

 

 

 

물론 reshape를 이용하는 방법도 가능하다 예시는 아래와 같다.

 

reshaped = train_x.reshape([60000, 28, 28, 1])
print(reshaped.shape)
'''
(6000, 28, 28, 1)
'''

 

 

 

차원 축소

> 차원을 축소하는 방법은 np.squeeze()를 활용하면 간단히 가능하다.

 

data = np.squeeze(new_train_x[0])
print(data.shape)
'''
(28, 28)
'''

 

np.squeeze 내부에는 축소하고 싶은 인덱스를 넣어주면 된다. squeeze는 1차원인 축을 모두 제거해 준다.

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함