728x90

sudo apt-get install libgtk2.0-dev

위 명령어로 libgtk2.0-dev를 설치하려고 하는데,

 

unable to correct problems you have held broken packages 에러가 발생하면서 설치가 되지 않았다.

 

이런 패키시 의존성 문제도 잘 이해 안되고, 이전에 aptitude를 사용한 적이 있다보니

 

aptitude로 무작정 설치해보았다.

 

잠깐 구글링 해보니 아래 링크에서도 aptitude를 사용하라고 하더라

askubuntu.com/questions/223237/unable-to-correct-problems-you-have-held-broken-packages

 

 

 

설치도 잘 됬고, dpkg로 libgtk2.0-dev가 깔린걸 확인할 수 있었다.

 

 

 

 

잠깐 그래서 검색하다보니 아래의 링크에서 apt, dpkg, aptitude 패키지 관리 툴에 대해서 잘 정리해둬서 복사해 가져왔다.

 

golmong.tistory.com/222tpholic.com/xe/5102649

 

----------------------------- 펌 내용 -----------------------------------

이번 시간에는 패키지 관리 툴들에 대해 조금~ 배워보는 시간을 갖도록 하겠습니다 ^^

우분투는 아는 사람은 알다시피... 데비안을 그 기반으로 하고 있습니다. 고로 프로그램의 설치는 .deb파일을 통해 패키지 형태로 이루어 집니다.

이런 .deb파일이나 패키지의 관리에 사용되는 툴에 대해 이해하고 이 툴들을 보다 유용하게 사용할 수 있기를 바라며 이번 강좌를  시작합니다

 

 



우분투를 설치한 후, 시스템의 사용목적이나 필요에 따라서 .deb 파일을 추가 설치 하거나 삭제 할 수 있다.
.deb 확장자 파일은 데비안 패키지 파일로써 우분투가 데비안 기반으로 한 시스템이라 소프트웨어 설치에 .deb파일을 사용하는 것이다.

이러한 패키지 들은 패키지 툴을 이용하여 설치하게 되는데 패키지 툴에는 apt, dpkg, aptitude 가 있다. 그중 몇가지를 설명하자면...

APT 는 온라인 리포지토리에서 패키지를 다운로드받고 설치하는데 사용 된다( : 예> apt-get 패키지명) 이때 보통 로컬환경(오프라인)상에서도 사용할 수 있지만 정상적으로 사용하기 위해서는 온라인 환경에서 사용하여야 한다.

dpkg 는 Cd룸이나 다른 디스크장치에 있는 .deb 파일을 제어하는 경우에 일반적으로 사용되며, dpkg명령어는 시스템 소프트웨어에 대한 설정이나 설치 및 정보를 얻는데 사용되는 옵션을 가진다
(예:> dpkg -c 데비안패키지 – 패키지가 설치한 파일 목록보기)

 패키지 툴에 대한 부분은 나중에 보다 자세하게 살펴보도록 하겠다.

우분투를 설치한 후 터미널 창을 열어 다음을 입력해보자

$ apt-cache stats

그러면 다음과 같은 결과를 얻을 수 있을 것이다.

전체 꾸러미 이름 : 33052 (1322k)
일반 꾸러미: 25280
순수 가상 꾸러미: 703
단일 가상 꾸러미: 1688
혼합 가상 꾸러미: 237
빠짐: 5144
개별 버전 전체: 30120 (1566k)
...

위 에서 보듯이 전체 30000여 개가 넘는 소프트웨 패키지를 사용할 수 있다.(공짜!로 쓸 수 있는 프로그램이 이리 많다는게 놀랍지 아니한가?)


그럼 본론으로 들어가서 각 패키지 툴을 이용한 소프트웨어 관리에 대해 배워보는 시간을 갖자.


1.APT
실질적으로 APT는 dpkg와 함께 동작한다. 하지만, 필요한 소프트웨어의 검색, 다운로드, 설치, 업그레이드, 검사 등 대부분의 패키지 관리작업을 APT단독으로 가능하다.
그럼 일반적 사용법을살펴보자

*주의: 다음 명령압에 sudo가 붙는데 sudo의 경우 우분투에서 사용하는 명령어에 관리자 권한을 주는 명령이다. 이는 우분투의 경우 기본적으로 root로 로그인을 막아 놓앗고 또 계정을 활성화 시켜놓지 않고 sudo 명령으로 root권한을 실행할 수 있도록만 만들어 놓았다. 그러므로써, 안전성을 확보하고 필요시 쉽게 root권한에 접근할 수 있도록 하고 있다. - 덫붙여 우분투를 사용할 때 꼭 필요한 경우가 아니면 root계정을 활성화하지 않는게 보안에 좋다. 다르게 말해 설치후 추가적으로root 패스워드를 지정해주지 않는게  보안에 좋다는 것이다.

