본문 바로가기

728x90

Data Diary

(166)
2021-11-15(CNN_Resnet) ResNet(2015) Layer가 깊어지면서 성능도 개선됨을 보였다. 이후 depth 증가에 관한 많은 연구가 진행되었다. Depth가 깊어질수록 한계점에 봉착하게 되었고 몇가지 문제점이 발생하게 되었다. Layer 층을 깊게 쌓게 되면 위와 같은 문제가 발생하게 된다. 그래서 ResNet에서는 다른 방법을 적용하여 성능을 개선 시킴 Identity block은 위 그림처럼 X라는 값이 들어오면 두갈래로 나뉘어진다. 하나는 정상적인 Conv 과정, 다른 길은 X값을 그대로 전달하여 Conv를 거친 값과 더해진다. 그렇다면 X라는 입력값을 넣어서 그대로 전달해주는 f(x)를 어떻게 하면 만들수 있을까? Identity 값, 즉 입력받은 값을 그래도 돌려주는 작업이 쉽지 않다. Weight가 단순한 값이더..
2021-11-06,08,09(CNN_AlexNet & VGG & GoogLeNet) 1. AlexNet 그 당시, 처음으로 Dropout, weight Decay를 적용했던 획기적인 방법이었다. 또한 Activation를 relu로 첫 적용한 모델이다. 2. VGGNet(2014) VGGNet은 모델이 가벼우면서 성능까지 갖추고 있기 때문에 backbone으로도 활용을 하고있다. 학계에서는 커널사이즈가 커야 고도의 추상화를 추출할수 있다는 분위기가 있었다. AlexNet의 커널이 11*11,5*5 처럼 말이다. 하지만 단점은 커널 사이즈가 크기 때문에 이미지의 사이즈가 급격하게 축소가 된다는 점이다. 34*34 원본이미지를 일부러 크게 만들어야 하는데, 이 과정 또한 컴퓨팅 자원이 소모되므로 현 시점에서 큰 커널 사이즈는 잘 사용하지 않고 있다. 본론으로 돌아와서 VGG는 3*3의 커널..
2021-10-15(CNN_Augmentation) 오늘은 Augmentation의 전용패키지에 대해 필기한 내용을 업로드 해보았습니다 :) keras ImageDataGenerator에는 제약적인 부분이 있다. Augmentation을 무조건 많이 한다고해서 성능이 좋아지지 않는다. 각 이미지에 맞은 augmentation기법을 적용해야 하는데 ImageDataGenerator는 랜덤하게 알아서 진행하기 때문에 사용자가 조절할수 없다는 단점이 있어서 Augmentation 전용 패키지가 필요한 이유이다. 픽셀,공간에 기반한 많은 augmentataion 기법들이 있다. Compose안에 개별적인 Aug기법들을 적어주면 변환 Pipeline을 만들수 있다. 기법들이 입력으로 들어갈때는 반드시 List로 입력을 받는다. 연속적으로 변환이 적용되므로 위 그림..
2021-10-14(따릉이 프로젝트 완성하기 12) 따릉이 프로젝트 완성하기 12번째 시간입니다. 여태까지 했던 작업물을 가지고 Test 데이터 적용해 본 결과, 31.30 점수대에서 머무르면서 29위에 랭크되었습니다. 성능 개선을 위한 하이퍼 파라미터를 많은 시간을 들이며 search를 해봤지만 한계에 봉착하게 되었습니다. 잔차분포를 보면 prediction값이 target보다 적게 예측한 결과가 다수 발견이 되어왔었습니다. 그래서 기존에는 target 이상치 제거를 18,19시에만 적용했던걸 4,5,12,13시에도 적용했습니다. 기존에 18,19시에만 이상치 제거를 했던 이유는 출퇴근시간에 급증하는 패턴을 일반화 스럽게? 살리기 위해서 였습니다. 이상치라고 해도 무조건 삭제하는건 좋지 않다고 배웠던 지라, 조심스럽게 접근했었습니다. 아무튼 아래 내용들..
202-10-12,13(CNN_Pretained & Keras Generator의 이해) 오늘 학습내용은 거의 실습 위주로 진행해서 이론내용은 많지 않았습니다! 특히 사전 학습은 같은 경우는 앞서 프로젝트에서 한번 해봤기 때문에 나름 익숙했습니다. *ImageDataGenerator ImageDataGenerator가 필요한 이유는 CPU,MEMORY,GRU의 자원을 고려해야 하기 때문입니다. 입력될 이미지의 사이즈가 크고 양이 많다면 한번에 메모리에 올리지 못합니다. 올린다 해도 CPU가 처리를 못하게 됩니다. GPU도 마찬가지입니다. GPU에서는 수~많은 파라미터가 연산이 진행되기 때문에 한계가 존재합니다. 따라서 batch_Size만큼만 이미지를 가져와서 전처리하고 학습하는 과정이 필요하게 됩니다. 이 필요성을 해결해주는 도구가 바로 ImageDataGenerator입니다. 위 그림은 ..
2021-10-08(CNN_Global AG, 가중치 규제, Augmentation) Global Average 각 채널 별로 평균값을 추출한다 . 이는 파라미터를 효과적으로 줄이는 효과가 있어서 오버핏팅을 상쇄시킬수 있다. 단, 채널 수가 적은 상태에서 적용하면 오히려 Flatten보다 성능 저하가 우려된다. 강사님의 생각으로는 채널수가 적어도 512이상 있어야 된다고 한다. 가중치 규제 이는 오버핏팅을 극복하는 방법 중 하나이다. 식을 보면 원래 Loss 에다가 alpha*||w||^2 만큼 더해준다. l2는 가중치의 제곱, l1은 가중치의 절대값에 각각 alpha를 곱해준다. 딥러닝에서 "각 layer " 별로 가중치 규제를 적용한다. 개발자 임의대로 layer에 추가 혹은 하지 않아도 되는 자유성이 있다. 강사님의 경험상 해당 기법으로 이득을 본 기억은 없다고 한다. 또한 alph..
2021-10-07(CNN_배치정규화 &따릉이 12) 1. 따릉이 수요예측 데이터 분리 시, random_state에 따른 학습 성능 차이가 크다는걸 확인하게 되었습니다. 왜그런지 추측을 해본다면 현재 갖고 있는 train data만 1300건 정도 밖에 없습니다. 게다가 Feature 중 Categorical 형식의 컬럼이 4개가 있습니다. 예를 들어서 비가 왔을때와 오지 않았을때, 미세먼지가 심했을때, 보통일때, 나쁠때 등 각 상황별로 충분한 데이터가 주어지지 않아서 train에 어떤 data가 학습 되었느냐에 따라 성능차이가 있을거라는 제 개인적인 생각입니다. 그래서 random_state 별로 LGB 모델을 199번까지 돌려봤습니다. X_train, X_test, Y_train, Y_test = train_test_split(x_train, y_tr..
2021-10-6(따릉이 프로젝트 완성하기 11) 요약 트리계열 모델의 Ensemble 여러 모델을 실험한 결과 트레 계열 모델이 그나마 좋은 성능을 보입니다. 그래서 오늘은 이러한 모델을 가지고 ensemble을 해봤습니다. models = [ ('xgboost', XGBRegressor(random_state=2021)), ('lgb', lgb.LGBMRegressor(random_state=2021)), # ('rf', RandomForestRegressor(n_jobs = -1,random_state=2021)) ] params = { 'xgboost': { "gamma": np.linspace(0,0.5,20), "max_depth": range(2, 6), "learning_rate" : [0.001,0.01,0.1], "n_estimator..