본문 바로가기

분류 전체보기

(613)
[Docker] WSL + Docker + GPU + Pytorch + Jupyter notebook wsl에서 진행하려면 제일 중요한 것은 윈도우 11이어야 한다는 것이다. 이게 아니면 cuda가 암것도 안된다. 이것때문에 다 설치를 해도 안됐던 것이다. 무조건 빌드버전을 확인해야한다. 파워셸에서 winver쳤을 때 빌드버전이 20150 이상이어야 WSL2에 쿠다 설치가 가능하다. 20150 이상 버전이라면 사전작업을 스킵해도 된다. 아래 프로세스는 윈도우 빌드 20150 이상으로 업데이트하기 위한 작업이다. 1. 윈도우 11버전에서 빌드환경 20xxx이상 wsl설치 2. wsl2로 업그레이드 해서 docker 사용 가능하게 하기 3. pytorch docker 이미지 다운로드 4. docker-nvidia 설치해서 docker에서도 gpu사용가능하도록 하기 5. nvidia 드라이버 설치 6. cud..
[ML] K-Fold Cross Validation(교차검증) 정의 - K개의 fold를 만들어서 진행하는 교차검증 사용 이유 - 총 데이터 갯수가 적은 데이터 셋에 대하여 정확도를 향상시킬수 있음 - 이는 기존에 Training / Validation / Test 세 개의 집단으로 분류하는 것보다, Training과 Test로만 분류할 때 학습 데이터 셋이 더 많기 때문 - 데이터 수가 적은데 검증과 테스트에 데이터를 더 뺐기면 underfitting 등 성능이 미달되는 모델이 학습됨 과정 - 기존 과정과 같이 Training Set과 Test Set을 나눈다 - Training을 K개의 fold로 나눈다 - 위는 5개의 Fold로 나눴을때 모습이다 - 한 개의 Fold에 있는 데이터를 다시 K개로 쪼갠다음, K-1개는 Training Data, 마지막 한개는 V..
[ML] Ensemble - DL에 적용 딥러닝 성능을 향상하기 위한 기법으로 사용할 수 있다. 각각 다른 신경망으로 학습데이터에 대해 각각 따로 학습을 시킨 후, n개의 예측값을 출력시키고 그것을 n으로 나눈 평균값을 최종 출력으로 하는 것이다. (Stacking사용) 오버피팅의 해결과 약간의 정확도 상승 효과가 실험을 통해 입증되었다. 또한 평균이 아닌 투표방식, weight별 가중치를 다르게 주는 방법들도 존재한다. ex) pretrained 된 모델들을 앙상블모델로 만들어 분류의 성능을 높이자 DataLoader 생성 모델1, 모델2, 모델3 생성 (ResNet, Inception, DensNet 예시) 각 모델에서 컨볼루션 feature 추출 그 feature들로 학습, 검증 데이터셋 생성 및 DataLodaer 생성 앙상블 모델 생성..
[ML] Curse of Dimension(차원의저주) 데이터의 차원이 증가하면 이것을 표현하기 위한 데이터양이 기하급수적으로 올라간다 우리에게 4개의 데이터가 있다고 가정해볼게요. 그리고 모든 축의 길이가 2인 2차원공간과 3차원공간에 4개의 데이터를 집어넣을거에요. 왼쪽그림에서는 면적당 데이터가 차지하는 밀도는 1이겠네요. 우측그림에서는 면적당 데이터가 차지하는 밀도가 1/2일거에요. 그렇다면 공간의 차원이 높아질 수록 같은 데이터량이라고 할지라도 (데이터가 공간을) 차지하는 비율이 낮아진다고 할 수 있겠죠? 우리가 30개의 데이터를 갖고 있는다고 했을때보다 1000개의 데이터를 갖고 있을때 overfitting이 일어날 확률이 더 적을거에요 (이에 대한이유는 앞선글의 가위 예시를 통해 이해해주시면 좋을것 같아요). 결국엔 같은 공간차원이라고 해도 데이터..
[ML] Activation2 - 존재하는 이유 Perceptron은 많은 문제를 해결해 줄 것으로 기대했어요. 예를들어 두 개의 입력값 x1, x2 ∈ {0,1} 중 하나만 1이라는 입력이 들어오면 1이라는 결과를 도출하는 OR 문제같은 경우나, 두 개의 입력값이 모두 1이어야만 1이라는 결과를 도출하는 AND 문제와 같은 경우는 쉽게 해결이 가능했어요. x1을 X로, x2를 Y라고 하고 Y를 C라는 임의의 상수라고 표현하면 activation function을 거치기 직전인 w1X+w2Y=C 라는 식이 만들어 지겠네요. 그런데 왼쪽 식을 Y=(-w1X+C)w2 라고 바꿔주면 직선의 방정식 (linear) 이 되는 것을 볼 수 있죠? 충분히 두 개의 입력으로 구성된 perceptron으로 문제 해결이 가능해졌어요. 그런데 우리가 정의한 문제공간(Or..
[PyTorch] 모델 앙상블(ensemble) 하기 GitHub - taewanme/DL_With_PyTorch Contribute to taewanme/DL_With_PyTorch development by creating an account on GitHub. github.com ↑emsemble 코드 모델 앙상블(ensemble) 하기 학습이 잘된 몇가지 모델이 있고, 각각의 모델의 성능을 결합하여 최선의 결과를 얻고 싶을 때 모델 앙상블을 이용한다. 예시) 잘 학습된 가중치를 포함한 모델 1~3이 있다고 하자. 모델을 통해 dhpark1212.tistory.com
[Kaggle] 딥러닝 정확도 높이기 딥러닝 정확도 높이기딥러닝 연구를 하면서 누구나 하게되는 질문이 있습니다. "어떻게 해야 정확도를 올릴 수 있을까??&qu...blog.naver.com
[ML] 뉴럴네트워크모델 (구조, 비용함수, 경사하강법, Backpropagation 알고리즘) Backpropagation 알고리즘 이건 10번은 봐야될 강의다!
[Git] Git clone --depth=1 Git 리파지토리의 이력이 많아지거나, 리파지토리 용량이 클수록 clone을 받는데, 시간도 많이 걸리고 스토리지도 많이 필요하게 됩니다. 그래서 리파지토리의 일부 이력만 받아오는 방법이 있는데, 이를 전문용어로 shallow clone 이라고 합니다. 얕은 클론이라고 해석할 수 있는데, 이걸 기억하면 옵션도 쉽게 기억할 수 있습니다. 옵션이 depth거든요. shallow clone 앞에서도 설명했드시 Git 리파지토리의 전체 이력 중 일부만 받아오는 행위를 shallow clone이라고 합니다. 그 반대, 즉 전체 이력을 받아오는 것을 deep clone (깊은 클론)이라고 합니다. 대개의 경우, 전체 이력을 받아오지만, 리파지토리가 매우 크거나, 오랜동안 쌓인 이력이 매우 많을 경우, 또는 요즘은 ..
[ML] Support Vector Machine(SVM)
[C] 실행 파일 옵션 사용하기 C 언어의 main 함수는 다음과 같이 실행 파일 옵션을 매개변수로 받을 수 있습니다. int main(int argc, char *argv[]); 먼저 option이라는 프로젝트를 만들고 main.c 파일을 추가한 뒤 다음 내용을 입력하세요. Win + R을 누른 뒤 cmd.exe를 입력하여 명령 프롬프트를 실행합니다. 그리고 프로젝트 디렉터리의 Debug 디렉터리로 이동한 뒤 다음과 같이 실행합니다(c:\project\option\Debug). option.exe에 Hello, C, Language이라는 옵션을 지정했습니다. 이 상태로 실행을 해보면 실행 파일 이름과 옵션이 그대로 출력됩니다. main 함수에서 첫 번째 매개변수 argc는 옵션의 개수이며 argv는 옵션 문자열의 배열입니다. 옵션은 ..
[eclipse] Java 실행 시 Argument 사용과 Option정의 1. Java Argument Java Application은 main메소드의 인자값으로 String타입의 배열형태로 받도록 되어있습니다. 아래 예제는 Java실행 시, argument를 출력해주는 예제입니다. public class ArgumentExample { public static void main(String[] args) { if(args!=null) { for(int i=0; i
[Intellij] Java 컴파일시 args 세팅하기 1. Edit configuration setting Alt + Shift + F10을 눌러 컴파일하려는 프로젝프 명을 포인팅 한 후, 오른쪽 방향키를 눌러 메뉴를 확장하여 Edit라는 버튼을 클릭합니다. 2. args 입력 위창에 뜨면 빨간색 밑출을 쳐놓은 곳에 원하는 인풋값을 넣어 하단의 run버튼을 클릭하여 실행합니다. [Intellij]자바 컴파일시 args 세팅하기 커맨드라인에서 자바 클래스 파일을 실행하면 실행명령어 뒤에 args를 바로 입력 할 수 있었지만 IntelliJ를 이용해 컴파일을 하며 args를 세팅하려니 당황스러웠습니다. 하지만 언제나 방법은 있는 storyinglass.tistory.com
[JAVA] exe파일 실행, Java에서 cmd 사용하기 MS949를 해야 글자가 안 깨진다. /C는 다음과 같은 옵션이다. (/C옵션) /C 문자열이 지정한 명령어를 수행한 후에 종료합니다. 저 위의 명령어가 String 배열로 입력이 들어가는 것이다. 내부적으로 실행하는 방법은 Runtime Class를 이용하여 별도로 Thread를 이용하여 실행하는 방법이다. 원래 Java의 경우 Java 실행시 Runtime Class 실행하여 1개의 Thread를 생성한다, 내부적으로 Runtime Class를 하나 더 생성하여 도스명령어를 이용한 데이터를 가져온다. 이상이다. 만약 DB 백업 을 원하신다면 아래와 같이 데이터를 넣으면 쉽게 적용할 수있다. cmd[0] = "cmd.exe"; cmd[1] = "/C"; cmd[2] = "mysqldump -u root..
'undefined reference' with 'not declared' In the first case, you declare a function, but don't define it. It compiles properly, but doesn't link because there is no definition for f. Hence the linker error. 선언만 하고 정의는 하지 않았다. 컴파일은 하지만 링킹은 할 수 없다. In the second case, you attempt to call an undeclared symbol. The compiler doesn't know what f is, so it issues an error. It's a different problem from a different stage of the compilation proc..
[BOJ] 2579 계단 오르기 2579번: 계단 오르기 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점 www.acmicpc.net 쓸데없는 조건문을 엄청 만들어서 하고 있었는데 그런 코드는 좋은 코드가 아니라는 걸 다시 한 번 배우고 간다. DP 배열의 조건을 확실히 이해하고 선언해 놓아야한다. #include #define MAX 300 using namespace std; int n, A[MAX+1],DP[MAX+1]; void input(){ cin >> n; for(int i =1 ; i > A[i]; } void solve(){ DP[1] =A[1]; DP[2] =A[1]+A[2]; for(i..
[CUDA] Thread, Block(SM), Grid(GPU) CUDA를 게임 프로젝트에 적용하기 CUDA를 게임 프로젝트에 적용하기 유영천-모여서 각자 코딩하는 모임 https://megayuchi.com tw: @dgtman www.slideshare.net
[C&C++] 구조체 비트 필드 사용하기 이제 구조체를 7비트, 3비트, 1비트로 나눠서 비트 필드를 정의해보겠습니다.▼ 그림 56‑1 구조체 비트 필드 다음 내용을 소스 코드 편집 창에 입력한 뒤 실행해보세요. C 언어 코딩 도장: 56.1 구조체 비트 필드를 만들고 사용하기 56 구조체 비트 필드 사용하기 지금까지 구조체의 멤버는 각 자료형 크기만큼 공간을 차지했습니다. 하지만 구조체 비트 필드를 사용하면 구조체 멤버를 비트 단위로 저장할 수 있습니다. 특히 C dojang.io
[C++] static_cast, reinterpret_cast 형 변환 연산자: static_cast와 reinterpret_cast의 차이 이번에는 간단하게 static_cast와 reinterpret_cast의 차이점에 대하여 알아봅니다. 실제로 이 두가지는 비... blog.naver.com 컴퓨터는 비트 단위로 정보를 저장합니다.1 당연히 정수 5와 실수 5.0은 엄청난 차이가 있습니다. 단순히 변환을 명령했더니 이러한 복잡한 처리를 내부에서 전부 해줍니다. 이것이 static_cast입니다. static_cast는 형 변환을 요청받으면 내부에서 지정된 형 변환 함수를 호출합니다. int와 float사이에도 그러한 함수가 있는 것입니다. 다음 예제를 봅시다. 당연히 형 변환은 일어나지 않습니다. 그도 그럴것이 형 변환 함수도 없으며 어떻게 변환해야되는지 컴파..
[C++] const_cast const_cast(expression) const_cast(대상) const_cast는 포인터(pointer) 또는 참조형(reference)의 상수성(const)를 잠깐 제거해주는데 사용합니다. const_cast는 volatile 키워드를 잠깐 제거해 주는 데에도 사용이 가능합니다. 다른 캐스트 연산자가 하는 형 변환은 불가능 하며 오직 상수성(const)를 제거하는 것만 사용가능 합니다. 또한 다른 캐스트 연산자는 const_cast가 하는 상수성(const) 제거를 하지 못합니다. 함수 포인터에는 사용 불가능합니다. (해봤음;;) > 예제(1) - 포인터(pointer) 상수성(const) 제거 #include using namespace std; int main(void){ char str[]..
[C++] type cast 4가지 종류 static_cast const_cast reinterpret_cast dynamic_cast [C++] const_cast (타입 캐스트 연산자) 안녕하세요. BlockDMask 입니다. 오늘은 C++ 의 네가지 타입 캐스트 연산자 중에 (static_cast, const_cast, reinterpret_cast, dynamic_cast) const_cast 에 대해 알아보겠습니다. > const_cast 에 관한 기본 특.. blockdmask.tistory.com
[Linux] gcc 로 C++ 컴파일 하기 일반적으로 리눅스 환경에선 C 은 gcc 로 컴파일 하고 C++ 은 g++로 컴파일 하게 되죠 그러나, 간혹 여의치 않은 상황에서 gcc 로 C++을 컴파일 할수 밖에 없는 상황에 봉착하는 경우는 -lstdc++ 온션을 붙여주면 됩니다. 가령 gcc hello.cpp -o hello -lstdc++ 그러나, 애지간하면 C++ 은 걍 g++로 컴파일 합시다. 나중에 라이브러리 링크 등에서 복잡한 문제들에 봉착할수 있거든요. gcc 로 C++ 컴파일 하기 gcc 로 C++ 컴파일 하기 일반적으로 리눅스 환경에선 C 은 gcc 로 컴파일 하고 C++ 은 g++로 컴파일 하게 되죠 그러나, 간혹 여의치 않은 상황에서 gcc 로 C++을 컴파일 할수 밖에 없는 상황에 봉착하는 bitsoul.tistory.com
[BOJ] 1107 리모컨 1107번: 리모컨 첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼 www.acmicpc.net 충격과 공포의 문제이다. 엄청 더럽게 if문 많이 해서 풀었는데 전혀 그런식으로 푸는 문제가 아니었다. 브루트 포스로 처음부터 끝까지 하나하나 확인하면서 가는 문제이다. 반례↓ 글 읽기 - [반례모음] 댓글을 작성하려면 로그인해야 합니다. www.acmicpc.net 1555 8 0 1 3 4 5 6 7 9 670 10 9 1 2 3 4 5 6 7 8 9 11 0 9 1 2 3 4 5 6 7 8 9 1 100000 9 0 1 2 3 4 5 6 7..
[C++] 함수를 객체로 (C++ std::function, std::mem_fn, std::bind) 씹어먹는 C ++ - modoocode.com Callable 의 정의 std::function std::mem_fn std::bind 1. Callable Callable 이란, 이름 그대로 나타내듯이 호출(Call) 할 수 있는 모든 것을 의미합니다. 대표적인 예시로 함수를 들 수 있겠지요. 하지만 C++ 에서는 () 를 붙여서 호출할 수 있는 모든 것을 Callable 이라고 정의합니다. 예를 들어서 f 역시 일반적인 함수의 꼴을 하고 있지는 않지만, () 를 통해서 호출할 수 있기에 Callable 이라 할 수 있습니다. 2. std::function C++ 에서는 이러한 Callable 들을 객체의 형태로 보관할 수 있는 std::function 이라는 클래스를 제공합니다. C 에서의 함수 포인..
[C++] 무한대(infinity) [C++] infinite infinite 이미지좀 가져올라고 검색했더니 가수 인피니트가 뜬다....짜증난다..우선 C++에는 무한대 타입이 존재한다. 의 std::numeric::limits::infinity() 이다.하지만 이 메소드는 실수타입에서만 제 velog.io
[C++] 우선순위 큐(Priority Queue), pair<int, int> 내림차순 오름 차순 [C++] STL Priority_Queue Library 기본 명령어 정리 안녕하세요, 여행벌입니다. 오늘은 우선순위큐(Priority Queue)에 대해서 알아보도록 하겠습니다. 1. Priority_Queue(우선순위큐) 란? Priority_Queue는 Queue의 한 종류로 이름 그대로 우선순위에 따라 정렬된 travelbeeee.tistory.com [C++, STL] 우선순위 큐(priority queue) 비교연산자 구현 서론 2020/04/27 - [자료구조와 알고리즘] - [C++, STL] 알고리즘 문제풀이를 위한 우선순위 큐(priority queue) 우선순위 큐는 비교연산자를 통해 자료의 우선순위를 정할 수 있다. 그리고 STL에는 자료를 hydroponicg..
[C++] 2차원 배열 초기화 2차원배열의 모든 원소의 값을 1로 하고 싶은 경우 1)각 원소 직접 지정 int arr[5][5]={{1,1,1,1,1},{1,1,1,1,1},{1,1,1,1,1},{1,1,1,1,1},{1,1,1,1,1}}; 이렇게 int arr[5][5]={{1}}; 하나만 지정하면 나머지는 모두 0이 들어갑니다. 다시 해보니 안되네요... int area[M][N]={{1,0,0,0,0},}; 로 한줄은 해줘야 나머지가 모두 0이 들어갔습니다. 2)std::fill_n 이용 int arr[5][5]; fill_n(arr[0],25,1) fill_n(arr,25,1)은 에러가 납니다. arr, arr[0]의 메모리주소를 확인해보면 값은 같은데... 3)std:fill이용 int arr[5][5]; fill(arr[..
다익스트라(Dijkstra) 알고리즘 23. 다익스트라(Dijkstra) 알고리즘 다익스트라(Dijkstra) 알고리즘은 다이나믹 프로그래밍을 활용한 대표적인 최단 경로(Shortest Path) 탐... blog.naver.com 1. 출발 노드를 설정합니다. 2. 출발 노드를 기준으로 각 노드의 최소 비용을 저장합니다. 3. 방문하지 않은 노드 중에서 가장 비용이 적은 노드를 선택합니다. 4. 해당 노드를 거쳐서 특정한 노드로 가는 경우를 고려하여 최소 비용을 갱신합니다. 5. 위 과정에서 3번 ~ 4번을 반복합니다. 최소 비용을 단순히 선형 탐색으로 찾도록 만들었습니다. 이렇게 작성하는 경우 다익스트라의 시간 복잡도가 O(N^2)으로 형성됩니다. 따라서 최대한 빠르게 작동시켜야 하는 경우 힙 구조를 활용하여 시간 복잡도 O(N * lo..
[BOJ] 2615 오목 2615번: 오목 오목은 바둑판에 검은 바둑알과 흰 바둑알을 교대로 놓아서 겨루는 게임이다. 바둑판에는 19개의 가로줄과 19개의 세로줄이 그려져 있는데 가로줄은 위에서부터 아래로 1번, 2번, ... ,19번의 번호 www.acmicpc.net 반례↓ 글 읽기 - 누가 기침소리를 내었는가? 댓글을 작성하려면 로그인해야 합니다. www.acmicpc.net 틀린 이유 6개 이상일 경우 → 이전 값까지 모두 확인해야 한다. 이전 값이 없을 때만 온전히 5개인지 검사할 수 있다. visit를 쓸 경우 관계 없는 경우의 새로운 케이스에 대해 검사하지 못한다. #include int a[19+2][19+2]; int main() { int i, j; for(i=1; i
[BOJ] 7573 고기잡이 7573번: 고기잡이 한국인의 식단에서 생선은 매우 중요한 단백질 공급원이다. 반면, 지구 온난화로 인한 바닷물의 온도 상승, 그리고 지금까지 마구잡이로 물고기를 잡은 결과로 점점 우리나라의 바다에서 물고 www.acmicpc.net 단순한 방법으로 하면 4중 중첩이 된다. 당연히 시간초과가 난다. 물고기를 기준으로 for문을 돌려야 한다. ▶그물의 크기를 정하고 (sx, sy) 위치를 탐색할 때, 모든 지점을 탐색하면 TLE 발생 위와 같이 (4, 3)에서 그물을 치는 것은 비효율 적입니다. ▶ 어디를 (sx, sy)로 설정하는 것이 좋을까요? 물고기가 존재하는 위치 & 물고기간의 교차점 ※ (2, 3)과 (4, 5)과 주어질 때 두 좌표의 교차점은 (4, 3)과 (2, 5) 입니다. #include ..