sudo apt-get update
:  /etc/apt/sources.list를 참조로 사용할 수 있는 패키지 DB를 업데이트 한다.

apt-cache search 키워드
: 패키지 데이터베이스 중 주어진 키워드를 대소문자 구분 없이 검색하여 키워드를 포함하는 패키지명과 해당 설명을 출력한다.

sudo apt-get install 패키지명
: 패키지명을 데이터베이스에서 찾아보고 해당패키지를 다운로드 받아 설치한다. 이때, 패키지의 신뢰성을 gpg키를 사용 검증한다.

sudo apt-get -d install 패키지명
: 패키지를 설치는 하지 않고 /var/cache/apt/archives/ 디랙토리에 다운로드 받는다.

apt-cache show 패키지명
: 주어진 패키지명에 해당하는 소프트웨어에 대한 정보를 본다.

sudo apt-get upgrade
: 설치 되어있는 모든 프로그램 패키지에 대한 최신 업데이트를 검사한 후, 다운로드 받아 설치한다.

sudo apt-get dist-upgrade
: 전체 시스템을 새로운 버젼으로 업그레이드 한다. 이때 패키지 삭제도 실시된다.
단, 일반적으로 사용되는 업그레이드 방법은 아님!

sudo apt-get autoclean
: 불안전하게 다운로드된 패키지나 오래된 패키지의 삭제.

sudo apt-get clean
: 디스크 공간 확보를 위해 /var/cache/apt/archives/ 에 캐쉬된 모든 패키지 삭제

sudo apt-get 옵션 remove 패키지명
: 해당 패키지와 그 설정파일을 삭제한다. ( 옵션에 --purge 를 넣으면 설정파일을 재외하고 삭제. 옵션없을시 전부 삭제)

sudo apt-get -f install
: 깨어진 패키지를 위해 정상여부를 확인

apt-config -V
: 설치된 APT툴의 버전을 출력

sudo apt-key list
: APT가 알고 있는 gpg키 목록의 출력

apt-cache stats
: 설치된 모든 패키지에 대한 상태정보를 출력

apt-cache depends
: 패키지가 설치되어 있는지 여부에 관계 없이 그 의존성을 출력한다.

apt-cache pkgnames
: 시스템에 설치되어 있는 모든 패키지 목록을 보여준다.



이상으로 APT사용법을 대충 익혀보았다. 이제 dpkg를 알아보자


2.dpkg
이 툴의 경우 APT보다는 낮은 수준에서 작업이 수행된다. APT는 우분투의 소프트웨어를 관리하기 위해 내부적으로 이 dpkg를 이용한다. 보통 APT명령 만으로 충분하지만... 시스템에 있는 특정 파일이 어떤 패키지에 포함되는지 등의 확인 작업을 수행하기위해 dpkg 명령이 필요한 것이다.

dpkg -C  .deb파일
: 주어진 .deb파일이 설치한 파일의 목록을 본다.(해당 파일이 있는 곳에서 실행하거나 파일명앞에 절대 경로를 붙여준다.)

dpkg -I  .deb파일
: 주어진 .deb파일에 대한 정보를 본다.

dpkg -P  패키지명
: 패키지에 대한 정보를 보여준다.

dpkg -S  파일명
: 파일명 또는 경로가 포함된 패키지들을 검색한다.

dpkg -l
: 설치된 패키지 목록을 보여준다.

dpkg -L  패키지명
: 이 패키지로부터 설치된 모든 파일목록을 볼수 있다.

dpkg -s  패키지명
: 주어진 패키지의 상태를 본다

sudo dpkg -i  .deb파일
: 주어진 파일을 설치한다.

sudo dpkg -r  패키지명
: 시스템에서 해당 패키지를 상제한다. (단, 삭제시 파일들은 남겨둔다.)

sudo dpkg -P  패키지명
: 해당 패키지와 해당 패키지의 설정파일을 모두 삭제한다.

sudo dpkg -x  .deb파일  디랙토리
: 파일에 포함되어있는 파일들을 지정된 디렉토리에 풀어놓는다. 단, 주의 할점은 이명령시 해당 디렉토리를 초기화 시켜버리므로 주의하여야 한다!


