보통의 사람이 수행하는 지능적인 작업을 자동화 하기 위한 연구활동
이미지분류, 음성인식, 언어 번역 같은 복잡하고 불분명한 문제를 해결하기 위한 명확한 규칙을 찾기 위한 연구
경험적 발견에 의해 주도되는 매우 실천적인 분야
머신러닝의 구성
데이터가 의미있도록 변환 하는것
= 데이터의 유용한 representation을 학습하는 것
연속된 층(layers)(=연속된 필터(filter))을 거치면서 점진적으로 의미있는 representation을 찾아가는 것
따라서 계층적 표현학습, 층 기반 표현학습이 될 수 있다.
🔸 InputX: input_tensor(데이터)
🔸 Layers(텐서연산):
🔸 model-fit-prediction
🔸 optimizer(옵티마이저)
🔸 위의 과정이 반복되는 것이 훈련반복(training loop)
🔸 텐서(tensor)
🔸 참고 :
숫자 한개의 값
1차원 배열
2차원 배열
(samples, features)
🔸 3차원 배열: 시계열 데이터, 시퀀스 데이터
🔸 4차원 배열: 이미지 데이터
🔸 5차원 배열: 동영상
from keras.datasets import mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
print(train_images.ndim)
print(train_images.shape)
print(train_images.dtype)
3 (60000, 28, 28) dtype('uint8')
slice1 = train_images[:100]
slice2 = train_images[100:200]
slice3 = train_images[:100,:,:]
slice4 = train_images[:,14:,14:]
print(slice1.shape)
print(slice2.shape)
print(slice3.shape)
print(slice4.shape)
딥러닝 모델은 한번에 전체 데이터 셋을 처리하지 않는다.
데이터를 작은 배치(batch)로 나누는 데, 배치데이터의 첫번째 축을 배치 축(batch axis), 배치 차원(batch dimension)이라고 부른다.
🔸 n번째 배치를 구하는 샘플: batch size = 128
for i in range(round(len(train_images)/128)):
globals()[f'batch_{i}']= train_images[128*i:128*(i+1)]
batch_100.shape
(128, 28, 28)
케라스의 층을 만드는 코드
keras.layers.Dense(512, activation = 'relu')
relu(x) = np.maxium(0,x)
sigmoid(x) = 1/1+(e**-x)
sigmoid(x) = 1/1+np.exp(-x)
x = np.random.random((32,10))
y = np.random.random((10,))
# 축 추가
y = np.expand_dims(y,axis=0)
# 반복
y = np.concatenate([y]*32,axis=0)
print(x.shape, y.shape)
(32, 10) (32, 10)
🔸 축을 추가하는 방법
def naive_matrix_dot(x, y):
assert len(x.shape) == 2
assert len(y.shape) == 2
# x의 두번째 차원이 y의 첫번째 차원과 같아야함
assert x.shape[1] == y.shape[0]
z = np.zeros((x.shape[0], y.shape[1]))
for i in range(x.shape[0]):
for j in range(y.shape[1]):
row_x = x[i, :]
column_y = y[:, j]
z[i, j] = naive_vector_dot(row_x, column_y)
return z
🔸 shape 이해
a= np.random.randint(0,5,6)
print('a.shape',a.shape)
print('a.reshape((6,1)).shape=',a.reshape((6,1)).shape)
print('a[:,np.newaxis].shape=',a[:,np.newaxis].shape)
print('np.expand_dims(a, axis=0).shape=',np.expand_dims(a, axis=0).shape)
print('np.expand_dims(a, axis=1).shape=',np.expand_dims(a, axis=1).shape)
이동, 회전, 크기변경, 기울이기 등과 같은 기본적 기하학적 연산은 탠서 연산으로 표현 가능
🔸 이동
🔸 회전
🔸 크기변경
🔸 아핀변환: 선형변환과 이동의 조합
🔸 relu activation을 사용하는 Dense층
기초적인 연산을 길게 연결하여 복잡한 기하학적 변환을 조금씩 분해하는 방식이 딥러닝의 방식(종이공을 펼치기위한 전략)