Numpy

  • 다차원 배열을 효과적으로 처리할 수 있도록 도와주는 도구
  • 현실 세계의 다양한 데이터는 배열 형태로 표현할 수 있다.
  • Python의 기본 List에 비해 빠르고 강력한 기능을 제공

 

Numpy의 기본 사용법

- Numpy의 차원

  • 1차원 축(행) : axis 0 => Vector
  • 2차원 축(열) : axis 1 => Matrix
  • 3차원 축(채널) : axis 2 => Tensor(3차원 이상)
import numpy as np

#0-3까지의 배열 만들기
array1=np.arange(4)
print(array1)

array2=np.zeros((4, 4), dtype=float) #4*4배열이 0으로 초기화, 각각 실수형 / 1로 초기화 하려면 ones
print(array2)
import numpy as np

#0-9까지 랜덤 초기화된 배열 만들기
array4=np.random.randint(0,10,(3,3)) #3*3의 배열이 0-9사이 값으로 랜덤 초기화
print(array4)

#평균이 0이고, 표준편차각 1인 표준 정규를 띄는 배열
array5=np.random.normal(0,1,(3,3))
print(array5)

 

- Numpy 배열 합치기

import numpy as np

array1=np.array([1,2,3])
array2=np.array([4,5,6])
array3=np.concatenate([array1, array2])

print(array3.shape) #(6,)
print(array3) #[1 2 3 4 5 6]

 

- Numpy 배열 형태 바꾸기

import numpy as np

array1=np.array([1,2,3,4])
array2=array1.reshape((2,2))

print(array2.shape) 

# [[1 2]
#  [3 4]]

 

- Numpy 배열 세로 축으로 합치기

import numpy as np

array1=np.arange(4).reshape(1,4) #1행 4열의 형태로 0-3까지
array2=np.arange(8).reshape(2,4) #2행 4열의 형태로 0-7까지

print(array1) #[[0 1 2 3]]
print(array2) 
#[[0 1 2 3]
# [4 5 6 7]]

array3=np.concatenate([array1, array2], axis=0)
print(array3)
#[[0 1 2 3]
# [0 1 2 3]
# [4 5 6 7]]

 

- Numpy 배열 나누기

import numpy as np

array2=np.arange(8).reshape(2,4) #2행 4열의 형태로 0-7까지
left, right = no,split(array, [2], axis=1) #index 2를 기준으로, 열을 의미 => 2열을 기준으로
print(left.shape) #(2,2)
print(right.shape)#(2,2)
print(left)
#[[0 1]
# [4 5]]

 

https://youtu.be/LdoJAC26MIc

위 영상을 참고하여 작성

tensorflow

: 구글에서 딥러닝 연구 및 제품 개발용으로 만든 라이브러리

- 설치 : pip install tensorflow

 

MNIST (Modified National Institute of Standards and Technology)

: 손으로 쓴 숫자들로 이루어진 대형 DB

- NIST의 오지널 데이터셋의 샘플을 재혼합하여 만들어짐

- 28X28픽셀의 흑백 이미지

- 60000개의 학습용 이미지 + 10000개의 평가용 이미지

 

MNIST 손글씨 이미지 학습하기

- 28X28 픽셀 값이 입력으로 들어오기 때문에 입력층으로 784개의 데이터가 들어온다.

- 출력층에서는 0-9까지의 숫자 중 어떤 숫자인지 맞춰야하기 때문에 0-9까지의 숫자일 확률이 각각 출력된다.

- 손실함수 'sparse_categorical_crossentropy' : 입력값이 다양한 종류 중 어떤 종류인지 분류하는 문제에서 주로 사용

- 최적화 함수 'adam', 'rmsprop' (여기서는 'adam' 사용)

- 학습용 데이터를 몇번 반복할 것인지 정해야 한다. (여기서는 5번 반복하여 학습)

 

평가 과정

