728x90
728x90
KDT 인공지능 과정 - 4주차 DAY 2 진행 과정에서 발생하는 이슈를 해결한 방법을 작성한 글 입니다.

 

AWS 가입을 완료하고 인스턴스 생성 시

사용자의 환경이 Windows 일지라도 AMILinux 계열로 사용하도록 한다.
(프레임워크 호환 등의 이유로 서버는 Linux 쪽을 많이 사용한다고 합니다. - 멘토님 설명)

인스턴스 유형은 프리 티어 사용 가능한 t2.micro로 선택했다.

인스턴스 생성 후 내려받은 키 페어(.pem) 파일은 C:\Users\{사용자 이름}\.ssh 경로로 이동시킨다.

 

Tip. 인스턴스의 주소가 변경되는 걸 방지하기 위해 탄력적 IP를 할당받았다.

탄력적 IP 메뉴에 들어가 오른쪽 위의 탄력적 IP 주소 할당을 클릭한다.

생성한 인스턴스의 ID를 검색하여 입력하고 완료한다.

 

 

명령 프롬프트(cmd)를 관리자 권한으로 실행한다.

키 페어 파일(.pem)이 있는 경로로 이동한 후 인스턴스에 연결한다.
위 사진은 AWS 연결이 정상적으로 된 경우다.

VS Code에서 Remote-SSHAWS 연결할 때 연결이 되지 않는 경우
명령 프롬프트(cmd)를 관리자 권한으로 실행하여 아래 명령어를 입력한다.

code C:\Users\{사용자 이름}\.ssh\config

VS Code가 실행되고 빈 config 파일이 생성되는데, 아래와 같이 내용을 작성하면 된다.

  • Host : 호스트 명칭 (임의의 이름)
  • HostName : 인스턴스 DNS
  • User : SSH 사용자
  • IdentityFile : AWS 키 페어 파일(.pem) 위치

작성한 config 파일을 저장한 후 다시 Remote-SSHAWS 연결을 하면 제대로 연결된다.

git cloneinstall 진행 시 AWS 연결 끊김 현상이 나타나는 경우가 있는데,
이때 AWS 연결을 종료하고 다시 연결한 다음 뒤 순서인 kdt-ai-aws 폴더를 먼저 오픈한다.
( 제 경우에는 연결 종료하고 인스턴스 재부팅까지 해야 다시 연결됐습니다. 😭 )

kdt-ai-aws 폴더가 열리면 requirements.txt 파일을 클릭한다.

내 경우에 install 시 문제가 됐던 건 torch==1.6 부분이다.
VS Code에서 계속 AWS 연결이 끊겨서 cmd 창에서 진행했을 때 아래와 같은 에러가 발생했다.

ERROR: THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE.
If you have updated the package versions, please update the hashes. Otherwise, examine the package contents carefully; someone may have tampered with them.

이 부분은 아직 정확한 해결 방법을 찾지 못했다.

조언받은 대로 최신 버전인 1.8.1로 변경한 후 VS Code에서 시도해 보았으나
설치 중에 AWS 연결이 끊기는 현상이 똑같이 발생한다. 😱

임시방편으로 해당 구문을 삭제한 후 install 하면 연결 끊김 없이 진행된다.

728x90

728x90

텐서 (tensor)

  • 스칼라, 벡터, 행렬을 아우르는 개념
  • 숫자가 늘어설 수 있는 방향이 $k$개면 $k-$텐서
    • $0-$텐서: 스칼라
    • $1-$텐서: 벡터
    • $2-$텐서: 행렬
  • $T$의 각 요소 $\mathrm{p}_{(i, j)}$가 벡터라면, $T$는 $3-$텐서
    $$T=\begin{bmatrix}
    \mathrm{p}_{(1, 1)} & \mathrm{p}_{(1, 2)} & \mathrm{p}_{(1, 3)} & \mathrm{p}_{(1, 4)} \\
    \mathrm{p}_{(2, 1)} & \mathrm{p}_{(2, 2)} & \mathrm{p}_{(2, 3)} & \mathrm{p}_{(2, 4)} \\
    \mathrm{p}_{(3, 1)} & \mathrm{p}_{(3, 2)} & \mathrm{p}_{(3, 3)} & \mathrm{p}_{(3, 4)} \\
    \mathrm{p}_{(4, 1)} & \mathrm{p}_{(4, 2)} & \mathrm{p}_{(4, 3)} & \mathrm{p}_{(4, 4)}
    \end{bmatrix}$$
  • $3-$텐서의 대표적인 예: 컬러 영상
    • $3-$벡터이면 RGB 영상, $4-$벡터이면 RGBA 영상

 

