본 내용은 fastcampus 딥러닝/인공지능 올인원 패키지 online을 정리한 것이다.
CNN
anaconda
numpy
딥러닝 전체 구조도
1. 데이터 load
2. 데이터 normalization , augmentation
3. load model (weight, bias 등 학습하면서 feature를 찾는 것이다. ) CNN, ResNet, AlexNet 등 ..
loss, optimizer등 설정
lr, batch 등
4. 결과를 result 한다.
평가방법 등
object와 정답을 같이 주고 예측한것과 비교해서 얼마 만큼 틀맀는지 확인 하고 에러률을 최소화 하는 것을 적용한다.
해답과 label을 비교해서 얼마나 틀렸는지 왜 틀렸는지 본다.
그런것들로 고쳐가면서 학습한다.
프로젝트에서 데이터가 재일 중요하다.
Prediction : 몇 % 확률로 무엇이다. 확률을 가지고 있다.
loss: 얼마나 틀렸는지 계산한다.
optimization: 은 얼마나 틀렸는지 를 최소화한다.
딥러닝 용어
Model : CNN 모델을 학습하고자 하는 것이다.
Layer : 층
input layer
hidden layer
output layer
layer 쌓아서 Model이 된다.
layer 너무 깊이 쌓으면 overfitting 이 되기도 쉽고 성능적으로 굉장히 무겁고 오래 걸릴수도 있다.
요즘에는 효율적으로 쌓는 것을 추천한다.
깊이 쌓아야 feature를 detail하게 할 수 도 있다.
convolutional -> 특징을 뽑는
layer : input layer hidden layer output layer
input image -> convolutional kernel(filter) 하나하나씩 곱해준다. -> feature map
feature map :
weight는 학습할려고 하는 대상 , 데이터마다 다른 weight를 학습 시켜야 한다. data혹은 목적에 따라 weight를 학습 시켜야 한다.
filter -> 계산을 통해서 더 좋은 성능을 만드는것 filter가 고정된 값이 아니고 바꿔가면서 featrue들을 더 잘 뽑게 할려고 하는것이다.
kernel ->
variable
bias
pooling layer -> feature를 뽑은 후 쭐여줄려고 한다. 압축을 한다. 압축
optimization: 얼마나 틀렸는지 나오면 모델에 업데이트 하면서 학습을 시키고 나서 최소화로 찾아가는 것이다.
Adam, SGC, 등
activation function : 앞에서 convolution 을 받고 특징을 뽑았으면 음수값이나 불필요한 것 제거한다. ReLU 많이 사용한다.
softmax: 다중 classification 에서 사용한다. -> one hot encoding 값이 확률로 나타나는 것이다.
결과가 나오면 정답을 유도해서
얼마나 틀렸는지 계산하는 것이 loss/cost이다. cost function에서 나온 수치가 loss/cost이다.
hypper parameter: 컴퓨터가 스스로 학습을 할 수 없어서 인간이 조절하는 부분이다.
learning rate: hypper parameter중 하나이다.
cost를 낮출려고 한다.
learning rate 너무 작으면 너무 천천히 가서 잴 낮은 곳이 아닌데 착각할 수 있다.
너무 크면 잴 낮은 것을 찾는 것도 지나칠 수도 있다.
batch size 6만장을 다 넣을 수 가 없어서 몇장을 나누어서 조금씩 넣어준다. 몇장을 넣어 줄것인지를 정하는 것이 배치사이즈이다.
batch size는 데이터를 나누어서 모델에서 학습한다. 몇장을 넣어주는 것을 정한것이 batch size이다.
epoch 수 만큼 전체 이미지를 반복해서 학습한다.
dataset => train/validation/test
train set/test set
train set/validataion set / test set
마지막에 평가 할 떄는 test set으로 확인 한다.
label / Ground Truth => 정답
label 정답을 준다.
Ground Truth :
cnn
featrue extraction -> 특징을 뽑는 것이다. 특징을 추출하는 것이다.
특정을 추출하고 fully connected layer에서 결정을 내린다.
예: 앵무새의 특징 패턴 모양을 가져오고
딥러닝에서는 어떤 특징을 뽑는지 어렵다. 블랙박스
점 점 더 갈수록 detail 하게 뽑는다.
featrue extraction
convolution , pooling , activation
classification
특징들을 딥러닝이 가져온다.
convolutional layer : 특징을 강조시킨다. 특징은 어떤 패턴을 말한다.
pooling layer: -> 특징을 뽑은 후 수치가 높은 것을 반으로 줄인다. 이미지 압축
max pooling은 가장 큰 특징을 압축 한다.
activation layer: 앞 에서 뽑은 특징에서 불필요한것 없앤다.
이 3개 layer를 통해 중요한 부분만 남는다.
선 하나하나가 y = wx+b
fully connected로 계산해서 예측 하거나 분류한다.
LeNet
AlexNet
vgg16
ResNet
DenseNet
어떤것 열결해주고 어떻게 쌓였는지가 중요하다.
shift mouse 우측키를 눌리면 power shell 창이 나온다.
tensorflow 설치
pytorch 설치
cpu 일 경우에는 None로 하면 된다.
python 2.7일 경우에는 pip3
python 3.x일 경우에는 pip
Jupyter notebook key
shift+enter : 실행하고 다음칸으로 넘어간다.
ctrl+enter: 실행하고 그 자리에 멈추는 것
Esc : 모드를 바꾼다.
shift+m: 작업하는 것을 한번에 묶고 싶을 때 선택하고 눌리기
shift+ctrl+-: 다시 나누어진다.
esc command 모드에서 d를 두번 누른다. : 셀 삭제하기
esc -> a : 위에 cell생성
esc -> b : 아래에 cell생성
esc -> m: markdown 문법으로 전환
Tensor
scalar
vector
matrix
tensor
0차원 숫자가 하나 있는것 int
np.array(1)
scalar하나
shape는 모양을 나타나는것
ndim 차원의 개수
1차원
np.array([1])
0차원이 모이면 1차원이 된다. 같은 차원 사이즈는 다를 수 있지만 1차원이다.
2차원 대괄호 2개
np.array([[1,2]]).shape
import numpy as np
np.array([[1,2],[1,2]]).shape
다차원
[[[
3차원
(차원, 2,1)
이미지가 size에 따라서 한다.
이미지가 2차원 혹은 3차원 으로 될수도 있고 4차원 으로 될수 도 있다.
이미지 데이터 shape를 먼저 확인 하는게 좋다.
numpy
zeros =>0으로 생긴다.
np.zeros()
ones =>1으로 생긴다.
np.ones()
np.ones() * 5 => 5로 변한다.
array는 1차원으로 생긴다. 그래서 reshape해서 바꾼다.
index => numpy에서도 가능하다.
묶여 있는게 큰것 부터 가져온다.
slicing 이 가능하다
같은 효과가 나오면 좋겠다.
print(arr[1][2])
print(arr[1,2])
boolean indexing
data[data<=0] = 1
True일 경우 1로 바꿔준다.
broadcast
#기준을 0차원으로 준다. 0차원에서 가장 큰 값을 반환한다.
print(np.max(arr+arr_2,0))
1차원에서 재일 큰 값
print(np.max(arr+arr_2,-1))
차원을 axis = -1 로 해도 된다.
print(np.argmax(arr)) # 몇번째의 값이 잴 큰 index 를 반환한다.
print(np.argmin(arr)) # 몇번째의 값이 잴 작은 index를 반환한다.
print(np.unique(arr)) #unique한 값 반환
숫자를 넣으면 바로 int32로 잡아준다.
astype()을 사용해서 datatype을 변환가능
dtype datatype을 확인하기
astype('float32')
astype('int8')
astype(np.int32)
arr = np.array([[1,2,3],[1,2,3]], dtype =np.uint8)
ndim을 통해서 차원수를 return 가능
len(arr.shape)
arr.shape
arr.size
reshape() -> 차원도 바꿔줄 수 있는데 size는 그대로 유지하되 모양을 바꿀수 있다.
reshape(-1) 사이즈에서 남는것 -> 차원 하나만 남긴다. 숫자도 많고 차원이 많을 때 , 마지막 차원에서 남는다.
import numpy as np
arr = np.array([[1,2,3],[1,2,3]])
arr.reshape(-1).shape
import numpy as np
arr = np.array([[[1,2,3],[1,2,3],[1,2,2],[1,2,3]]])
print(arr.shape)
print(arr.reshape(-1).shape)
import numpy as np
arr = np.array([[1,2,3],[1,2,3]])
print(arr.reshape(-1).shape)
arr = np.array([[1,2,3],[1,2,3]])
print(arr.reshape(1,-1).shape)
arr = np.array([[1,2,3],[1,2,3]])
print(arr.reshape(-1,1).shape)
차원수 널리기
reshape사용
ravel() -> 1차원으로 바꾸기 -> reshape(-1) 과 같은 작용
arr = np.array([[1,2,3],[1,2,3]])
print(arr.ravel())
arr.ravel() == arr.reshape(-1)
np.expand_dims()
차원을 일부러 하나 널리는 경우가 있다.
(54,) -> (54,1)
arr = np.array([1,2,3])
print(arr.shape)
arr = np.expand_dims(arr,0)
print(arr.shape)
arr = np.array([1,2,3])
arr = np.expand_dims(arr,1)
print(arr.shape)
그래프 시각화
학습하는 과정 등을 볼 수 있다.
import matplotblib.pyplot as plt
seaborn
%matplotblib inline #이것을 해주는 것이 좋다 . 아니면 새로 생길 수 있다.
matplotlib subplot
subplot(행의 개수, 열의 개수, 그중에서 첫번째 ) -> 여기서는 그중에서 첫번쨰는 1부터 시작한다.
plt.subplot(행, 열 , 몇번 째)
matplotlib color:
b 파란색
g 초록색
r 빨간색
c 청록색
y 노란색
k 검은색
w 횐색
matplotlib mark:
o 원
v 역삼각형
^ 삼각형
s 네모
+ 플러스
. 점
data = np.random.randn(100)
import matplotlib.pyplot as plt
plt.plot(data , 'k^')
plt.show()
matplotlib size
figsize size 조절
plt.figure(figsize=(10,10))
plt.figure(figsize=(10,10))
plt.plot(data , 'k^')
plt.show()
plt.legend() 는 label 을 보여준다.
title 제목
plt.title('Random graph')
plt.xlabel('x')
plt.ylabel('y')
그래프 저장하기
jupyter 에서 마우스로 드리그 해서 할 수 있다.
plt.savefig('이름.png')
저장된 위치는 현재 작업하고 있는 위체에 저장된다.
이미지 시각화
from PIL import Image
image_pil = Image.open(path)
image = np.array(image_pil)#image가 array로 된다.
(세로길이, 가로길이, 차원)
image.shape => 이미지는 2차원이지만 rgb 때문에 3차원으로
np.min(image) np.max(image)=> 최대가 255까지인지 확인한다. 다른 데이터 타입을 가질 경우도 있다
이미지 보여주기
plt.imshow(image) => 이미지 보여주기
plt.show()
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
image_pil = Image.open("이미지 경로")
image_wb = np.array(image_pil)
image_wb.shape
plt.imshow(image_wb)
plt.show()
image 흑백으로 열기
image_pil = Image.open(path).convert("L")
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
image_pil = Image.open("이미지 경로").convert("L")
image_wb = np.array(image_pil)
print(image_wb.shape)
plt.imshow(image_wb,'gray')
plt.show()
gray로 해야 흑백색으로 나온다.
RdBu => redblue
jet => 재일 흔히 많이 사용한다.
Colorbar 추가하기
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
image_pil = Image.open("이미지 경로").convert("L")
image_wb = np.array(image_pil)
print(image_wb.shape)
plt.imshow(image_wb,'jet')
plt.colorbar()
plt.show()
이미지 크기 조절 가능하다.
plt.figure(figsize=(10,10))
python image size 줄이기
image_pil = Image.open("image_1경로")
image_1 = np.array(image_pil)
image_pil = Image.open("image_2경로")
image_2 = np.array(image_pil)
print(image_1.shape)
print(image_2.shape)
import cv2
image_1 = cv2.resize(image_1,(215,223))
print(image_1.shape)
image_2 = cv2.resize(image_2,(215,223))
print(image_2.shape)
resize할 때 tuple로 줘야 한다.
주의할 점: resize는 tuple로 준다.
plt.subplot(221) = plt.subplot(2,2,1)
python image 합차기
alpha값을 조정하여 할 수 있다.
plt.imshow(image_1)
plt.imshow(image_2, alpha =0.5)
plt.show()
subplot을 사용 가능한다.
plt.subplot(2,2,1 ) 혹은 plt.subplot(221)
'교육동영상 > 01. 딥러닝인공지능' 카테고리의 다른 글
06. 이미지 분석 tensorflow 2.0 (0) | 2020.11.25 |
---|---|
05. Tensorflow 2.0 Pytorch (0) | 2020.11.24 |
03. python 함수 (0) | 2020.11.19 |
02. python 조건문, 반복문 (0) | 2020.11.19 |
01. Python Programming (0) | 2020.11.13 |