본문 바로가기
[파이썬 알고리즘] 백준 10951 풀이 제가 처음으로 막혔던 부분은 10951번 문제 입니다. 런타임 에러(EOFerror)로 잡혔네요 문제는 다음과 같고 제가 제출한 답은 아래 코드블럭으로 넣어봤습니다. while True: x = input() if x!='': A=int(x.split(' ')[0]) B=int(x.split(' ')[1]) print(A+B) else: break 실제로 코드를 실행하고 input을 넣으면 제대로 출력이 되긴 합니다. 하지만 EOFerror는 End of File error의 약자인데 제 코드를 보면 while이 계속 도는 상황에서 입력이 끝났음을 알리는 부분에 대한 처리가 enter를 한 번 더 눌러야만 하는데 이게 잘못된 것 같습니다. 그래서 EOF error라고 구글에게 물어보았어요 Try Exce.. 2022. 2. 15.
[알고리즘] https://plzrun.tistory.com/entry/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4PS-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0 알고리즘 문제풀이(PS) 시작하기 이런건 고수들이나 써야 하지 않나 싶지만, 그래도 1년정도 공부하면서 이 분야를 어떻게 시작해야 할지 써보려 한다. 라고 운을 뗀다음 열심히 내 얘기만 했던 후속편이다. 내 인생사가 궁금하 plzrun.tistory.com 스터디원 분의 추천을 받아 알고리즘 공부할때 따라가면 좋은 커리큘럼? 을 소개해준 블로그를 알게됐습니다. 이렇게 출처를 여쭈지 않고 글을 올려도 되는지는 모르겠습니다만 일단 해당 블로그에서 소개.. 2022. 2. 14.
[Grad-CAM] How? ; Section 3.2 Grad-CAM이 class-discriminative 하고 그 class에 연관된 image regions을 알려주지만, fine grained detail (pixel 공간의 gradient 시각화)을 highlight 해 주는 역할은 할 수 없습니다. Guided Backpropagation은 이미지에 대한 gradient들을 시각화해 줍니다. 직관적으로, Guided Backpropagation은 neuron들에 의해 찾아진 pixel들을 capture 하는 것을 목적으로 합니다. 위 그림을 보시면 아시겠지만 Grad-CAM이 해당 이미지에서 cat부분을 찾아 준것을 알 수 있습니다. 하지만 해당 heat map이 왜 네트워크(모델)가 이것을 tiger cat이라고 예측했는지는 정확하게 알 수 없.. 2022. 2. 8.
[Grad-CAM] How? ; Section 3.1 Grad-CAM generalizes CAM => Grad-CAM 이 CAM을 커버할 수 있다 로 이해하시면 무리 없습니다. paper에서 Grad-CAM이 CAM을 generalize 한다는 formal 한 증명을 준다고 하니 한번 자세히 들여다봅시다. 우선 CAM의 논리가 무엇인지 자세히 들여다보겠습니다. CAM은 Global Average Pooling 와 Softmax 두 개의 layer가 직접적으로 연결돼있는 CNN모델에서만 loclization map을 얻을 수 있습니다. 자세히 적으면, 뒤에서 두 번째 layer가 K개의 feature maps를 생성한다면, \( A^k \in \mathbb {R}^{u \times v}\), 이 feature maps들에 index \( i, j \)를 .. 2022. 2. 8.
[Grad-CAM] How? ; Section 3 detail \(L_{Grad-CAM}^c =\frac{1}{I\times J} ReLU(\sum\limits_{k=0}^{K-1} \sum\limits_{i=0}^{I-1}\sum\limits_{j=0}^{J-1} \frac {\partial y^c}{\partial A_{i, j}^k} A^k) \) 식을 이제 더 자세하게 파봅시다. 우선 \( L_{Grad-CAM}^c\) 의 사이즈는 \( A^k\)의 사이즈와 동일하다고 합니다. 그렇다면 우리가 확인해야할 부분은 \( \frac {\partial y^c}{\partial A_{i, j}^k} A^k \) 입니다. \( \frac {\partial y^c}{\partial A_{i, j}^k} A^k \) 이 계산 결과 값이 \(A^k\)와 크기가 동일하다는 얘.. 2022. 1. 26.
[Big Summation tex] 큰 시그마 기호 \(\sum_{i=0}^{I-1} \) 요런 기호를 썼을 때 옆으로 붙으면 참 안 예쁘죠?! \sum_{i=0}^{I-1} 요 tex에 limts를 추가해주면 예쁘게 다음과같이 쓸 수 있습니다. 요렇게 말이죠 ! \sum\limits_{i=0}^{I-1} \(\sum\limits_{i=0}^{I-1} \) 이쁘져? 2022. 1. 25.
[Grad-CAM] How? ; Section 3 Section 3. Grad-CAM Convolutional layers은 spatial 한 information 즉 feature map을 얻는데 이는 fully-connected layer에서 없어집니다. 이는 곧 convolutional layer의 결과가 object parts의 정보를 제공한다는 의미로 해석될 수 있습니다. Grad-CAM는 각각의 neuron이 particular decision of interest에 importance values를 assign 하기 위해 CNN의 마지막 convolutional layer로 흘러들어오는 gradient information을 사용합니다. 자! 글쓴이가 원하는 바가 소개됐네요. CNN의 마지막 convolutional layer에서 계산되는 .. 2022. 1. 24.
[Grad-Cam] What? ; Section 1, 2 https://arxiv.org/pdf/1610.02391.pdf Grad-Cam이 소개된 논문입니다. 제목은 Grad-CAM : Visual Explanations from Deep Networks via Gradient-based Localization 입니다. 참 명료하고 매력적인? 제목인것 같습니다! 제목만 보고도 무슨 내용인지 알 것 같은 동시에 확 궁금해지는 그런~ 제목에서 부터 알수있다 싶이 목적은 CNN의 시각적 설명입니다. 이를 통해 CNN 모델이 transparent and explainable해진다고 설명하네요 (XAI에서 사용되는 jargon입니다.) 지난번 포스팅에서 언급드렸다 싶이 CAM의 개념을 활용하고싶을때 Global Average Pooling layer가 필요했었는데, .. 2022. 1. 24.
[Grad-Cam] Why? Grad-Cam은 Cam의 개념에서 확장된 것입니다. 그렇다면 Cam을 먼저 이해할 필요가 있겠죠? CAM = Convolutional Activation Map의 약자입니다. Convolution의 결과가 어떻게 활성화되는지 시각화시켜주는 툴이라고 생각하시면 편합니다. CNN을 조금 접해보신 분들은 아래의 그림들을 한번쯤은 보셨으리라 생각합니다. 직관적으로 '이미지의 어떤부분을 보고 분류를 하였느냐!'입니다. 기존에 뭐때문에 CNN의 성능이 좋은지 몰랐던 부분을 이해하기 위한 시도라고 생각하시면 무리 없습니다. 근데 이런 CAM에는 치명적인 단점이 있는데요 모델 내부 layer에 Global Average Pooling이 반드시 포함되어야 한다는 것입니다. 이를 극복하기 위해 나온 개념이 Grad-Ca.. 2022. 1. 24.
[검색 노출] 구글 검색 성공사례.. 친구가 구글에 handy-choi 제 블로그 관리자 이름 검색했더니 2페이지에 뜬다고 하네요 저는 안뜹니다 하하 이유는 잘 모르겠어요 나중엔 개념을 검색해보신 분께서 들어와주셨으면좋겠네요~! 2022. 1. 12.
MLP 마무리 참 힘들고 지치는 과정이셨죠? 하지만 전체적인 구조를 이해하기 위해 처음부터 끝까지 다 톺아보는 이 과정이 나중엔 정말 도움이 되실 거라 생각합니다. 매번 이렇겐 할수 없잖아요~? 그래서 다음 AlexNet 구현부터는 pytorch를 이용하여 해 보도록 하겠습니다. pytorch를 사용하면 간단한 코딩으로 우리가 복잡하게 계산했던 편미분들을 뚝딱 해준답니다~! 다음 카테고리 AlexNet으로 가보시죠. 2022. 1. 6.
[티스토리 노출] 왜 내 블로그는 검색이 안될까..?! 충격! 티스토리는 카카오 꺼라 다음에선 검색이 되는데 구글에선 검색이 안됩니다..ㅎ 근데 보통 뭔갈 알고싶을때 바로 url에 때려 넣지 않습니까?! 그래서 구글에 검색이 되도록 야 구글아 나 블로그 만들었다!라고 알려줘야 된답니다. 1. https://search.google.com/search-console/welcome 2. 오른쪽에 URL 접두어 창에 본인 티스토리 URL을 넣어 주면 됩니다, 계속을 누르시면 아래 창이 뜨고 완료를 누르면 됩니다, 3. 완료를 누르면 소유권 확인이라는 창이 뜨고요 meta-name 로 시작하는 태그를 알 수 있는데 그걸 복사해줍니다. 4. 블로그 관리 페이지로 이동하여 스킨 편집클릭후 우측 상단의 html 편집으로 이동한 뒤 와 사이에 붙여 넣기 해주시면 됩니다! .. 2022. 1. 6.
MLP from Scratch with Numpy [7 / 7] - 전체 코딩의 흐름 그전까지의 코딩까지 묶어서 일단 한번 봅시다. import numpy as np import pandas as pd import random import matplotlib.pyplot as plt import os os.environ['KAGGLE_USERNAME'] = # username os.environ['KAGGLE_KEY'] = # key !kaggle competitions download -c digit-recognizer !unzip -q test.csv.zip !unzip -q train.csv.zip train=pd.read_csv('train.csv') test= pd.read_csv('test.csv') Label = train['label'].values Train = train.. 2022. 1. 6.
MLP from Scratch with Numpy [6 / 7] - backpropagation2 자 이제 \(W^0\)에 대한 미분도 이어서 해봅시다. 추가적인 설명을 적어 넣어 보도록 하겠습니다. 여기도 마찬가지~! 이제 수식으로 써볼껀 다써봤네여!!! 마지막으로 코딩해보고 끝내버립시다. 2022. 1. 6.
[티스토리 수식 플러그인] 수식을 적고 싶어,... 1. 우선 관리자 페이지로 이동합니다. 2. 좌측 꾸미기 카테고리에 스킨편집으로 이동합니다. 3. 우측 상단 html 편집으로 이동합니다. 4. 와 사이에 다음 을 복사해서 붙여넣어줍니다. ">"> 끝 끝! 2022. 1. 6.
MLP from Scratch with Numpy [5 / 7] - backpropagation1 자 이제까지 데이터를 입력받으면 [1 x 10] 확률 벡터를 만들어 내는 계산을 완료했습니다. 이를 feed forward라 부릅니다. 문제를 풀어본 상태라고 이해하시면 됩니다. 이젠 문제를 맞힐 수 있도록 혼내줄 겁니다. Back propagation! feed_forward의 결과가 뭐였죠?! 다음과 같습니다. Cost_function = cross_entropy(Output_layer, true_Label) = cross_entropy(softmax(np.dot(ReLU(np.dot(Input_layer , W_0)) , W_1)), true_Label) 이 길고 복잡해 보이는 식을 어떻게 건드려야 하나 두렵겠지만 어쨌든 하나씩 풀어가야 됩니다. 지난 포스팅에서 Cost function으로 쓰인 c.. 2022. 1. 6.
MLP from Scratch with Numpy [4 / 7] - feed forward 코딩 흐름 google colab이나 jupyter notebook에서 작동 가능한 코드들입니다. MNIST데이터를 받기위한 사전 작업 해주시고~ import numpy as np import pandas as pd import random import matplotlib.pyplot as plt import os os.environ['KAGGLE_USERNAME'] = # username os.environ['KAGGLE_KEY'] = # key 압축해제 해주시고~ !kaggle competitions download -c digit-recognizer !unzip -q test.csv.zip !unzip -q train.csv.zip 변수 저장 해주겠습니다~! train=pd.read_csv('train.csv.. 2022. 1. 5.
MLP from Scratch with Numpy [3 / 7] - Activation 지난 포스팅에 행렬 계산을 해보았습니다. Hidden_layer = np.dot(Input_layer , W_0) Output_layer = np.dot(Hidden_layer , W_1) Output_layer = np.dot(np.dot(Input_layer , W_0) , W_1) 저 정도 계산으로 특별한 성능을 기대한다면 너무 욕심이겠죠? 이제 진짜 시작입니다. 행렬 계산에 그치지 않고 우리는 Activation function을 적용해 줄 것입니다. 활성 함수라고 하죠 그 이유는 모델 전체에 Nonlinearity (비선형성) 성질을 부여하기 위함입니다. 사연이 있는 행위 지만 여기선 간단하게 '어려운 문제 풀기 위해 사용'됐다고 하겠습니다. (* 전공자시라면 반드시 찾아보시길!) 여기선 가장 .. 2022. 1. 4.
MLP from Scratch with Numpy [2 / 7] - feed forward2 지난 포스팅의 확장입니다. 실제 MNIST 데이터에 적용하기 MNIST 데이터의 크기는 [28 x 28]의 이미지라고 말씀드렸어 이걸 한 줄로 죽 늘어뜨리면 [1 x 784] vector로 표현할 수 있습니다. 그럼 지난 포스팅에서 봤던 input layer \( I \)의 크기는 어떻게 될까요? [1 x 784] vector가 바로 input layer \(I\)로 표현됩니다~ 그다음은 Hidden layer \( H \)의 크기는 어떻게 정할까요? 사실 맘대로 하면 됩니다. 크게 하면 연산량이 많아지며 복잡한 문제를 해결할 수 있는 가능성이 생기고요 작게 하면 그 반대입니다 Vise Versa. 저는 그냥 [1 x 100] 사이즈의 vector로 만들어 주겠습니다. 마지막으로 output layer .. 2022. 1. 3.
MLP from Scratch with Numpy [1 / 7] - feed forward1 계획의 시작 MLP입니다. MLP with 2 layer 모델로 MNIST 분류 문제를 풀어보겠습니다. 우선 아주 쉽게 축소하여 한번 가봅시다! 보통 Hidden layer의 수와 Output layer의 수를 합쳐서 layer 수를 결정하는 것으로 추정됩니다. 아마 곱해지는 행렬이 2개라서 그런것 같습니다. [그림 1] 에 추상화된 MLP 모델이 그려져 있습니다. Input layer를 [1 x 3] vector \(I\) Hidden layer를 [1 x 4] vector \(H\) Output layer를 [1 x 3] vector \(O\) \(W^0\), \(W^1\) 은 행렬입니다. 행렬 곱셈에는 in(곱해지는 것)과 out(결과)을 알고 있다면 그 형태에 끼워 맞춘 행렬을 만들 수가 있.. 2022. 1. 3.