선형조합 (linear combination)

  • $A\mathrm{x}$는 행렬 $A$가 가지고 있는 열벡터의 선형조합
    • 선형대수에서는 벡터들에 대한 가중치의 합을 선형조합이라고 부름
      $$A\mathrm{x}=\begin{bmatrix}
      a_{11} & a_{12} & \cdots & a_{1n} \\
      a_{21} & a_{22} & \cdots & a_{2n} \\
      \vdots & \vdots & \quad & \vdots \\
      \vdots & \vdots & \quad & \vdots \\
      a_{m1} & a_{m2} & \cdots & a_{mn}
      \end{bmatrix} \begin{bmatrix}
      x_{1} \\ x_{2} \\ \vdots \\ x_{n}
      \end{bmatrix}=\begin{bmatrix}
      \mathrm{a}_{1} & \mathrm{a}_{2} & \cdots & \mathrm{a}_{n}
      \end{bmatrix} \begin{bmatrix}
      x_{1} \\ x_{2} \\ \vdots x_{n}
      \end{bmatrix} = x_{1} \mathrm{a}_{1} + x_{2} \mathrm{a}_{2} + \cdots + x_{n} \mathrm{a}_{n} $$
  • $A\mathrm{x}$의 결과는 행렬 $A$가 가지고 있는 열벡터의 선형조합
    • 선형시스템 $A\mathrm{x}=\mathrm{b}$를 선형조합 관점에서 보면,
      • 행렬 $A$의 열벡터를 가중치 합으로 선형조합할 때 벡터 $\mathrm{b}$를 만들 수 있는 가중치 조합이 존재한다면,
      • 선형시스템 $A\mathrm{x}=\mathrm{b}$의 해 존재
      • 그 해는 가중치 $x_{i}$들로 구성된 $\mathrm{x}$

 

열공간 (Column Space)

  • 행렬 $A$의 열벡터들에 대한 가능한 모든 선형조합의 결과를 모아 집합으로 구성
  • Consistent Linear System
    • 선형시스템 $A\mathrm{x}=b$가 해를 가지면(consistent), 다음을 만족한다.
      $$\mathrm{b} \in \mathrm{col}(A)$$
  • Inconsistent Linear System
    • 선형시스템 $A\mathrm{x}=\mathrm{b}$가 해가 없으면(inconsistent), 다음을 만족한다.
      $$\mathrm{b} \notin \mathrm{col}(A)$$

 

출처: 프로그래머스 스쿨 4강: 행렬연산과 선형조합
728x90

'KDT AI 2nd (Grepp)' 카테고리의 다른 글

[TIL] DAY 12 - 코딩테스트  (0) 2021.04.30
[TIL] DAY 9 - LU 분해(LU decomposition)  (0) 2021.04.27
[TIL] DAY 8 - 선형대수(linear algebra)  (0) 2021.04.26
728x90

LU 분해 (LU decomposition)

  • 주어진 행렬을 아래의 형태를 가지는 두 행렬의 곱으로 나누는 행렬 분해(matrix decomposition)
    • L: lower triangular matrix(하삼각행렬)
    • U: upper triangular matrix(상삼각행렬)
  • LU 분해를 이용해 $Ax=b$ 문제를 아래와 같이 나타내면
    • $Ax=b\Rightarrow (LU)x=b\Rightarrow L(Ux)=b$
      $\quad \quad \quad \Rightarrow Ly=b, ($단$, Ux=y)$
  • LU 분해는 가우스 소거법의 forward elimination(전방소거법)과 의미가 거의 같음
  • LU 분해의 활용 이유
    • 수치적 안정성
      • 선형 시스템 $Ax=b$의 해를 역행렬 $A^{-1}$를 이용하여 구하는 것보다 안정적
    • $b$가 자주 업데이트되는 경우
      • 선형 시스템 $Ax=b$에서 행렬 $A$는 고정되어 있고 $b$가 자주 변하는 경우
        행렬 $A$를 미리 분해해 두면 $b$가 업데이트될 때마다 해 $x$를 실시간으로 구할 수 있음

 

