728x90

Computer Science 404

TensorFlow, Keras GPU 메모리 문제(Out of Memory) 발생 시 시도해볼 방법

빅데이터 처리나 딥러닝을 하다보면 자연스럽게 마주하는 문제가 바로 메모리 문제다. 빅데이터 처리 같은 경우 그냥 파이썬에서 Numpy나 Dataframe을 사용하는 과정에서 발생하는 일이 흔하고, 그때마다 gc를 호출하거나, 처리하는 데이터의 양을 분할하는 방법, 변수 타입 변경 등 다양한 방법이 있어서 해결하기 쉬운데, 딥러닝은 그게 쉽지가 않다. 그래도 시도해볼 방법은 있다. 주로 메모리 에러를 마주할 때 보게 되는 메세지는 아래 부류들이다. OOM(Out of Memory)Resource exhausted: OOM when allocating tensor with shape Failed to get convolution algorithm. This is probably because cuDNN fa..

Node.js Express Framework에 대해서 미들웨어와 라우터 등 간략 정리

bin/www http모듈에 express 모듈을 연결하고, 포트 지정하는 부분 콘솔 명령어로도 만들 수 있으며 그때, 주석처리된 #!/usr/bin/env node이 사용됨 전역 설치 후 rimraf와 같이 명령어로도 실행할 수 있음 var app=require('../app'); var debug=require('debug')('learn-express:server'); var http=require('http'); app, debug, http 모듈 가져옴 var port=normalizePort(process.env.PORT || '3000'); app.set('port',port); 실행될 포트 지정, 기본 값 3000 데이터를 app.set으로 지정하고, app.get으로 가져올 수 있음 va..

깊이 우선 탐색(DFS)과 너비 우선 탐색(BFS) 정리 - 기본적인 특징과 유의 사항에 대해서

깊이 우선 탐색과 너비 우선 탐색에 대해 간단하게 비교하여 정리하고자 한다. 두 알고리즘은 생각보다 알고리즘 문제 풀이에서 많이 볼 수 있고, 각각의 응용 방식을 통해 나오는 코딩 테스트 문제가 많기 때문에 참고해두는 것이 좋고, 기본적인 구현 방식은 알고 접근하는 것이 좋다. 기본적인 구현 코드는 백준 온라인 저지의 1260번 DFS와 BFS 을 구현하는 코드이다. DFS(Depth-First Search) Stack으로 구현할 수 있고, 함수 호출도 Stack처럼 이뤄지기 때문에 대부분 재귀 함수로 구현된 코드들이 많다. DFS는 미로 찾기로 치면, 막히는 곳까지 계속 파고 드는 Leaf-wise한 방식이다. 분기점이 나오면 길 하나를 선택하고 더 이상 진행하지 못하는 시점까지 진행한다고 보면 이해하..

URI, URL, URN 비교 및 정리

그냥 아무것도 모르고 URL, URL, URL이라고 떠들고 다녔는데, 여기저기 용어들이 섞이면서, 뭔가 다름을 직감하고 조사해봤더니, 명확한 차이가 있는 것 같아 정리해본다. 요약하자면 URI가 가장 상위 개념이고, URL과 URN을 포함한다. URL은 인터넷 상의 자원의 위치, URI는 자원을 식별하기 위한 문자열 구성이다. URI(Uniform Resource Identifier) 통합 자원 식별자 인터넷에 존재하는 자원을 나타내는 유일한 주소 인터넷에 요구되는 기본 조건으로, Internet Protocol에 항상 붙음 URL, URN은 URI의 하위개념 유일한 주소라는 점을 눈여겨 볼 필요가 있음 URL(Uniform Resource Locator) 자원을 의미함 URI와 URL을 혼동하는 이유는..

BOJ] 11559 Puyo Puyo(연세대학교 프로그래밍 경시대회 C번)

https://www.acmicpc.net/problem/11559 11559번: Puyo Puyo 현재 주어진 상황에서 몇연쇄가 되는지 출력하라. (하나도 터지지 않는다면 0을 출력하면 된다.) www.acmicpc.net 입력 12*6의 문자가 주어진다. 이때 .은 빈공간이고 .이 아닌것은 각각의 색깔의 뿌요를 나타낸다. R은 빨강, G는 초록, B는 파랑, P는 보라, Y는 노랑이다.(모두 대문자로 주어진다.) 입력으로 주어지는 필드는 뿌요들이 전부 아래로 떨어진 뒤의 상태(즉 뿌요 아래에 빈 칸이 있는 경우는 없음) 이다. 출력 현재 주어진 상황에서 몇연쇄가 되는지 출력하라. (하나도 터지지 않는다면 0을 출력하면 된다.) 문제 접근 간단한 BFS이고, 부숴지는 벽돌이 4개 이상 나오면 벽돌을 부..