3. aptitude
앞에서 배운 dpkg와 APT의 경우 제대로 사용하기 위해서는 좀더 많은 지식을 요구한다. 그에 비하여 aptitude의 경우 주요 패키지 작업 과정을 자동화하여 가능한 쉽게 작업할 수 있도록 해주므로 보다 쉽게 할 수 있다. 고로 보다 많이 사용하게 될 것이... 옳지만... 아직은 인터넷 상에서 APT나 dpkg를 사용한 패키지 설치 정보가 많다는 점에서... 장래에 많이 사용하게 될 듯하다^^

sudo aptitude
: 실행시 curses인터패이스로 시작된다. Ctrl+t를 사용하면 메뉴에 접근할 수 있으며, q키로 프로그램을 종료 시킬 수 있다.

aptitude help
: 도움말 보기

aptitude search 키워드
: 해당 키워드와 일치하는 패키지를 보여준다.

sudo aptitude update
: APT리포지트로들로부터 사용 가능한 패키지를 업데이트 한다.

sudo aptitude upgrade
: 모든 패키지를 최신으로 업그레이드 한다.

aptitude show 패키지명
: 해당 패키지의 설치 여부에 관계 없이 주어진 패키지에 대한 정보를 보여준다.

sudo aptitude download 패키지명
: 해당 패키지를 설치하지는 않고 다운로드만 받는다

sudo aptitude clean
: /var/cache/apt/archives디렉토리에 다운로드되어 있는 모든 .deb파일을 삭제한다.

sudo aptitude autoclean
: /var/cache/apt/archives디렉토리에 있는 오래된 .deb파일을 전부 삭제한다.

sudo aptitude install 패키지명
: 해당 패키지를 시스템에 설치한다.

sudo aptitude remove 패키지명
: 시스템으로부터 주어진 패키지를 삭제 한다.

sudo aptitude dist-upgrade
: 모든 패키지를 가장 최신 버전으로 업그레이드 시킨다. 이때, 필요한 경우 패키지를 삭제하거나 추가 한다.






이상으로 패키지에 대해서 수박 겉할기 식으로 나마 알아 보았고, 특히 이들 패키지를 설치하거나 관리하기 위한 몇가지 방법을 알아보았다.

참고로, 위 내용 다 넘기고 요즘 우분투의 경우 '프로그램 > 추가/제거' 메뉴나 '시스템 > 관리 > 스넵틱스관리자' 에서 쉽게 패키지를 선택하고 설치하거나 삭제 할 수 있다. 아니면 .deb파일을 받아 마우스로 클릭만 해주면 자동으로 패키지 관리자가 실행되어 설치 하게 되어있다.
참으로 편리한 세상이다...

하지만, 위 내용을 알고 있어야... 보다 깊은 단계로 나아갈 수 있고 또 보다 세부적인 관리, 추가, 삭제가 가능하기에 알아 두는게 좋다고 본다.






참고: 위에 나열된 명령어들은 터미널 환경에서 사용되는 command입니다.
참고2: 빠른 작성을 위해 경어체를 생략했습니다. 이해해주시길 바랍니다 ^^;;


조금이나마 우분투 사용에 도움이 되길 바라며 다음에 뵙겠습니다.
전 국민이 우분투등의 리눅스를 자신의 OS로 쓰는 그날까지....

300x250
728x90

Improving Model Performance (C3W1L01)

- 머신러닝 전략 : 머신러닝 알고리즘의 구성

- 빠르고 효율적인 머신러닝 모델을 만드는 방법 -> 전략을 알아보자.

 

동기부여를 위한 예시

- 고양이 분류 작업에서 90% 정확도로 사용하는데 충분한 성능을 얻었다. 어떻게 더 향상시킬수 있을까?

- 신경망을 향상시키기 위한 방법들

 1. 더 많은 학습데이터를 사용하자.

 2. 다양한 훈련 셋을 모아보자 : 다양한 자세의 고양이 이미지나 다른 종류의 고양이

 3. 경사하강법으로 더 길게 학습해보자

 4. 경사 하강대신에 아담 최적화기를 사용해보자

 5. 신경망을 더 키워보거나 줄여보자

 6. 드롭 아웃을 해보자

 7. L2 규제를 추가해보자

 8. 신경망 아키텍처를 변경해보자 ex. 활성화 함수, 은닉층 유닛 개수

