pytorch로 진행한 코드는 pdf 참조
전이학습: 1000개의 사물을 구분할 줄 아는 학습된 모델(ImageNet)의 가중치를 가져와서 우리가 해결하려는 문제에 맞게 보정해서 사용하는 것.



Normalize는 R, G, B 색상값을 0~1 사이의 값으로 했을때 그 평균값과 표준편차. 앞에 있는 것이 평균, 뒤에가 표준편차. 색상분포 히스토그램을 찾아서 적어야함. 컬러 사진일 경우 사진에 대한 학습 능력이 올라감.

- resnet50 이라는 모델을 불러옴.
 pretrained=True: 학습이 완료된 모델을 가져옴. False이면 구조만 가져옴.in_features: 마지막 레이어에 해당하는 채널 숫자.
- 이미 완료된 모델의 클래스 수와 내가 가지고 있는 데이터의 클래스 수가 틀릴 경우가 많다. 여기서 우리가 가지고 있는 클래스의 수는 33개.
- 그래서 불러온 resnet50 모델에서 마지막 fully connected layer를 바꿔줄 필요가 있음.- 모델이 원래 가지고 있던 전체 weight를 다 사용할 수 있지만 내가 마지막에 교체한 fully connected layer 33개는 weight가 학습이 안되어 있다. 그러므로 lambda 부분의 옵션을 넣어줘야 한다.
 lr_scheduler: epoch마다 러닝레이트를 조정함.
step_size=7, gamma=0.1 이면 7 epoch마다 0.1씩 러닝레이트를 감소시킴.
- resnet.children(): resnet 모델에 속해있는 하위 레이어
 
resnet은 10개의 레어이가 있음.- for문은 0부터 5까지의 레이어를 학습하지 않겠다
 

inputs.size(0): batch_size임




텐서플로우 공식 홈페이지 코드 사용.






- image픽셀값이 0~255인데 절반인 127.5로 나누고 -1을 하니까 -1~1 사이의 값으로 스케일링 한 것이다.
 - 참고로 28x28은 픽셀의 수를 의미하는 것. 28x28개의 픽셀을 갖고 있는 것이고 그 하나의 픽셀의 값의 범위는 각각 0~255인 것이다.
 



include_top = False : top은 출력단을 의미함.(보통 아래에서 위로 기술함) 출력은 빼고 가져옴. 이후 별도의 분류기를 얹어(예: 개와 고양이를 나눔) 맞춤형으로 사용하기 위함.
weights='imagenet' : imageNet 데이터셋으로 학습된 사전 학습된 가중치를 사용.


베이스 모델 학습은 막음

global average pooling layer: 채널마다의 평균값을 뽑아냄.










100번째 층까지는 튜닝 안하도록 설정.


- 위에서 학습시킨 history 사용.
 
위에서 epoch를 10으로 잡고 10번 학습함. 그 뒤에 이어서 학습시킴.initial_epoch = history.epoch[-1]: 이전에 학습한 history 객체에서 마지막 에포크 번호를 가져와서, 이 값을 새로운 학습의 시작점으로 설정함.- 상단에 있는 initial_epoch와 model.fit() 안에 있는 initial_epoch는 다른 변수임.
 





라벨을 저장하는 파일이 따로 있음

꽃 사진 분류
'https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz'




성능이 썩 좋은건 아니다.
"https://tfhub.dev/google/tf2-preview/mobilenet_v2/feature_vector/2"
맨 마지막 단은 나의 라벨에 맞춰 넣어줌.


loss와 accuracy를 배치별로 뽑아주는 역할