우분투(18.04 기준)에서 AlexeyAB/darknet, YOLOv3 설치해서 활용하기

YOLOv3를 구현해놓은 darknet은 크게 두 개의 프로젝트로 나뉜다. https://pjreddie.com/darknet/ Darknet: Open Source Neural Networks in C Nightmare Use Darknet's black magic to conjure ghosts, ghouls, and wild badgermoles. But be warned, ye who enter here: no one is safe in the land of nightmares. pjreddie.com https://github.com/AlexeyAB/darknet AlexeyAB/darknet Windows and Linux version of Darknet Yolo v3 & v2 Neural ..

PyQt5 GUI로 딥러닝(Deep Learning) 모델을 동작시키는 간단한 예제

딥 러닝 모델을 개발하는 것은 매우 어려운 작업이다. 그냥 그걸 만드는 것에만 그치는 건 아쉽고, UI를 통해 모델을 출력 결과를 App으로 보여주게 구현해보는 것도 괜찮다. 모델은 Keras로 구현하였고 선형 회귀(Linear Regression) 모델로 구성했다. 그냥 거창한 거 넣을 것 없이 X1, X2, X3를 통해 Y를 예측하는 모델이며, target value는 다음 식으로 계산했다. Y = X1 + X2 - X3 학습 데이터는 난수를 통해서 생성했고 5000개의 샘플로 생성해서 학습시켰다. 데이터 생성 import numpy as np import pandas as pd X1 = np.random.randint(1, 1000, size = 5000) X2 = np.random.randint(..

케라스(Keras)에서 모델 학습 중 loss가 nan으로 나오는 문제, 예측 값이 nan으로 나오는 문제

어떤 국내 논문 하나를 구현해보면서 Keras를 활용해서 선형 회귀(Linear Regression) 모델을 만들었다. 분명 다른 모델들을 만들 때도 이와 동일하게 만들어서 작성을 했는데도 loss가 nan이 나오고 예측 값도 nan이 나오는 문제가 있었다. 혹시나 싶어 np.mean을 사용해서 평균 값도 찍어봤는데, 이 역시도 nan이 나왔다. 데이터 타입이 혹시 다른 게 들어가서 그런 것인지, 중간에 무언가가 비었는지 체크해봤지만 아무 문제가 없었지만, 우우여곡절 끝에 해결 방법을 찾았다. astype을 사용해서 데이터 타입을 변경했다. X라는 데이터가 있으면 그냥 X=X.astype(float)로 변경해주면 해결됐다. 어디까지나 추정이지만, 오버플로우 같은 게 발생해서 나타난 문제 같다. 데이터 사..

욜로(YOLO) Cannot load image, Couldn't open file, Segmentation fault 에러 해결 방법

YOLO로 객체 탐지(Object Detection)을 할 일이 생겨서 이런저런 설정을 해주면서 작업을 진행했다. Bounding Box를 치고 Labelling을 하는 작업도 순조롭게 마치고, 이제 리눅스 환경으로 옮겨서 라벨링한 데이터들을 darknet 내부 디렉토리에 적절하게 위치시키고서 학습을 시키려니까 문제가 발생했다. Cannot load image ~~ Couldn't open file ~~ dimension과 wieght 불러오는 등 설정 파일까지 다 읽어온 상태에서 학습용 이미지 파일과 bounding box 좌표값을 담은 같은 이름의 파일을 불러오지 못하는 에러가 잔뜩 발생했다. 이럴 때는 대부분 아래의 방식을 따르면 해결이 된다. 아래 내용은 실제 darknet repository인 ..

BOJ] 14716 - 현수막(충남대학교, 생각하는 프로그래밍 대회 A번)

제한사항 2초, 512MB 입력 첫 번째 줄에는 현수막의 크기인 M와 N가 주어진다. (1 ≤ M, N ≤ 250) 두 번째 줄부터 M+1 번째 줄까지 현수막의 정보가 1과 0으로 주어지며, 1과 0을 제외한 입력은 주어지지 않는다. 출력 혁진이의 생각대로 프로그램을 구현했을 때, 현수막에서 글자의 개수가 몇 개인지 출력하여라. 풀이 방법 BFS, DFS 구분하지 않고 뭘 하든 될 줄 알았는데 BFS를 사용하니까 메모리 초과가 발생했다. 그래서 방향을 틀어 DFS를 사용해서 문제를 해결했다. 사실 BFS로 문제를 해결할 때, 이미 Queue 안에 들어간 내용을 따로 체크해줬으면 메모리 초과가 발생하지 않았을 것 같다. 소스코드 #include #include using namespace std; vect..

728x90