- 예측한 값과 정답이 얼마나 높은 비율로 일치하는지 평가하는 정확도로 평가

 

[ 실습 ]

#딥러닝 관련 라이브러리 불러오기
import tensorflow as tf
from tensorflow import keras
import numpy as np
import matplotlib.pyplot as plt

#MNIST 데이터셋 불러오기
mnist=keras.datasets.mnist

#MNIST 데이터셋 학습용(x,y), 테스트용(x,y)으로 나누기
(x_train, y_train), (x_test, y_test) = mnist.load_data()

#학습용 데이터 형태 살펴보기
x_train.shape

#학습용 첫번째 데이터 살펴보기 1
x_train[0]

#학습용 첫 번째 데이터 살펴보기 2
for x in x_train[0]:
  for i in x:
    print('{:3} '.format(i), end='')
  print()

#위 숫자가 어떤 숫자인지 확인해보기
y_train[0]

#데이터 전처리(0-1사이 숫자로)
x_train=x_train/255
x_test=x_test/255

#데이터 전처리 결과 확인
x_train[0]

#모델만들기 : 입력층(784)-은닉층1(256)-은닉층2(128)-은닉층3(64)-출력층(10)
model=keras.models.Sequential({
    keras.layers.Flatten(input_shape=(28,28)),
    keras.layers.Dense(256, activation='relu'),
    keras.layers.Dense(128, activation='relu'),
    keras.layers.Dense(64, activation='relu'),
    keras.layers.Dense(10, activation='softmax') #확률을 출력
})

#모델 컴파일 : 최적화 함수, 손실 함수 설정 + 평가 지표 설정 + 가중치 초기화
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

#모델 확인
model.summary()

#모델 학습 : 전체 데이터는 5번 반복
model.fit(x_train, y_train, epochs=5)

#모델 평가
model.evaluate(x_test, y_test)

#예측 - 0번째 숫자 이미지로 보기
plt.imshow(x_train[0], cmap='gray')
plt.show()

#예측 - 0번째 숫자 예측하기
print(model.predict(x_train[0].reshape(1,28,28)))

#예측- 0번째 숫자 예측하기 by numpy
print(np.argmax(model.predict(x_train[0].reshape(1,28,28))))

 

https://youtu.be/IHtMMGL7AAA

위 영상을 참고하여 작성

 

Input (입력)

- 실수로 입력해야 한다.

- 이미지, 소리, txt 모두 실수로 입력된다.

 

Hidden (인공뉴런 ,퍼셉트론)

- 입력 값이 가중치들과 연산이 된다.

 

Output (예측값, 결과)

- 중간층에서 연산된 값이 출력층의 가중치와 연산된 후 출력된다.

 

딥러닝

: 은닉층을 깊이 쌓은 인공 신경망으로 학습하는 머신러닝 기법

 

딥러닝의 학습 과정

 

딥러닝의 평가 과정

 

딥러닝의 실전 활용 과정

https://youtu.be/LDCKJuRYTcU

위 영상을 참고하여 작성

 

지도학습

사이클을 돌며 점차 error를 줄여나간다.

 

인공신경망

- 목표 : 입력값으로 출력값을 표현할 수 있는 w, b값 자동으로 알아내기

- 우리가 정해주어야 할 것 : 예측한 값이 정답에 얼마나 가까운지 확인하는 기준

- ANN 해야 할 것 : 정답과의 오차를 최소화 하도록 w, b값을 학습을 통해 업데이트

 

ANN으로 문제를 해결하기 전에 해야 할 일

1) 문제 정의

- ANN으로 풀기 적합한 문제인가?

 

2) 기준이 되는 목적 함수(손실 함수, 비용 함수)의 정의

- 이 문제의 오차를 최소화하기에 적합한 목적 함수는 무엇인가?

 

3) 데이터 수집

- 문제 해결에 필요한 양질의 데이터 수집

 

딥러닝의 전체적인 학습 과정

 

+ Recent posts