출처: 프로그래머스 스쿨 3강: LU분해
728x90
728x90

선형대수(linear algebra)

  • 어떤 선형 시스템 문제라도 정형적인 방법으로 표현하고 해결하는 방법을 배우는 게 목표
  • Linear System(선형 시스템)과 Linear Equation(선형 방정식)의 예시
    • $2\times3$ linear system
      • $3x+y+z=4$
      • $x-2y-z=1$
    • $1\times2$ linear system
      • $2x+y=3$
    • non-linear equation
      • $sinx+y=2$
    • non-linear equation
      • $3x+y^3=2$
  • Linear System(선형 시스템)의 대수적 표현
    • 다음 선형 시스템을 $Ax=b$로 표현
      • $3x_1+x_2+x_3=4$
      • $x_1-2x_2-x_3=1$
    • $\begin{bmatrix}
      3 & 1 & 1 \\ 1 & -2 & -1
      \end{bmatrix}
      \begin{bmatrix}
      x_1 \\ x_2 \\ x_3
      \end{bmatrix}=
      \begin{bmatrix}
      4 \\ 1
      \end{bmatrix}$
  • $Ax=b$로부터 Linear System(선형 시스템) 표현
    • 다음 $Ax=b$로부터 연립일차방정식 형태의 선형 시스템을 표현
      • $\begin{bmatrix}
        -1 & 2 & -1 & 0 & 0 \\
        0 & -1 & 2 & -1 & 0 \\
        0 & 0 & -1 & 2 & -1
        \end{bmatrix}
        \begin{bmatrix}
        x_1 \\ x_2 \\ x_3 \\ x_4 \\ x_5
        \end{bmatrix}=
        \begin{bmatrix}
        3 \\ 2 \\ 5
        \end{bmatrix}$
    • $-x_1+2x_2-x_3=3$
    • $-x_2+2x_3-x_4=2$
    • $-x_3+2x_4-x_5=5$
  • $m\times n$ 선형 시스템의 $Ax=b$ 표현을 정리하면
    • 식은 행, 행은 식 (linear equation $\leftrightarrow$ row)
    • $m$은 linear equation(선형 방정식)의 개수
    • $n$은 unknown(미지수)의 개수
    • $A$는 $m\times n$ 행렬
    • $x$는 $n-$벡터
    • $b$는 $m-$벡터

 

출처: 프로그래머스 스쿨 1강: 선형시스템
728x90

'KDT AI 2nd (Grepp)' 카테고리의 다른 글

[TIL] DAY 9 - LU 분해(LU decomposition)  (0) 2021.04.27
[TIL] DAY 7 - 코딩테스트  (0) 2021.04.25
[TIL] DAY 6 - 코딩테스트  (0) 2021.04.24

728x90

힙 (Heaps)

  • 이진 트리의 한 종류 - 이진 힙 (binary heap)
    • 루트(root) 노드가 언제나 최댓값 또는 최솟값
      • 최대 힙(max heap), 최소 힙(min heap)
    • 완전 이진 트리

 

출처: 프로그래머스 스쿨 22강: 힙(Heaps)
728x90

'KDT AI 2nd (Grepp)' 카테고리의 다른 글

[TIL] DAY 6 - 코딩테스트  (0) 2021.04.24
[TIL] DAY 4 - 트리(Tree)  (0) 2021.04.22
[TIL] DAY 3 - 스택(Stack), 큐(Queue)  (0) 2021.04.21
728x90

트리 (Trees)

  • 정점(node)과 간선(edge)을 이용하여 데이터의 배치 형태를 추상화한 자료 구조
    • 루트(Root) 노드: 가장 꼭대기에 있는 노드
    • 리프(Leaf) 노드: 더 가지를 치지 않는 노드
    • 내부(Internal) 노드: 루트도 리프도 아닌 노드
  • 노드의 수준 (Level)
    • level 0(root node)부터 시작
    • 간선의 수와 동일
  • 트리의 높이 (Height)
    • 최대 수준(level) + 1
    • 깊이(depth)와 동일
  • 노드의 차수 (Degree)
    • 자식(child)의 수와 동일
    • 리프 노드는 degree가 0

 

