# 출처 : https://www.acmicpc.net/problem/11726 2xN 크기의 타일에 대해 2x1 타일과 1x2 타일로 채울 수 있는 모든 경우의 수를 계산하는 문제이다.N = 1일때, 2일때 ... 쭉 경우를 열거하여 그 때의 수를 세 보니N = i 번째 일 때의 경우의 수는 (i - 1일때의 경우의 수) + (i - 2일때의 경우의 수) 라는 규칙을 도출해 내었고이를 그대로 구현만 하였다.DP에 관련된 문제는 점화식을 도출 해 내는 등 수학적 관계식을 도출해 내어 푸는것 같은 생각이 점점 든다. # 풀이 : 12345678910111213141516171819202122#include using namespace std;int N, cnt[1001]; int main(){ ios::s..
# 출처 : https://www.acmicpc.net/problem/1920 정렬되어 저장해주기 때문에 따로 정렬을 할 필요가 없는 자료구조 set을 사용하여 풀었다. # 풀이12345678910111213141516171819202122#include #include #include int N, M, num;std::set base;int main(){ std::ios::sync_with_stdio(false); std::cin.tie(NULL); std::cout.tie(NULL); std::cin >> N; for (int i = 0; i > num; base.insert(num); } std::cin >> M; for (int i = 0; i > num; std::cout
# 출처 : https://www.acmicpc.net/problem/4963 처음엔 BFS를 써서 풀고자 큐를 사용했으나 뭔가 원하는 방향으로 진행이 되지 않길래스택을 써서 풀었다. 그렇게 풀고 다른 사람들의 답을 보니 재귀를 사용해서 훨씬 간단하게 풀었어서재귀 연습겸 재귀로도 풀어보았다. # 스택 사용12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182#include #include #include using namespace std; int C, R, cnt;int map[51..
# 출처 : https://www.acmicpc.net/problem/1003 처음에 단순하게 count 변수 두개를 선언해서 0과 1을 호출하는 횟수를 셌는데 시간초과가 났다.따라서 i번째 수의 0과 1의 호출 횟수는 i-1번째의 0과 1, i-2번째의 0과 1 각각의 횟수의 합과 같은 규칙을 찾아처음부터 배열에 담아두는 형식으로 풀었다. # 풀이 1234567891011121314151617181920212223242526272829#include using namespace std; int T, N;int DP[42][2]; int main(){ ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); DP[0][0] = 1; DP[0][1] = 0..
# 출처 : https://www.acmicpc.net/problem/2579 이전 칸에서 현재 칸에 도달한 경우를 나눠 계산해 주면 된다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051#include #include #include using namespace std; int N; // 각 칸에 할당된 점수vector stairVal; // 현재까지 오는데 계산된 총 점수// 0 : 이전 칸에서 2칸 건너 현재 칸에 도달// 1 : 이전 칸에서 1칸 건너 현재 칸에 도달int stackedVal[300][2]; int main(){ ios::sync_with_stdio(false);..
Visualizing CNNs(Pt. 1)- 이미지 픽셀에서 CNN이 패턴을 발견해 내는 그 과정을 시각화하여 확인해보자.- 앞서 CNN이 어떻게 작동하는지 이해하기 위해선 activation map과 콘볼루션 레이어를- 시각화 하여 보는것이 매우 중요하다는 것을 언급했었다.- 스탠포드 대학의 CS231n 코스 : visualizing what CNNs learn- OpenFrameworks- 웹캠을 통해 실시간으로 CNN에 학습 될 패턴들을 보여주는 app- visualizing CNN filters - YOUTUBE- visualizing how CNNs see the world - Keras blog post - CNN을 이해하기 위해 고안된 방법으로는 콘볼루션 레이어에서 필터를 가져와- 그 필터의..
Groundbreaking CNN Architectures- ImageNet은 1000개의 각기 다른 카테고리 안에 총 천만개가 넘는 그림을 가지고 있는 데이터셋이다.- 2010년부터 ImageNet은 "ImageNet Large Scale Visual Recognition Competition" 이라는 프로젝트를 진행하는데,- object recognition과 classification에 있어 가장 최상의 CNN모델을 찾는 컴피티션이다. - 첫번째로 선정된 모델은 2012년 토론토대학의 팀에의해 개발된 AlexNet 이라는 모델이다.- AlexNet 팀은 그 당시 최고성능의 GPU를 사용하여 일주일간 네트워크를 학습시켰고,- ReLU activation function과 dropout을 overfit..
Image Augmentation in Keras - 이미지 분류를 위해 알고리즘을 설계할 때, 많은 수의 서로 상관없는 정보들을 다뤄야 함.- 우리가 설계한 알고리즘이 실제로 이미지 안에 찾고자하는 object가 있는지 없는지를 판단하도록 만들어야 한다.- 그 object의 크기나 기울어짐 정도 또는 전체 이미지 중 object가 오른편 끝인지와 같은 위치는 상관없이- 해당 object를 정확하게 있는지 없는지를 판단해줘야 함.- 이것은 다시말해 알고리즘이 이미지의 불변하는 표현(invariant representation)을 학습하는 것이다.- object의 크기가 커지거나 작아짐에 따라 리턴하는 prediction값이 달라지면 안된다.- 이를 scale invariance라 부른다.- 마찬가지로 o..
CNNs in Keras : Practical Example- CIFAR10은 6만개의 이미지를 갖고있는 유명한 데이터셋이다.- 이 데이터셋을 이용해서 이미지 분류를 해보자. 1. Load CIFAR-10 Database- 위와같이 로드 해주면 됨. 상대적으로 쉽게 불러올 수 있는편이다.- 파이썬 모듈 하나만 임포트해주면 되고, 한줄의 코드만으로 모듈을 학습시키고 테스트할 수 있다. 2. Visualize the first 24 training images- 학습시킬 이미지에 대한 subset을 시각화하여 확인할 수 있다. 3. Rescale the images by dividing every pixel in every image by 255- 이전에 모든 이미지의 픽셀을 255로 나눠줬었는데, 이번에도..
CNNs for Image Classification- 지금까지의 내용을 정리해보면, convolutional layer는 regional pattern들을 이미지로부터 뽑아내었다.- 그리고 그 이후 max pooling layer는 convolutional layer 이후에 등장하여 그 넓직함을 줄여준다.- (넓직함을 줄이지 않으면 over-fitting 될 리스크가 있음)- 이번엔 CNN 아키텍쳐를 설계하기위해 이 레이어를 나열하는 방법에 대해 알아보자.- 이미지 분류를 통해 CNN을 조금 더 구조적으로 이해할 수 있음.- 이 경우 CNN은 반드시 이미지 배열을 input으로 받아야한다. - 랜덤한 이미지의 예시.- 만약 현실 이미지(학습에 최적화 된 이미지가 아닌)를 사용한다면 매우 복잡한 문제가 ..