CS
[Deep Learning] 합성곱 신경망 (Convolution Neural Network, CNN)
[Deep Learning] 합성곱 신경망 (Convolution Neural Network, CNN) 합성곱 신경망 (Convolution Neural Network, CNN) 기존의 방식인 Fully-connected Neural Network의 입력은 항상 1차원 배열이다. 또한 모든 값들이 완전 연결되어 있으므로 전체 픽셀의 모든 관계를 다 계산 해야한다. 이렇게 이미지의 3차원 배열 형상(x, y, RGB)을 무시하고 1차원 배열로 flatten해서 학습하면 여러문제가 생긴다. 이미지의 전체적인 관계를 고려하지 못해서 변형된 데이터에 매우 취약하다는 것(Topology)과, 이미지의 특정 픽셀은 주변 픽셀과 관련이 있다는 특성을 잃어버린다는 것(Locality)(이 경우 이미지를 조금만 변형해도..
[Deep Learning] 가중치 초기화 & Check Point
[Deep Learning] 가중치 초기화 & Check Point 가중치 초기화 (Initialize Weights) 초기 가중치 값은 딥러닝 학습에서 중요한 문제다. 가중치 설정을 잘못할 경우 Vanishing Gradient 등 문제를 야기할 수 있기 때문이다. 그럼 이러한 초기 가중치를 설정하는 방법들을 알아보자. Randomly # Random normal w1 = tf.Variable(tf.random_normal(shape=[784, 256])) Uniform distribution # Random uniform w2 = tf.Variable(tf.random_uniform(shape=[784, 256])) Xavier 가장 성능이 뛰어난 weight 초기화 값 # Xavier w3 = tf..
[BaekJoon] 백준 9202번 Boggle
[BaekJoon] 백준 9202번 Boggle 문제: https://www.acmicpc.net/problem/9202 내코드 - 어려운 문제 - 트라이 자료구조를 이용하는 문제 - 알고리즘은 다음과 같다 1. 단어 사전의 모든 단어들을 Trie에 저장해 준다. 2. dfs를 통해 삽입된 단어와 일치하는 경우 set에 담는다. (중복 제거) #include #include #include using namespace std; const int ALPHABET = 26; int w, b; bool visited[4][4]; string map[4]; set res; int dx[8] = { -1, 0, 1, -1, 1, -1, 0, 1 }; int dy[8] = { -1, -1, -1, 0, 0, 1, ..
[BaekJoon] 백준 2014번 소수의 곱
[BaekJoon] 백준 2014번 소수의 곱 문제: https://www.acmicpc.net/problem/2014 내코드 - 조금 어려운 우선순위 큐 문제 - 알고리즘은 아래와 같다. 1. 주어진 소수를 배열에 저장 2. 주어진 소수를 priorityqueue에 넣는다. 3. priorityqueue에서 가장 작은 원소인 head를 꺼낸다. 4. 꺼낸 head와 주어진 소수들을 각각 곱한다. 5. 곱한 소수의 곱을 priorityqueue에 넣는다. 6. 단, 주어진 소수가 head의 약수인 경우 다음 iteration으로 바로 넘어간다.(중복 방지) 7. 3-6번 과정을 n-1번 반복한다. 8. priorityqueue에서 head를 꺼내고 출력한다.(n번째 꺼낸 head가 정답) #include..
[Algorithm] 트라이(Trie)
[Algorithm] 트라이(Trie) 개념 트라이(Trie) 트라이란 문자열을 저장하고 효율적으로 탐색하기 위한 트리 형태의 자료구조이다. 아래와 같이 트리의 루트에서부터 자식들을 따라가면 문자열이 생성되는데 해당 문자열은 트라이에 저장되어있다고 한다. 저장된 단어는 끝을 표시하는 변수를 추가해서 저장된 단어의 끝을 구분할 수 있다. 문자열 탐색을 할때 빠르게 할 수 있고 효율적이다. 각 노드에서 자식들에 대한 포인터들을 배열로 저장하고 있어서 저장 공간의 크기가 크다는 단점이 있다. 검색어 자동완성, 사전에서 찾기 그리고 문자열 검사 같은 부분에서 사용할 수 있다. 시간 복잡도 제일 긴 문자열의 길이를 L, 총 문자열들의 수를 M이라고 하자. 트라이 생성: O(M*L). 문자열 개수 * 제일 긴 문자..
[Algorithm] priority queue
[Algorithm] priority queue 기본 형태 priority_queue T(자료형)은 int, double, 등등이 들어간다. Container(구현체)는 기본적으로 vector으로 정의 된다. 즉, priority_queue가 실제로는 vector 위에서 돌아가고 있다는 의미이다. vector외에 heap을 구현하기에 충분한 자료구조를 넣으면 된다. Compare(비교연산자)는 기본적으로 less으로 정의된다. 이것은 STL에서 기본적으로 제공하는 비교 연산자 클래스인데, 사용시 큰 값부터 나오게 된다. greater을 넣으면 작은 값부터 나온다. 여기에 새로 만들어준 클래스를 사용할 수 있다. 함수 push(element) : 우선순위 큐에 원소 추가 pop() : 우선순위 큐에서 to..
[BaekJoon] 백준 13414번 수강신청
[BaekJoon] 백준 13414번 수강신청 문제: https://www.acmicpc.net/problem/13414 내코드 - 처음에 list를 사용해서 풀었더니 시간초과가 났다. - vector로 학번들을 저장해두고, set으로 중복여부를 판단한다. #include #include #include #include using namespace std; int main(void) { ios::sync_with_stdio(false); cin.tie(0); int maxP, click; cin >> maxP >> click; vector li; vector result; set s; for (int i=0;i > tmp; li.push_back..
[BaekJoon] 백준 1978번 소수 찾기
[BaekJoon] 백준 1978번 소수 찾기 문제: https://www.acmicpc.net/problem/1978 내코드 - 소수는 1과 자기자신으로만 나눠지는 수라는 것을 이용하면 되는 문제 - 여기서 1은 소수가 아니라는 것을 주의하자. #include #include using namespace std; int main(void) { ios::sync_with_stdio(false); cin.tie(0); int n; cin >> n; int num = 0; for (int i = 0; i > input; bool isPrime = true; if (input == 1) continue; for (int j = 2; j < input; j++)..