Coding

    Debugging learning

    List of factors that might impact the learning phrase: 1. Batch size 2. Learning rate & Optimizer & warm up state 3. Number of demonstrations (the demonstrations are not enough to sufficiently being trained.) 4. Loss is wrong Number of demonstration depending - How much randomized (e.g., domain, object position, pose) - Multi-modal solutions. Memory reduction 1. fp32 -> fp16 How to compare compu..

    [How to code] Coupling and Cohesion

    이 글을 간단하게 번역한 글입니다. Coupling: Software module 끼리 interdependence한 정도 (결합도). High coupling: closely connected and changes in one module may affect other modules. Low coupling: 각자의 모듈이 독립적이고 하나의 모듈에서의 수정이 다른 모듈에 영향을 미치지 않는다. A good software design will have low coupling Cohesion: 모듈에서의 element들이 연관된 정도 (응집도). A good software design will have high cohesion. For example, 단일 책임을 가진 클래스, 다른 클래스에 바로 적용..

    Docker/Linux 환경에서 자주 쓰이는 command 모음

    현재 directory의 존재하는 파일 명시 ls -la 파일/폴더 제거 rm -vrf [파일/폴더명] ssh 연결 ssh [계정이름]@[IP주소] -p [포트번호] 파일 전송: scp/ scp -r [전송하려는 파일/폴더] [도착해야 하는 장소] 화면 안 꺼지게 sudo pmset -c disablesleep 1 현재 위치 (절대 위치) 출력 pwd Docker -container 관리 container 실행 중단 docker stop [container 이름] container 제거 docker rm [container 이름] Docker -폴더 launch NVIDIA GPU GPU 현황 확인 nvidia-smi 진행중인 process kill nvidia-smi로 해당되는 PID확인 sudo ki..

    [Pytorch] permute/transpose/view/reshape/flatten/squeeze

    참고자료1 참고자료2 참고자료3 참고자료4 텐서의 차원 변경 view contiguous하지 않는 함수에서도 작동한다. reshape() ==contiguous().view() reshape 텐서의 차원 교환 transpose contiguous tensor에서 사용할 수 있음 swap only two dimension view 함수를 이용해서 반환된 값은 원본과 data(memory)를 공유하기 때문에 하나만 수정해도 반환 이전의 변수와 이후 변수 모두 수정된다. permute: transpose의 일반화 버전 sway all the dimensions 텐서를 결합 stack cat 텐서의 차원 늘리기 unsqueeze dimension을 늘려주고 그 값은 1로 만듭니다 텐서의 차원 줄이기 squeez..

    [Linux] Useful tools

    tmux (terminal multiplexer) (2022.11.06 작성) github 참고자료1 tmux is a terminal multiplexer. It lets you switch easily between several programs in one terminal, detach them (they keep running in the background) and reattach them to a different terminal. -tmux github "Session", "window", "pane"의 화면을 한번에 볼 수 있는, terminal을 여러개 (multiple)하게 볼 수 있는 프로그램이다. 그럼 여기서 생기는 의문은 "Session", "window", "pane" 이 뭐지?..

    [Tensorflow] Tensorflow 함수 모음

    tf.Variable(tf.random_normal( [tf.cast(hidden.shape[1], tf.int32) , tf.cast(representation.shape[0],tf.int32)]), dtype=dtype, name='w3_T') tf.Variable: 변수 생성 tf.random_normal: Outputs random values from a normal distribution. tf.cast: Casts a tensor to a new type.

    [OOP Paradigm] 파이썬객체지향: Everything in Python is an object (4)

    # 객체지향프로그래밍이란? 앞서 파이썬의 모든 것이 객체라고 정의한 바 있습니다. 우리가 일반적으로 사용했던 숫자나 리스트, 튜플 등 모든 자료형이 어떤 클래스의 인스턴스입니다. 코드로 본 바와 같이 인스턴스들은 특정 클래스에 속해있고 그 클래스들은 특정 속성(Attribute)와 기능(Method)를 가짐을 알 수 있습니다. 클래스들의 속성과 기능을 미리 정의한 부분을 통해 볼 수 있듯이 객체 지향프로그래밍은 클래스를 구성하기 위해 관련된 속성이나 동작을 개별 객체로 묶음으로써 구조화된 프로그램을 구성하는 방법입니다. 예를 들어, 객체는 이름, 나이, 주소와 같은 속성(Attribute)와 걷기,말하기, 호흡하기, 달리기와 같은 행동(Method)을 가진 사람을 나타낼 수 있습니다. 즉, 객체 지향 프..

    [OOP Paradigm] 파이썬객체지향: Everything in Python is an object (3)

    # Everything in Python is an object 2. 함수: Functions are first-class object 일반적인 함수를 통해 함수는 어떤 형태로 정의되는지 살펴보도록 하겠습니다. >>>> def area(h, v): >>>> return h*v >>>> print(type(area)) 일반적인 함수를 이야기하면 함수가 클래스 ‘function’ 에 정의되어 있음을 알 수 있습니다. 파이썬은 함수를 정의할 때 사용자가 정의한 함수 객체를 정의합니다. 이를 “Functions are first-class object” 라 이야기합니다. 다음 예시들을 통해 함수 객체를 어떻게 사용할 수 있는지 보겠습니다. >>>> def yell(text): >>>> return text.up..

    [OOP Paradigm] 파이썬객체지향: Everything in Python is an object (2)

    # Everything in Python is an object 파이썬은 순수 객체 지향 프로그래밍 언어이며 모든 것이 객체(object)로 작동됩니다. 앞서 파이썬의 변수는 단순히 포인터라고 이야기하였습니다. 이는 변수 이름 자체에는 첨부된 type 정보가 없다고 생각할 수 있습니다. 이때문에 파이썬을 type-free 언어라고 생각할 수 있지만 사실이 아닙니다. 다음 예시를 보도록 하겠습니다: >>>> print(type(2)) >>>> print(type(2.3)) >>>> print(type(2+3j)) >>>> print(type("string")) >>>> print(type([])) >>>> print(type({})) >>>> print(type(())) 파이썬에서 클래스 개념의 type ..

    [OOP Paradigm] 파이썬객체지향: Everything in Python is an object (1) Python Variables Are Pointers

    파이썬에서 언급되는 “Everything in Python is an object” 의 의미를 다음 보고서를 통해 이야기하고자 합니다. 위 개념을 파이썬의 Memory Collection 과 Semantics 내용을 포함하여 이야기하고, 이러한 개념이 객체 지향 프로그래밍 (OOP)으로 확장되어 어떻게 활용되는지 설명해보고자 합니다. # Python Variables Are Pointers 파이썬은 등호(=) 기호를 통해 변수를 할당합니다. # 변수 x 에 4 를 할당 x=4 많은 프로그래밍 언어에서 변수를 데이터를 담는 컨테이너(container)나 버킷(bucket)으로 생각합니다. C 언어를 예를 들어 이야기를 해보겠습니다. // C 언어 예시 int x = 4; C 언어에서는 x 라는 “메모리 컨..

    [OOP Paradigm] Object-Oriented Paradigm(OOP) in Python/객체지향프로그래밍 in 파이썬

    코드를 작성할 때 프로그램의 개발과 보수를 용이하게 하거나, 직관적인 코드를 제공하는 등의 여러 요인으로 좋은 코드를 정의하게 된다. 좋은 코드를 정의할 때 언급되는 대표적인 방식인 객체 지향 프로그래밍(Object-Oriented Paradigm)에 대해서 알아보고, 이를 Python에서 적용한 예시를 살펴보자. (사진 출저: GeeksforGeeks, 내용 참고: realPython, programiz) 1. Object-Oriented Paradigm in Python 이 무엇이며, 어떤 면에서 유리한가? 객체 지향 프로그래밍(Object-Oriented Programming, OOP)는 컴퓨터 패러다임 중 하나로, 관련된 속성이나 동작을 개별 객체(object)로 묶음으로써 구조화된 프로그램을 구..

    [Settings] USB를 이용한 Windows - Ubuntu 멀티 부팅

    이 게시글은 Usb를 통한 Windows 환경에 Ubuntu를 실행할 수 있는 기본적인 세팅 과정을 나타냅니다. Usb 준비, Usb를 통한 Ubuntu Desktop 설치를 한글로 번역+개인 경험을 같이 녹여낸 글입니다. (제가 찍은 사진과 더불어 보안 문제로 Ubuntu 사이트에서 직접 제공한 사진들로 구성되어 있습니다.) 1. Overview 부팅 가능한 USB를 통해 다음과 같은 활동을 할 수 있습니다. Ubuntu 설치 및 업그레이드 PC 세부 정보를 만질 필요 없이 Ubuntu Desktop이 사용가능하다. Internet cafe나 빌린 기계에서 Ubuntu를 실행이 가능하다. 이정도 장점이 있고, 설치로 바로 넘어가자. 2. Requirements 필요한 준비물은 4가지이다. 4GB 이상의..

    [백준] 1463번: 1로 만들기(JAVA)

    https://www.acmicpc.net/problem/11726 | keyword: 동적 계획법, 반례에 휘둘리지 말기 ‼️이 문제의 정답 코드는 맨 마지막(Github Gist)에 있습니다. 중간중간의 코드들은 제 생각을 담은 일대기를 작성하였습니다. 백준 시리즈 글은 필자가 생각보다 많은 시간이 걸린 문제들의 생각을 정리해보고자 작성되었습니다. 문제의 링크는 여기를 이용해주세요! 첫번째 생각 이 문제를 딱 보고 음... 쉽겠군 하였다. 하지만 이 문제를 작성하게 된 이유이자, 시간이 많이 걸린 이유인 10의 사례를 보고 그 때부터 이 사례에 집착(?)하게 되었던 것 같다. 10은 10 -> 5 -> 4 -> 2 -> 1의 예시로 4번 들어오는데, 10 -> 9 -> 3 -> 1 의 경우로 3번 만..

    [백준] 1541번: 잃어버린 괄호 (JAVA)

    이 문제 포스팅을 작성한 이유 키워드: Integer Parse / 약간의 동적 계획법 ‼️이 문제의 정답 코드는 맨 마지막(Github Gist)에 있습니다. 중간중간의 코드들은 제 생각을 담은 일대기를 작성하였습니다. 첫번째 생각 맨 처음에 이 문제를 보고 든 생각은, 어떻게 빼는 수를 크게 할까? 였다. 괄호를 넣어서 '-' 부분을 극대화→식을 java 라이브러리로 계산하는 방법 을 생각하여 다음과 같이 코드를 작성하게 되었다. import java.util.*; import java.io.*; import javax.script.ScriptEngineManager; import javax.script.ScriptEngine; public class Main { public static void m..

    [운영체제] 전체 기본 개념 정리

    이 글은 필자가 학교 수업(반효경 교수님의 '운영체제')을 듣고 수업 복습차 전체 정리한 글입니다. 추가하여, 박상수 교수님의 '임베디드 시스템' 과 연계되어 코드를 추가를 몇개 추가합니다. Chapter 1. Introduction to Operating Systems 1. 운영체제(Operating System, OS)란? - 커널: 운영체제의 핵심 부분으로 메모리에 상주하는 부분 - 컴퓨터 하드웨어 바로 위에 설치되어 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층 2. 분류 - 동시작업가능여부: single tasking / Multi-tasking - 사용자의 수: single user / multi user - 처리 방식: batch processing(일괄 처리, 일정량..

    [Algorithms] Sorting정렬 한꺼번에 살펴보기

    이 글은 필자가 학교 강의(이상호 교수님의 "자료구조")를 듣고 복습차 정리한 글입니다. 참고해주세요! 정렬: 물건을 크기 순으로 오름차순/내림차순으로 나열하는 것 ※ 정렬 알고리즘을 통해 파악해야 할 사실은 알고리즘의 특성도 중요하지만 각 알고리즘의 진행 방식에 따른 복잡도, 어떤 상황에서 사용하면 가장 효과적인지를 면밀하게 생각해보는 것이 가장 중요하다고 판단됩니다. 정렬 알고리즘은 6가지 이상이 있지만, 대표적인 6가지로 추려서 보면, 단순하지만 비효율적인 방법(삽입 정렬, 선택 정렬, 버블 정렬)과 복잡하지만 효율적인 방법(퀵정렬, 힙 정렬, 병합 정렬)로 나뉩니다. (배열을 이용한 정렬 구현으로)하나씩 살펴보도록 하겠습니다. 삽입 정렬Insertion Sort 코드확인 앞부터 정렬을 순서대로 하..

    [백준] 10773번: 제로

    백준 10773번: 제로(문제링크) **사실 이 문제를 넣은 이유는 오늘이 포인터를 이용하여 문제를 푼 첫 날이기에 기록하고자 글을 만들게 되었다. ** 문제에서 파악해야 할 핵심요소 및 마인드맵 100,000개의 정수를 어떻게 받아낼 수 있는가? 처음에는 배열을 생각하였지만, 배열은 많은 수를 감당할 수 있는 능력이 되지 않는다. 다른 방법을 찾게 되었다. 쓴수 지우고 넣고 하는 형식은 무엇이 있을까? 주의사항 100,000개의 정수를 감당할 수 있는 메모리가 할당된 배열을 이용한다. int* list = (int*) malloc(sizeof(int)*num); 최근에 쓴 수에 대한 지우고 넣고 하는 방식은 stack스택을 이용하면 가능하다. 준비물: 데이터를 담을 배열(메모리가 할당된), 넣은 위치를..

    [DataStructures] 정적/동적 메모리 할당 간단 개념

    이 글은 학교 강의(이상호 교수님의 '자료구조')를 듣고 공부 목적차원에서 정리한 글입니다. 메모리 할당은 프로그램 자체가 컴퓨터에서 메모리를 할당 받는 것이기에 선언을 하지 않으면 메로리가 할당되지 않아 에러가 뜨는 경우가 발생하여 필수적인 방법입니다. 메모리를 할당받는 방법은 두가지가 있습니다. 1. 정적 메모리 할당 2. 동적 메모리 할당 1. 정적 메모리 할당 이는 메모리의 크기가 프로그램이 시작하기 전에 결정되는 것으로 프로그램의수행 도중에 크기가 변경될 수 없습니다. 가장 대표적인 예시는 변수나 배열의 선언을 들 수 있습니다. 먼저 선언을 하기에 뒤에서 malloc와 같은 함수를 불러서 할당할 필요가 없습니다. ex. int buffer[100]; 아니면 char name[] = "data s..

    [DataStructures] Stack스택

    이 글은 학교 강의(이상호 교수님의 '자료구조')를 듣고 복습과 정리차 작성한 글입니다. 스택(stack ADT스택 추상자료형)이란? 후입선출(LIFO: Last-In-First-Out) - 가장 최근에 들어온 데이터가 가장 먼저 제거되는 형태 나는 '책이 쌓여진 형태'를 바탕으로 암기하였을 때 받아들이기 쉬웠다. 이걸 굳이 왜 쓰는가? 교수님의 말에 따르면, 가장 최근에 들어온 데이터는 가장 따끈따끈한 정보를 가지는 데이터로 많이 쓰이기에 스택의 형태를 가지는 경우가 필요하다고 하셨다. 이러한 용도 외에도 스택의 형태 덕분에 괄호검사, 수식 계산, 미로 탐색할 때 알고리즘으로도 자주 사용된다. 스택에 쓰이는 함수 create(s) ::= 스택 s를 생성한다. is_empty(s) ::= 스택 s가 비어..

    [Basic] 숫자 길이 및 배열 전환 함수 살펴보기 c언어

    자료형 숫자 길이에 따른 범위 정리표 여기서 중요한 int, char 형에 집중하면 char 은 대략 127까지 int형은 5자리 수, long int형으로 가면 10째 자리까지 long long int형으로 가면 19째 자리 수까지 커버가 가능하다. int형 > 배열 to_string(숫자) sprintf(문자열, "%d", 숫자) 배열 > int형 stoi(배열)

    [백준] 2577번: 숫자의 개수

    백준 2755번: 숫자의 개수(문제링크) 문제에서 파악해야 할 핵심요소 및 마인드맵 긴 숫자의 숫자하나하나를 어떻게 받을 것인가? 0~9까지의 숫자를 어떻게 적립시킬 수 있는가? 주의사항 숫자를 char형 배열로 만들어주는 stdio.h의 sprintf 함수를 이용한다. string의 길이를 알려주는 strlen 함수는 string.h를 이용한다. #include #include //strlen을 위한 import int main(void){ int a, b, c; int cnt[10] = { 0 };//0~9 개수를 적립할 리스트 int sum; char temp[100];//긴 숫자를 담을 배열 준비 int i; scanf("%d %d %d", &a, &b, &c); sum = a*b*c; sprin..

    [백준] 8958번: OX퀴즈

    백준 8958번 문제 링크 문제에서 파악해야 할 핵심요소 및 마인드맵 긴 문제를 어떻게 받아올/글자 하나하나 읽어올 것인가? 연속되는 정보는 어떻게 받아올 것인가? 주의사항 string형이 더라도 char[]형식으로 받아온다. char[]길이는 strlen 형식으로 받아온다.(lenof 형식 아님!) + 이럴 때 string.h 포함하기 연속적인 조건 확인하기 : score =1로 세팅후에 조건이 나오면 적립하는 방식 / 원상태로 돌려놓는 방식도 포함한다. #include #include char s[80]; int main(){ int num, score, sum; scanf("%d", &num); for (int i = 0; i < num; i++){ sum = 0; score = 1; scanf("..

    [Basic] 출력 계속 받는 방법 정리

    while문을 이용하여 계속 받게 해도 출력 무한대로 받고 이후에 출력이 없어도 유지된다. 밑 예시로 확인해보자. 1. python import sys for line in sys.stdin: #여기부터 코드 작성 2. C언어 #include int main(void){ while(1){ scanf(~~~); #여기서 부터 코드 작성 } return 0; } 3. JAVA import java.io.BufferedReader; import java.io.InputStreamReader; public class Main { static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); public static void mai..

    [백준]2920번: 음계 c언어

    백준 2920번 음계 문제링크 문제에서 파악해야 할 핵심요소 및 마인드맵 어떻게 오름차순, 내림차순, 아무것도 아닌 것으로 파악할 것인가? 주의사항 여러개 for문을 쓰는 것이 답만 맞으면 가능한 일이다. a,b,c의 경우로 나뉜다면 c는 a도 아닌, b도 아닌 경우로 파악하고 문제를 풀면 쉽다.(c는 mixed와 같은 나머지 경우로) 여부를 파악하는 경우에 a=0,1이나 True, false와 같은 이진법 개념을 가져와서 적용하는 것이 유리하다 #include int input[10]; int main(void) { int a = 1, b = 1; for (int i = 0; i < 8; i++) {//입력받기 scanf("%d", &input[i]); } for (int i = 0; i < 8; i+..

    [백준] 3052번: 나머지 c++

    백준 3052 나머지 문제 링크 이 문제를 위해 파악해야 할 핵심요소 및 마인드맵 배열을 어떻게 활용할 것인가? 배열 안에 서로 다른 값과 같은 값을 구분할 수 있는 방법을 알고 있는가? 주의해야할 점/여러 풀이 방법 및 아이디어 배열에 들어갈 수 있는 숫자 자체가 한정적인 경우 정해진 크기의 배열을 생성, 그 안에 숫자에 맞게 넣는 알고리즘 배열을 빈 상태 시작, 거기에 하나씩 넣고 중복을 확인하는 것 t; remain[t % 42] = 1; } int count = 0; for (int i = 0; i < 42; ++i) { count += remain[i]; } cout

    [백준] 1110번: 더하기 사이클 c언어

    백준 1110번 더하기 사이클 문제 링크 문제에서 파악해야 할 핵심요소 및 마인드맵 int 자료형의 십, 일의 자리 숫자는 어떻게 구할 수 있는가? String형으로 변환 후 [0],[1]의 자리로 구하고, int형으로 변환 (채택) /10, %10로 각각 구해내기 조건이 이루어질 때까지 이루어지는 사이클 do~while문 + while문에 조건 적기 while문 + while문에 조건 적기 while문(1) + while문 내부에 조건 + break 적기

    [DataStructures]Tree트리에 대해서 알아보자

    트리 순서 트리Ordered Tree 무순서 트리Unordered Tree 검색 알고리즘 너비 우선 탐색 : 낮은 레벨에서 시작해 왼쪽에서 오른쪽 방향으로 검색하고 그 다음 레벨에서 검색 깊이 우선 탐색 : 리프까지 내려가면서 검색하는 것을 우선순위로 하는 탐색 방법 전위 순회Preorder 중위 순회Inorder 후위 순회Postorder

    [백준] 2908 상수 C언어

    백준 2908 문제 (링크 여기서 확인하세요!) 풀이 1) 숫자로 받기 - 백/십/일의 자리를 각각 받아서 숫자 완성 - 크기 비교 #include int main() { int x, y, x2, y2; int f[2], m[2], l[2], i; scanf("%d %d", &x, &y); for (i = 0; i < 2; i++) { f[0] = x / 100; m[0] = (x % 100) / 10; l[0] = (x % 100) % 10; x2 = ((l[0] * 100) + (m[0] * 10) + f[0]); f[1] = y / 100; m[1] = (y % 100) / 10; l[1] = (y % 100) % 10; y2 = ((l[1] * 100) + (m[1] * 10) + f[1]); }..

    [DataStructure]Array배열/List리스트(ArrayList배열리스트, LinkedList연결리스트)

    Array배열 ex) int array[6], String Array[12] 좋은 ) Index가 존재하여 값 조회에 용이 나쁘 ) 개설시 크기를 지정해주어야 하며 변동도 불가능, 하나의 원소를 제거하면 그 제거된 공간은 빈 공간으로 유지되어, 후에 그 공간을 제거하기 위해 뒤에 있는 하나의 원소를 배열 중간에 추가해도 뒤에 내용들을 뒤로 옮기기 위한 까다로운 절차가 필요하다. List리스트 : 데이터를 일렬로 늘어놓은 자료구조 리스트는 인터페이스이고, 밑으로 ArrayList, LinkedList를 포함하고 있다. ArrayList배열리스트 내부에 있는 배열에 데이터를 저장하는 구조 Index로 데이터 항목을 찾는 일이 많을 경우 유용 크기가 고정된 Array와 달리 크기가 유동적인 측면에 유용 Arr..

    [DataStructure/Algorithm] DataStructure자료구조/Algorithm알고리즘 정리

    목차를 정리했습니다! 누르시면 해당 글로 들어갈 수 있습니다. Data Structure자료구조 기본적인 분류 Array배열 | ArrayList배열리스트 Hash Table해시 테이블 Stack스택 List리스트 Linear List선형 리스트 Linked List연결 리스트 Doubly Linked List이중 연결 리스트 Tree트리 | DFS, BFS Binary Tree이진 트리 Graph그래프 | 최단거리 Algorithm알고리즘: Sort/Search/etc. 기본으로 배우는 알고리즘들 Factorial | 팩토리얼 Fibonacci | 피보나치 수 Hanoi Tower | 하노이 탑 Sorting Algorithm정렬 알고리즘 | 동영상 정리본 Bubble-sort | 버블 정렬 Selec..