=> 길게 학습한다고 해도 더이상 성능 향상이 이뤄지지 않을때도 있다. 위와 같은 방법들을 시도해 볼 수 있음.

 

 

 

 

300x250
728x90

Building Blocks of a Deep Neural Network (C1W4L05)

순전파와 역전파 함수

- l layer를 중심으로 살펴보자. w^[l], b^[l]

- 순전파 : 입력 a^[l-1], 출력 a^[l], z^[l] = w^[l] a^[l-1] + b^[l], a^[l] = g^[l](z^[l]).

  * z^[l]은 캐싱한다.(역전파때 사용하게 임시 저장함.)

- 역전파 : input da^[l], cache z^[l],   -> output : da^[l-1], dw^[l], db^[l]

=> 역전파 계산시 이전 레이어 da^[l]와 순전파때 캐싱한 z^[l]로 w,b, a에 대한 그라디언트들을 계산한다.

- 입력부터 출력까지 순전파, 역전파 연산 과정을 블록으로 보자.

* da^[0]의 경우 w나 b의 그라디언트, 미분계수를 계산하는데 필요없음.

* 그라디언트 계산에 w, b 도 필요하므로 같이 캐싱하자.

 

 

 

 

 

300x250
728x90

Why Deep Representations? (C1W4L04)

- 왜 심층 신경망이 잘 동작하는지 알아보자

 

심층 표현을 이해하기

- 얼굴 인식, 감지 시스템 구축 시 심층 신경망이 할수 있는 일을 알아보자

- 첫번째 레이어는 특징/에지 검출기 역활을 함. 아래의 그림에서 20개의 은닉층을 시각화 한 결과들을 보여주고 있다.

- 검출된 에지들을 모아 얼굴의 일부분을 찾아낼수/감지해낼 수 있다.

- 서로 다른 얼굴 일부분들을 모아 다양한 얼굴들을 구분할 수 있게 됨.

 

- 스피치 인식 시스템을 만든다고 해보자

- 신경망의 첫번째 레이어에서는 오디오의 저수준 특징들을 찾아낼 것임.

- 이러한 저수진 특징들을 모아 기본 소리 단위들을 만들어냄 -> 단어들을 인식하고 -> 문장을 인지하게 됨.

- 깊어질수록 단순한 표현에서 더욱 복잡한 표현들로 섞이게 됨.

* 사람의 뇌도 에지 단위부터 인식해서 사람의 얼굴을 구분할 수 있음.

회로이론과 딥러닝

- 왜 심층 신경망이 잘 동작하는가에 대해서 회로 이론에서 나옴.

- 회로 이론에서는 서로 다른 회로들을 조합해서 어떤 함수 역활을 수행함.

- L 레이어 작지만(은닉 유닛이 적다) 깊은 심층 신경망에 대한 함수를 얕은 신경망으로 계산하고자 한다면 지수적으로 훨씬 많은 은닉 유닛들이 필요로함.

- 모든 입력에 대한 베타적 논리합을 구하는 함수 구현시, 심층으로 구현한다면 O(log n) 복잡도를 가지나, 심층으로 구현하지 못하고 얕게 구현한다면 모든 경우의 수를 나열해야해서 은닉층이 지수적으로 증가함.

=> 회로 이론을 통해서도 깊게 쌓을수록 더 계산하기 쉽다.

 

 

 

300x250
728x90

Getting Matrix Dimensions Right (C1W4L03)

파라미터 w와 b

- 심층 신경망 구현시 행렬 차원을 잘 확인 해야 한다. 직접 적어가면서 확인해 보자

- L = 5

- z^1 = w^1 x + b^1

- n^[0] = 2, n^[1] = 3, n^[2] = 5, n^[3] = 4, n^[4] = 2, n^[5] = 1

- z^1's shape = (3, 1) = (n^[1], 1)

- x's shape = (2, 1) = (n^[0], 1)

 => w^1's shape = (3, 2) = (n^[1], n^[0])

 => w^l's shape = (n^[l], n^[l-1]) 

- w^3's shape = (4, 5) = (n^[3], n^[2])

 

- bias

 b^[1]'s shape = (3, 1) = z^[1]

 b^[l]'s shape = z^[l]

 

 

벡터화 구현

- w, dw, b, db의 차원은 동일하나 x와 z, a는 변함.

- 단일 샘플에서 z^[l], a^[l] : (n^[l], 1)

- 전체 셋에선 Z^[l], A[l] : (n^[l], m)

- 입력 X = (n^[0], m)

