In [1]:
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
%matplotlib inline
In [2]:
#tensorflow에서 제공하는 데이터셋(MNIST) 불러오기
#숫자 그림 데이터다.
from tensorflow.keras import datasets
In [3]:
mnist=datasets.mnist
In [4]:
(train_x,train_y),(test_x,test_y) = mnist.load_data()
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz 11493376/11490434 [==============================] - 1s 0us/step
In [5]:
train_x.shape #(60000,28,28) 28x28사이즈 이미지 6만개
Out[5]:
(60000, 28, 28)
In [6]:
#불러온 숫자 데이터중 1개만 시각화 해보기
image=train_x[0]
plt.imshow(image,'gray')
plt.show()
In [7]:
train_x.shape
Out[7]:
(60000, 28, 28)
In [9]:
#호출한 데이터는 gray데이터라 RGB로 해주려면 차원수를 늘려줘야한다(numpy.expand_dims(차원수늘릴거,위치))
#위치 : 0이면 맨 앞, -1 이면 맨뒤에 추가된다
#주의할점 증가되는 차원수는 1씩 늘어나므로 여러번 하려면 for문이나 while로 증가시켜줘야한다.
expanded_data=np.expand_dims(train_x,-1)
expanded_data.shape
Out[9]:
(60000, 28, 28, 1)
In [10]:
# tf.expand_dims(값,위치)
new_train_x=tf.expand_dims(train_x,-1) #tf로도 차원수 증가가 가능하다.
new_train_x.shape
Out[10]:
TensorShape([60000, 28, 28, 1])
In [11]:
# 차원 증가간략화 값[...,tf.newaxis]
train_x[...,tf.newaxis].shape #tf에서 제공하는 차원수 증가방법 간략화
Out[11]:
(60000, 28, 28, 1)
In [12]:
new_train_x= train_x[...,tf.newaxis]
new_train_x.shape
Out[12]:
(60000, 28, 28, 1)
In [15]:
# 주의할점
# matplotlib에서 imshow할때에는 차원수가 2차원이여야하므로 위에서
# 1차원 증가시킨 new_train_x는 시각화를 위해서 오히려 차원수를 낮춰야한다.
disp = new_train_x[0,:,:,0]
disp.shape
Out[15]:
(28, 28)
In [16]:
# 차원수 낮추기 np.squeeze(값)
np.squeeze(new_train_x[0]).shape
Out[16]:
(28, 28)
In [19]:
plt.imshow(disp,'gray')
plt.colorbar()
Out[19]:
<matplotlib.colorbar.Colorbar at 0x24fbf4960d0>
In [25]:
plt.imshow(train_x[0],'gray')
plt.title(train_y[0])
plt.show()
OneHot Encoding¶
컴퓨터가 이해할수 있는 형태로 변환해서 Label을 제공
In [27]:
# 5
[0,0,0,0,0,1,0,0,0,0] #총 10개중 5번째가 1이라 5
#9
[0,0,0,0,0,0,0,0,0,1]
#직접 OneHot Encoding 함수를 만들어도 되지만 keras에서 제공한다
from tensorflow.keras.utils import to_categorical
In [30]:
to_categorical(1,10) #to_categorical(숫자,클래스 총 갯수)
Out[30]:
array([0., 1., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=float32)
In [31]:
label = train_y[0]
label
Out[31]:
5
In [32]:
label_onehot=to_categorical(label,num_classes=10)
label_onehot
Out[32]:
array([0., 0., 0., 0., 0., 1., 0., 0., 0., 0.], dtype=float32)
In [34]:
plt.title(label_onehot)
plt.imshow(train_x[0],'gray')
plt.show()
OneHot Encoding의 정의 및 한계점¶
정리하자면 숫자나 문자열들을 컴터가 알아 들을수 있게 단어,숫자별로 인덱싱하는거라 보면된다
text="나랑 점심 먹으러 갈래 점심 메뉴는 햄버거 갈래 갈래 햄버거 최고야" {'갈래': 1, '점심': 2, '햄버거': 3, '나랑': 4, '먹으러': 5, '메뉴는': 6, '최고야': 7}
한계점¶
단어간의 유사점을 알수 없어서 검색 시스템에 활용하기 힘들다 ex) '서울 숙소' -> 연관검색 : '서울 게스트 하우스','서울 호텔' 등이 나와야 하는데 '숙소'와 '게스트 하우스','호텔'등의 유서성을 알 수 없으면 '서울 집세'이런게 나올 수도 있다는거다
또 해결방법이 2가지나 있는데 첫째는 카운트 기반의 벡터화 방법인 LSA, HAL 등이 있으며, 둘째는 예측 기반으로 벡터화하는 NNLM, RNNLM, Word2Vec, FastText 등이 있습니다. 그리고 카운트 기반과 예측 기반 두 가지 방법을 모두 사용하는 방법으로 GloVe라는 방법이 존재한다.
728x90
반응형
'AI > 머신러닝' 카테고리의 다른 글
[Matplotlib] 번외. matplotpib 한글폰트 깨짐 해결 (0) | 2021.06.18 |
---|---|
[Tensorflow] 3.tensorflow에서 레이어가 어떤식으로 동작하는지 (0) | 2021.06.18 |
[Tensorflow] 1. Tensorflow의 기본 Tensor (0) | 2021.06.17 |
[Tensorflow] Tensorflow란? (0) | 2021.06.17 |
머신러닝의 기초 (0) | 2021.06.03 |