이진 트리 (Binary Tree)

  • 모든 노드의 차수(degree)가 2 이하인 트리
  • 재귀적으로 정의할 수 있음
    • 빈 트리(empty tree)이거나
    • 루트 노드 + 왼쪽 서브 트리 + 오른쪽 서브 트리
      • 단, 이때 왼쪽과 오른쪽 서브 트리 또한 이진 트리

 

포화 이진 트리 (Full Binary Tree)

  • 모든 레벨에서 노드들이 모두 채워져 있는 이진 트리
    • 높이가 k이고 노드의 개수가 2^k - 1인 이진 트리

 

완전 이진 트리(Complete Binary Tree)

  • 높이 k인 완전 이진 트리
    • 레벨 k - 2까지는 모든 노드가 2개의 자식을 가진 포화 이진 트리
    • 레벨 k - 1에서는 왼쪽부터 노드가 차례로 채워져 있는 이진 트리

 

출처: 프로그래머스 스쿨 17강: 트리(Trees)

 

이진 탐색 트리 (Binary Search Trees)

  • 모든 노드에 대해서
    • 왼쪽 서브 트리에 있는 데이터는 모두 현재 노드의 값보다 작고
    • 오른쪽 서브 트리에 있는 데이터는 모두 현재 노드의 값보다 큰
  • 성질을 만족하는 이진 트리
    • 중복되는 데이터 원소는 없는 것으로 가정
  • 이진 탐색과의 비교
    • 장점: 데이터 원소의 추가, 삭제가 용이
    • 단점: 공간 소요가 큼, O(log n)의 탐색 복잡도를 가지나 항상 그런 것은 아님

 

출처: 프로그래머스 스쿨 20강: 이진 탐색 트리(Binary Search Trees)
728x90

'KDT AI 2nd (Grepp)' 카테고리의 다른 글

[TIL] DAY 5 - 힙(Heap)  (0) 2021.04.23
[TIL] DAY 3 - 스택(Stack), 큐(Queue)  (0) 2021.04.21
[TIL] DAY 2 - 탐색(Search), Big-O Notation  (0) 2021.04.20
728x90

중위 표기법(Infix Notation)

  • 연산자가 피연산자들의 사이에 위치
    • (A + B) * (C + D)

 

후위 표기법(Postfix Notation)

  • 연산자가 피연산자들의 뒤에 위치
    • A B + C D + *

 

출처: 프로그래머스 스쿨 12강: 스택의 응용 - 수식의 후위 표기법 (Postfix Notation)

 

환형 큐 (Circular Queues)

  • 정해진 개수의 저장 공간을 돌려가며 사용
  • 큐가 가득 차면 더는 원소를 넣을 수 없음
    • 큐의 길이를 기억하고 있어야!

 

출처: 프로그래머스 스쿨 15강: 환형 큐(Circular Queues)

 

우선순위 큐 (Priority Queues)

  • FIFO(First-In First-Out) 방식을 따르지 않음
    • 원소들의 우선순위에 따라 큐에서 빠져나옴
  • 다음과 같은 두 가지 방식으로 접근 가능
    • enqueue 할 때 우선순위 순서를 유지
      • 이 방법이 조금 더 유리!
    • dequeue 할 때 우선순위 높은 것을 선택
  • 우선순위 큐의 구현
    • 선형 배열 이용
    • 연결 리스트 이용
      • 중간에 원소를 삽입하는 데 더 유용!

 

출처: 프로그래머스 스쿨 16강: 우선순위 큐(Priority Queues)
728x90

'KDT AI 2nd (Grepp)' 카테고리의 다른 글

[TIL] DAY 4 - 트리(Tree)  (0) 2021.04.22
[TIL] DAY 2 - 탐색(Search), Big-O Notation  (0) 2021.04.20
[TIL] DAY 1 - 정렬(Sort)  (0) 2021.04.20
728x90