- 심층 신경망 구현시 차원 부분을 놓치다가 버그 발생할 수 있으니 조심하자.

 

 

 

 

 

300x250
728x90

Forward Propagation in a Deep Network (C1W4L02)

심층 신경망에서 순전파 연산

- 첫번째 레이어 연산 

  z1 = w1x + b1

  a1 = g1(z1) = g1(w1x.+ b1)

- 두번째 레이어의 연산

  z2 = w2a1 + b2

  a2 = g2(z2)

- 위는 단일 훈련 샘플에 대한 연산 과정, 전체 훈련 샘플(데이터셋)에 대해 벡터화는 어떻게 구현될까

 Z1 = w1X + b1

 A1 = g1(Z1)

 Z2 = w2A1 + b1

 A2 = g2(Z2)

 ...

- 가능한 반복문을 사용하지 않는것이 좋으나 각각 훈련 샘플에 대해서는 벡터화가 가능하나 각 계층별로는 반복문으로 연산할 수 밖에 없음.

 

 

 

 

 

 

 

300x250
728x90

Deep L-Layer Neural Network (C1W4L01)

심층 신경망이란 무엇일까?

- 아래의 그림에는 로지스틱회귀, 은닉층이 1개(2층), 2개(3층), 5개(6층)인 신경망

- 로지스틱 회귀 모델은 얕은 모델(1층 신경망)이지만, 6층 신경망은 비교적 깊다.

심층 신경망 표기법

- 아래의 그림은 4층 신경망

- L = 4, n^[l] = 해당 레이어의 유닛개수 (ex : n^[0] = n_x = 3, n^[1] = 5, n^[3] = 3)

- a^[l] = 해당 레이어의 활성 결과

 

 

 

 

300x250
728x90

Gradient Descent For Neural Networks (C1W3L09)

- 경사 하강을 동작시키는데 필요한 식에 대해서 알아보자.

 

신경망에서의 경사 하강법

- 파라미터로 각 층의 가중치 행렬과 편향이 있다. w1, b1, w2, b2

- 입력 n0, 은닉층 n1, 출력 n2(하나의 출력값)

- 비용함수 (이진 분류를 하는 경우로 고려) : J(w1, b1, w2, b2) = 1/m L(예측치, 실제치)

 * 손실함수는 하나의 샘플에 대한 예측과 실제치의 차이 평가

- 경사 하강하기

  1. 예측치 계산

  2. 그라디언트 계산

    dw1 = dJ/dw1,    db1 = dJ/db1,  . . . .

  3. 학습 파라미터 갱신 

    w1 = w1 - alpha * dw1 . . .

  4. 반복

 

미분계수 계산 공식

- 우선 순전파 계산 공식

  A1 = g1(z1) = g1(w1x1 + b1)

  A2 = g2(w2A1 + b2)

- 미분 계수 계산, 역전파 단계

  아래의 그림 참조

 

 

 

300x250
728x90

 

Explanation For Vectorized Implementation (C1W3L05)

벡터화 구현 정리하기

- 1, 2, 3번째 샘플들에 대한 첫번째 레이어의 활성 결과들을 구해보자.

- 첫번째 레이어의 편향들은 정리를 위해서 깔끔하게 하기위해서 0으로.

- 첫번째 레이어의 가중치 행렬과 평행하게 쌓은 샘플 데이터의 행렬 곱 연산으로 한번에 Z를 구할 수 있다.

여러 훈련 샘플을 이용한 벡터화 연산 정리

- 벡터화를 통해서 좌측 상단의 반복문을, 행렬곱 연산으로 바꾸어 빠르게 처리가 가능해짐.

 

300x250
728x90

Vectorizing Across Multiple Examples (C1W3L04)

- 여러 훈련 샘플을 벡터화 하여 한번에 처리하기

- 지난 시간에는 하나의 샘플에 대해 신경망 출력을 구하는 과정을 보았으나 이번에는 훈련 셋 전체를 한번에 하는 과정을보자.

- 벡터화처리하지 않는다면 모든 훈련 샘플에 대해서 반복문을 통해서 계산하여야 함.

- 길이가 n_x인 벡터 x^i를 수평 방향으로 쌓아 n_x x m 크기의 훈련셋 X를 준비함.

- 가중치 행렬과 훈련셋 X를 점곱 -> +편향 -> 시그모이드를 적용하여 활성 출력을 구한다.

- A의 행은 #번째 은닉 유닛의 결과, 열은 #번째 훈련 샘플에 대한 결과

 

 

300x250

+ Recent posts