-
[딥러닝 모델을 사용한 서버 배포하기 #3] Flask로 서버 개발하기
Keras모델을 사용하는 Flask서버 개발하기 앞의 포스팅에서 Tensorflow 모델을 Keras 모델로 바꾸어 사용하는 방법을 알아보았습니다. 이제는 이 Keras 모델을 사용해 어떻게 서버를 만드는지 알아보도록 하겠습니다. Flask의 기본 개념에 대한 내용은 생략합니다. 기본 개념은 공식문서를 참고하세요! 미리보기) 만들 서버의 모습입니다! 간단한 UI와 멋있는 사진 결과를 볼 수 있습니다! 입력으로 이미지의 URL을 받아 Keras 모델을 사용해 결과물을 얻고, 그 결과를 웹 화면에 보여주는 방식입니다. 순서는 flask 코드 작성 json 값을 이용해 html 화면에 결과 띄우기 로 진행하겠습니다. flask...
2019-09-11 15:38
-
[딥러닝 모델을 사용한 서버 배포하기 #2] Tensorflow모델을 Keras로 바꾸기
Tensorflow로 작성된 코드를 Keras로 바꾸기 앞에서 설명한 논문의 코드는 Tensorflow로 구현된 것이었습니다. 하지만 배치단위로 처리하는 코드였기 때문에 실시간으로 한 개씩 처리에는 적합하지 않았고,배치마다 그래프를 다시 읽어야 하는 방식으로 구현되어 있었습니다. 그래서 Tensorflow로 된 코드를 Keras로 바꾸고, 그래프는 실행시 한번만 읽을 수 있도록 로직을 수정하기로 했습니다! 1. 코드 바꾸기 레이어 부분의 코드를 바꾸는 일은 어렵지 않습니다.tensorflow에서 지원하는 layer들은 대부분 Keras에도 있기 때문에 함수명과 인자만 잘 맞춰주면 됩니다. 예를 들어 아래 tensorflow 코드는 layer01 = tf.layers.conv2d(images, 64,...
2019-09-11 13:40
-
[딥러닝 모델을 사용한 서버 배포하기 #1] 어떤 모델을 사용할까
딥러닝 모델을 사용해 서버 배포하기 첫번째는 어떤 모델을 사용할까에 관한 내용입니다! 이번에 제가 사용해 본 모델은 Saliency map을 딥러닝으로 예측하는 모델입니다. saliency map 예측 관련 벤치마크를 비교해 놓은 사이트가 있는데, 저는 여기서 python으로 구현된 모델들 중 MSI-Net을 사용했습니다. 이번 포스팅에서는 MSI-Net논문의 내용을 리뷰하면서 어떤 모델인지 살펴보겠습니다. Contextual Encoder-Decoder Network for Visual Saliency Prediction 논문 주소 : https://arxiv.org/pdf/1902.06634.pdf 깃헙 주소 : https://github.com/alexanderkroner/saliency Saliency map이란 사람이 어떤 장면을 봤을 때 집중해서 보게되는 부분을 시각화한 것 처음에는 밝기차이,...
2019-09-11 11:20
-
[최신 정보검색론] 정보검색평가
Chapter 8 정보 검색 평가 이 글은 최신 정보검색론 을 읽고 정리 한 내용입니다. 정보 검색 시스템은 문헌 검색, 문서 분류 등의 작업으로 구성됩니다. Chapter 8 에서는 이 작업들의 평가 척도를 알아보겠습니다. 8.1 순위 없는 검색 집합의 평가 1) 정확률과 재현율 시스템의 유효성을 측정하는 지표에는 크게 정확률(Precision) 과 재현율(Recall)이 있습니다. 쉽게 설명하자면 정확률은 검색된 것 중에 적합하게 검색 된 것의 비율이고, 재현율은 적합한 것 중에 검색된 것을 의미합니다. 분할표로 나타내면 아래와 같습니다. 적합 부적합...
machine_learning search_engine
2019-04-12 13:50
-
[최신 정보검색론] 지지 벡터 기계와 기계 학습
Chapter 15 지지 벡터 기계와 기계 학습 이 글은 최신 정보검색론 을 읽고 정리 한 내용입니다. Chapter 15 에서는 분류 모델 중 하나인 지지 벡터 기계 (SVM) 에 대해 알아보겠습니다. SVM 의 기본적인 아이디어는 두 범주의 경계를 가장 넓게 하는 경계를 찾는 것 입니다. 주로 2-Class 분류에 많이 쓰이며, 필요에 따라 회귀나 다범주 분류에도 쓰입니다. 15.1 선형 분류 문제 선형분류란 위의 별과 동그라미 자료를 구분하는 선을 찾는 문제로 볼 수 있습니다. A 와 B 가...
machine_learning search_engine
2019-04-11 17:30
-
[최신 정보검색론] 점수 계산, 용어 가중치, 벡터 공간 모델
Chapter 6. 점수 계산, 용어 가중치, 벡터 공간 모델 이 글은 최신 정보검색론 을 읽고 정리 한 내용입니다. Boolean 질의로 매칭되는 문헌들을 찾았을 때, 그 문헌들에 점수를 부여해 순서를 정하는 과정이 필요합니다. Chapter 6 에서는 그 방법들에 대해 다루겠습니다. 6.1 인수 색인과 구역 색인 문헌은 용어 뿐 아니라 메타 데이터 를 포함한 구조입니다. 메타 데이터란 저자, 제목, 출판일 등 문헌의 기본 정보를 의미합니다. 검색 결과에 점수를 부여할 때, 이 메타 데이터를 활용할 수 있습니다. 메타...
machine_learning search_engine
2019-04-11 13:50
-
[Sorting #6] Quick Sort
Quick Sort Problem Solving with Algorithms and Data Structures using Python 을 공부하고 정리한 내용입니다. quick sort 는 추가적인 메모리 사용 없이 Divide and Conquer 를 사용할 수 있습니다.pivot 을 이용해 divide 될 지점을 찾아주는 것이 핵심입니다. 그림으로 예를 들어 설명해보겠습니다. 이 리스트에서 첫번째 pivot 을 54 라고 합시다.( pivot 을 정하는 방법은 여러가지가 있지만, 예제에서는 첫번째 원소를 pivot 으로 하는 방법을 선택하고 있습니다.) 이제 이 pivot 을 기준으로 하고, 나머지 리스트 에 대해 leftmartk...
2018-11-29 12:45
-
[Sorting #5] Merge Sort
Merge Sort Problem Solving with Algorithms and Data Structures using Python 을 공부하고 정리한 내용입니다. sorting 알고리즘의 성능을 높이기 위해 Dived and Conquer 전략을 사용할 수 있습니다. Merge Sort 는 리스트를 재귀적으로 두개로 나누어 정렬 후 정렬된 부분들을 다시 합치는 방식입니다.base case는 merge 를 수행하는 부분이 되겠고, 그 조건은 리스트의 값이 하나 이하일 경우 입니다. 그림으로 예를 들어보겠습니다. 위의 그림은 Merge Sort 를 위해 리스트를 분할하는 과정을 나타냅니다.리스트의 원소가 하나 이하가 될 때 까지 계속...
2018-11-29 10:30
-
[Sorting #4] Shell Sort
Shell Sort Problem Solving with Algorithms and Data Structures using Python 을 공부하고 정리한 내용입니다. shell sort 는 조금 생소할 수도 있는 소팅 방법입니다.insertion sort 방식을 조금 개선한 방법인데, insertion sort 가 두 연속된 sublist 로 나누어 정렬하는 방식이었다면shell sort 는 일정 gap 을 가진 sublist 로 나누어 정렬하는 방식입니다. 그림을 보면서 설명하겠습니다. 이 그림은 gap 이 2 인 sublist 로 나누어 정렬한 예시입니다.그림처럼 일정한 gap 만큼 떨어진 값들을 하나의 sublist 로 묶어서 생각해 정렬하면...
2018-11-28 15:00
-
[Sorting #3] Insertion Sort
Insertion Sort Problem Solving with Algorithms and Data Structures using Python 을 공부하고 정리한 내용입니다. insertion sort 는 한 리스트 내에서 두 부분으로 리스트를 나누고, 뒤의 리스트의 값들을 하나씩 앞의 리스트에 정렬해서 넣는 방식입니다. 결론부터 말하자면 bubble sort 와 마찬가지로 성능이 좋지 않은 방법입니다. 그림으로 예를 들어보겠습니다. 편의상 앞의 list 를 sorted sublist , 뒤의 list 를 unsorted sublist 라고 이름붙여 보겠습니다. unsorted sublist 에 있는 값들을 차례로 sorted sublist 로 가져오는데, 이 때 가져오는...
2018-11-27 15:00
-
[Sorting #2] Selection Sort
Selection Sort Problem Solving with Algorithms and Data Structures using Python 을 공부하고 정리한 내용입니다. selection sort 는 리스트 중 가장 큰 값을 골라 뒤에서 부터 채우는 형식입니다.bubble sort 와는 달리 selection sort 는 리스트를 처음부터 끝까지 볼 때 한 번 의 swap 연산만 합니다. bubble sort 는 한 값을 정렬하기 위해 $n-1$ 번의 검사와 최대 $n-1$ 번의 swap 연산을 했다면,selection sort 는 $n-1$ 번의 검사와 한번의 swap 연산을 합니다. 그림으로 예시를 보겠습니다. 정렬되지 않은...
2018-11-27 13:40
-
Jekyll 에서 LateX 사용하기
Jekyll 에서 LateX 사용하기 포스팅을 하다보면 수식을 쓸 일들이 있습니다. 방법을 몰라서 그냥 캡쳐해서 이미지로 사용했었는데, 생각보다 간단하게 적용이 가능했습니다. Typora 에서 LateX 사용하기 제가 사용하는 마크다운 편집기인 Typora 기준으로 설명하겠습니다. 파일 > 환경설정에 들어가면 Markdown 관련 탭이 있습니다. 여기서 문법 강조 지원에 있는 수식 관련 항목을 체크해 주시면 됩니다. 너무 쉽네요… 머쓱타..드.. Jekyll 에서 Latex 사용하기 위와 같은 방법으로 Typora 에서 수식을 사용했는데, 블로그에 올리니 적용이 안되었습니다. 제가 사용하는 Jekyll 기준으로 설명하면,블로그 저장소의 상위폴더...
2018-11-27 12:10
-
[Sorting #1] Bubble Sort
Bubble Sort Problem Solving with Algorithms and Data Structures using Python 을 공부하고 정리한 내용입니다. bubble sort 는 인접한 값을 비교하고 순서를 정렬하는 방법입니다.sorting 방법 중 가장 많이 알고있는 방법인데, 성능면에서는 우수하지 않습니다.compare 와 swapping 을 불필요하게 여러 번 하기 때문입니다. 그림으로 예를 들어보겠습니다. [54, 26, 93, 17, 77, 31, 44, 55, 20] 이라는 bubble sort 방식으로 정렬할 때, 처음 비교해야 하는 쌍은 총 8 ( 9-1 ) 개 입니다. 8쌍을 비교하고 나면, 리스트 내에서...
2018-11-27 11:30
-
알고리즘 스터디 3주차
알고리즘 스터디 3주차 백준의 단계별 풀어보기에서 정렬해보기 를 풀어보았습니다. 2750 수 정렬하기 def problem_2750(input_num): input_list = [] for i in range(int(input_num)): input_list.append(int(input())) input_list.sort() for i in range(int(input_num)): print(input_list[i]) my_num = input() problem_2750(my_num) 간단한 정렬문제인데, 파이썬에서는 더 간단하게 sort 함수를 제공하고 있습니다. 문제는 이 sort 함수의 성능인데, 파이썬의 sort 함수는 timsort 라는 알고리즘으로 구성되었다고 합니다. timsort는 worst 인 경우 시간복잡도가 O(n log(n)) 으로 상당히 빠른 알고리즘입니다. timsort에 관한 자세한 설명은 링크 를 참고하시기 바랍니다. sort 의...
2018-11-12 14:50
-
알고리즘 스터디 2주차
알고리즘 스터디 2주차 백준의 단계별 풀어보기에서 규칙찾기를 풀어보았습니다. 1193 분수찾기 def problem_1193(input_num): # 대각선 기준으로 몇 번째 대각선에 속하는 수 인지 알기 c = 0 while input_num > 0: c = c+1 input_num = input_num - c # c = 몇 번째 대각선에 속하는지, c1 = 해당 대각선의 분수를 만들기 위해 c1 = c # l = 해당 대각선의 분수 list l = [] # 지그재그 이므로, 홀수번째 대각선과 짝수번째 대각선의 규칙이 다름 if c1...
2018-11-05 16:30
-
알고리즘 스터디 1주차
알고리즘 스터디 1주차 백준의 단계별 풀어보기에서 문자열 사용하기 를 풀어보았습니다. 파이썬으로 백준 알고리즘 문제를 처음 풀어보았는데, 문자열 반환의 경우 return 을 해주면 따옴표(‘’) 까지 인식 해 틀렸다고 나왔습니다. return 대신 print 를 해 주면 정상적으로 작동하는 것을 알 수 있었습니다. 1157 단어공부 import collections def problem_1157(input_string): # 대소문자 구분을 하지 않으므로 upper case 로 변경 input_string = input_string.upper() # input 에 대해 count cnt = collections.Counter(list(input_string)) # count 횟수를 key 로 갖는 딕셔너리 생성 d...
2018-10-22 17:30
-
Seq2Seq란
Seq2Seq 란? Sequence to Sequence 는 2014년 발표된 논문에서 소개된 모델입니다. 기존의 딥러닝 모델들과는 다른점들이 있어 큰 주목을 받았는데요, 한 가지씩 알아보도록 하겠습니다. 1. 입출력의 차원 제한 감소 일반적인 딥러닝 모델의 경우 입력차원과 출력차원이 정의된 상태에서 학습과 예측을 하는데, Seq2Seq는 입력차원과 출력차원의 정의에서 비교적 자유롭습니다. 한 예로, 일반적인 딥러닝 모델에서는 ‘좋은 아침이야’ 와 ‘오늘 날씨가 좋네’ 를 같은 모델의 입력으로 넣으려면 문장의 길이를 자르거나, 임베딩을 통해 같은 차원으로 맞추어 주어야 합니다. 그에 비해 Seq2Seq 는,...
2018-10-19 11:30