반응형

머신 러닝에 대한 내가 갖고 있던 생각은 일단 "어렵다" 이다. 분명 트랜드이고 많은 부분에서 연구하고 공부하는 사람들도 많은데 이상하게 공부하기가 쉽지 않았다. 그렇게 느꼈던 것은 아마도 무엇부터 공부해야 할지 몰랐던것 같다. 그리고 프로그래밍 언어를 주로 공부를 했던 습관때문인지는 몰라도 언어의 기법, 또는 기능을 공부하는것 이외에 이론을 먼저 공부하는게 쉽지 않았다. 

머신러닝, 딥러닝 등등의 내용을 이해하기 위해서는 우선 이게 무엇인지 부터 알아야 하고 각각 사용하는 용어에 대해서도 익숙해질 필요가 있다. 

이책은 머신 러닝 시스템 설계를 하기 위해서 필요한 것들이 무엇인지 단계별로 설명해 주고 있다. 머신러닝이 무엇인지, 기초 적인 배경지식들은 무엇이 필요한지 설명을 해준다. 그리고 데이터를 수집하고 정제하고 모델을 만들고 평가하고 모니터링 하는 부분들에 대해서 전반적인 내용들을 살펴 볼수 있다. 

현재 책의 중간 정도 읽고 있는 시점인데 한가지 염두해둬야 할것이 있다. 이책을 이해하기 위해서는 책 이외에 따로 공부도 필요하다. 기존 머신러닝에 대한 지식이 있다면 괜찮지만 그렇지 않다면 중간중간 나오는 용어들이나 설명들이 이해가 안될 수 있다. 나 또한 그런 부분들이 있어서 인터넷을 검색해보면서 같이 읽어보고 있다. 

ML 을 공부하는 입장에서 단한권의 책으로 모든 것을 이해하고 적용해볼수 있는 수준으로 갈수 없다는 것은 잘 알고 있다. 하지만 이책을 통해서 기본적이고 중요한 요점들을 파악한후 추가적인 공부를 한다면 ML 을 이해하는데 도움이 될수 있을것 같다. 

   "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

728x90
반응형
반응형

현재 conda 를 사용한  python 가상 환경의 버전은 3.8.2 로 되어있다.

이것을 변경하기 위해서는 다음과 같은 절차를 거친다.

1. 설치 가능한 python 버전 확인
conda search python
위 명령어를 사용하면 설치 가능한 python 버전을 확인 할 수 있다.

2. python 설치
conda install python=버전

3. 가상환경 재접속
가상환경을 deactivate 하고 다시 activate 하면 파이썬 버전이 변경되어있다.

 

728x90
반응형

'Development > Python' 카테고리의 다른 글

Pandas 사용  (0) 2023.05.23
NumPy 사용  (0) 2023.05.09
Mac 에서 Conda 설치  (0) 2023.04.05
파이썬 가상 환경 실행 및 VS Code 설정  (0) 2023.03.27
파이썬 문법 : 데코레이터 함수  (0) 2023.03.13
반응형

VS Code 사용하다 보면  Explore 창에 디렉토리가 플렛하게 나오는 것이 불편할 때가 있다.

이렇게 test 디렉토리 하위에 test1 이라는 디렉토리가 1개 만 있을 경우 옆으로 표시된다. 이때에 test 디렉토리에 무언가 생성하려고 하면 test1 디렉토리에 생성이 된다. 

Compact Folders 기능

Settings  에 들어가보면 Compact Folders 라는 설정이 있다.

기본 설정으로는 체크가 되어있다. 저 체크를 해제 하게 되면 디렉토리가 다음과 같이 나온다.

 

728x90
반응형
반응형

Mac 에서 Conda 는 간단히 설치가 가능 하다. .

brew install conda
....
## 설치 완료시
anaconda was successfully installed!

➜  ~ conda -V
zsh: command not found: conda

설치 완료 후에 실행을 해보면 저렇게 not found 가 나올수 있다. 현재 사용중인 터미널에 path 가 입력이 안되어서 저런 현상이 발생한다. 

➜  ~ /usr/local/anaconda3/bin/conda init zsh
no change     /usr/local/anaconda3/condabin/conda
no change     /usr/local/anaconda3/bin/conda
no change     /usr/local/anaconda3/bin/conda-env
no change     /usr/local/anaconda3/bin/activate
no change     /usr/local/anaconda3/bin/deactivate
no change     /usr/local/anaconda3/etc/profile.d/conda.sh
no change     /usr/local/anaconda3/etc/fish/conf.d/conda.fish
no change     /usr/local/anaconda3/shell/condabin/Conda.psm1
modified      /usr/local/anaconda3/shell/condabin/conda-hook.ps1
no change     /usr/local/anaconda3/lib/python3.10/site-packages/xontrib/conda.xsh
no change     /usr/local/anaconda3/etc/profile.d/conda.csh
modified      /Users/test/.zshrc

==> For changes to take effect, close and re-open your current shell. <==

/usr/local/anaconda3/bin 은 conda 가 설치된 위치이다. conda 명령어와 함께 init 현재 사용중인 쉘을 입력해주면 저렇게 뭔가 쭉 나온다. 마지막에 보면 modified /Users~ 가 보인다. .zshrc 파일이 뭔가 수정된것으로 보인다. 한번 확인해보면 다음과 같은 내용들이 추가되어 있다.

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/usr/local/anaconda3/bin/conda' 'shell.zsh' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/usr/local/anaconda3/etc/profile.d/conda.sh" ]; then
        . "/usr/local/anaconda3/etc/profile.d/conda.sh"
    else
        export PATH="/usr/local/anaconda3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda initialize <<<

이렇게 확인한 후 쉘을 닫았다가 다시 열면 정상적으로 명령어들이 동작한다.

➜  ~ conda -V
conda 23.1.0
➜  ~ conda activate
(base) ➜  ~

참고로 현재 사용중인 shell 을 확인하는 방법은 다음과 같다.
echo $SHELL

 

728x90
반응형

'Development > Python' 카테고리의 다른 글

NumPy 사용  (0) 2023.05.09
Conda python 버전 업데이트  (0) 2023.04.15
파이썬 가상 환경 실행 및 VS Code 설정  (0) 2023.03.27
파이썬 문법 : 데코레이터 함수  (0) 2023.03.13
파이썬 문법 : 제너레이터 함수  (0) 2023.03.09
반응형
  • 파이썬 가상 환경 실행 방법
python -m venv 디렉토리명

python 3 부터는 venv 가 포함되어있어서 virtualenv 를 설치 하지 않아도 된다. 위와 같이 실행을 하면 입력한 폴더가 생성이 된다. 가상환경 실행은 폴더 하위에 Script 디렉토리에 있는 activate 를 실행 하면 된다. (mac 인 경우 source ./bin/activate 를 실행한다.)

  • VS Code 설정 방법
    -  Ctrl + Shift + P 입력 (cmd + Shift + P)

       -  가상 환경 선택 또는 새로운 path  선택 (새로운 path 선택시 위에서 생성된 bin 디렉토리 또는 Script 디렉토리에 있는 python 을 선택하면 된다)

 

728x90
반응형
반응형

그동안 리액트를 공부하면서 느꼈던 점을 생각해보면 생각보다 어렵다는 거였다. 컴포넌트를 그리고 재사용 하기 위해서 리액트를 사용하려면 무작정 만들어서 되는것도 아니고 전체적인 구조를 생각해 가면서 만들어야 하기 때문이다. 물론 처음부터 모두 생각하고 만들수 없기 때문에 만들면서 리팩토링을 하는것이 필수이다. 하지만 언어가 갖고 있는 기능만 알고 있다고 해서 해결될 문제는 아니다. 무엇보다도 무언가를 만들어보면서 느낄수 있는 것들이 있기 때문이다.

이런 이유에서 이 책은 리액트를 공부한 사람들에게 프로젝트를 따라 해보면서 기능들을 활용해 볼 수 있는 좋은 참고서가 될 수 있다. (기본적인 지식은 반드시 알고 있어야 한다.)

무언가를 하나 만들려면 하루 아침에 뚝딱 만들어지는 것은 아니다. 먼저 생각해야 할 것들이 있고 만들면서 생각해야 되는 것들이 있다. 그런 모든 과정이 이책에 있는 프로젝트를 따라 만들면서 경험해 볼 수 있다. 공통 기능을 만드는 시점, 비지니스 기능을 만드는 시점등 각각의 단계에서 필요한 기능과 주의 사항들을 알아 볼 수 있다.

이 책에서는 계산기, Todo 리스트, 여행사진 공유앱 이렇게 3가지를 만들게 된다. 3가지밖에 안된다고 생각할 수도 있지만 책 두께를 보면 그런 생각이 안들것이다. ^^;; 900 페이지가 되는 이 책에는 그만큼 많은 내용들이 담겨 있으니 시간을 갖고 천천히 따라해보면서 익히면 리액트 지식을 습득하는데 많은 도움이 될 것이다.

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

728x90
반응형
반응형

겨울 스키 시즌이 끝나고 스키 장비를 어떻게 보관을 할까라는 고민에 빠졌다. 베란다에 보관하기에는 햇빛이 들고 온도차가 많이 나기 때문에 장비가 상해서 보관이 불가능했다. 그리고 창고가 없어서 방에 보관했던 선풍기들이 자리를 많이 차지하는것 같아서 선반이 필요하다는 생각이 들었다. 찾던중 내게 딱 맞는 선반을 찾게 되었다. 

그런 바로 퍼니랙 조립식 철제 선반장이다.

https://smartstore.naver.com/furnirack/products/4690500770?NaPm=ct%3Dlfdfil05%7Cci%3Dcheckout%7Ctr%3Dppc%7Ctrx%3D%7Chk%3Dfe180c35125bc028c936e5000001e6ca113d4a96

 

퍼니랙 W800 다용도실/주방 선반장-조립식 철제 선반장 : 퍼니랙

[퍼니랙] 👨‍🔧 내가 디자인하는 우리집 가구 인테리어 퍼니랙 👩‍🔧

smartstore.naver.com

우선 이 선반을 선택한 이유는 이렇다.
1. 철제 선반임에도 불구하고 디자인이 괜찮았다.(방안에 넣을것이었기 때문에 너무 투박한것은 안예쁘니깐..)
2. 높낮이 조절이 자유롭다. (하단에 선풍기를 넣어야 해서 높이 조절이 가능해야 했다.)
3. 악세사리가 다양하다. 선반이지만 나중에 필요에 따라서 옷장으로도 사용이 가능하고 서랍장도 넣을 수 있어서 활용도가 좋다.

상품은 목요일날 주문을 했는데 아쉽게도 도착을 월요일에 해서 조립해서 완성하는데에는 일주일 정도를 기다려야 했다.(아무래도 조립하면서 소리가 나서 평일 퇴근후 밤에 하기에는 무리였다.)

도착했을때 이렇게 두개로 포장을 해서 왔다. 하나는 기둥을 만드는 부품이고 다른 하나는 선반이다. 선반도 선반이지만 저 기둥을 만드는 프레임이 상당히 무겁다. 처음 들어보고 약간 놀랬다. ^^;;

기둥까지는 사진으로 찍지는 못했지만 포장도 꼼꼼히 잘 되어있고 조립을 위한 고무 망치도 포함되어있다. 설명서도 포함이 되어있긴 하지만 한번 읽어보면 설명서 없이도 조립하는데 어려움은 없었다. 

우선 먼저 기둥의 위, 아래에 상부캡, 하부캡, 조절발을 조립하고 가로 받침대를 넣어주면 바로 세울 수 있다. 이때 주의할 점은 설명서에도 나와있지만 타공 구멍의 상,하 방향을 잘 맞춰야 한다. 

타공구멍 방향이라는 것은 바로 이부분을 말한다. 저 구멍이 넓은쪽이 위로 가야 하고 좁은 쪽이 아래로 가도록 조립해야 한다. 

선반을 벽면에 넣은 모습이다. 고정을 위해서 벽뒤 쪽에 나사를 이용해서 고정이 가능 하지만 바닥에 높이 조절만으로도 충분히 고정이 가능해서 나사를 이용하지는 않았다. 그리고 하단에 선풍기를 넣고 선풍기 높이에 맞춰서 중간 받침대를 설치했다. 

나머지 선반들도 모두 설치한 모습이다. 원래 형태는 중간 선반을 기준으로 아래 하나 위에 하나가 들어가지만 우선 아래는 필요가 없어서 위에 두개를 넣었다. 이런 높낮이 조절이 마음대로 되니 활용도가 높은것 같다.

선반 맨 상단에는 스키 부츠와 헬멧을 넣고 왼쪽 빈 공간에는 스키 플레이트를 넣었다. 선반이 없을 때에는 선풍기 놓고 아무것도 놓을수가 없었는데 선반이 생기니 공간 활용도가 높아졌다. ^^

마지막으로 중간칸에는 우리집 꼬마 영어 책들을 넣었다. 저렇게 넣으니 참 많다 ㅡㅡ; 이미 다 읽은 책들, 그리고 지금 읽는 책들을 같이 놓으니 편하게 꺼내어서 읽을수 있어졌다. 기존에는 다른 책장 하단에 있어서 아무래도 높이가 안맞아 불편했는데 선반 덕분에 좋아졌다. 

나중에는 저 중간 부분에 책 치우고 철제 받침대와 옷걸이봉을 추가해서 간단한 옷걸이로 변경해서 써도 좋을것 같다. 

이렇게 조립식 선반 하나로 그동안 못썼던 공간을 잘 활용하게 되어서 만족스럽다. 현재 있는 오래된 책장들도 이 선반을 이용해서 붙여 넣으면 좋을것 같다는 생각도 들었다. 

 

728x90
반응형
반응형
  • 함수의 앞 뒤 부가적인 기능을 넣어주고 싶을때 사용한다
  • 클로저를 사용해서 구현한다.
  • 데코레이터는 @를 함수위에 적용하여 사용한다
def logger(func):
  def wrapper():
    print("함수시작")
    func()
    print("함수종료")
  return wrapper

@logger
def print_hi():
  print("hi")

print_hi()


# OUTPUT
함수시작
hi
함수종료
  • 매개변수 전달
@logger
def print_hi(name):
    print(name, 'hi')

print_hi("tom")

# OUTPUT
print_hi("tom")
TypeError: logger.<locals>.wrapper() takes 0 positional arguments but 1 was given
      위와 같이 함수에 매개변수를 추가하면 에러가 발생한다. logger 에서 전달 받은 함수를 매개변수 없이 호출을 하려고 해서 발생하는 에러이다. 따라서 데코레이터는 전달받은 함수가 어떤 매개변수를 사용할지 알수 없기 때문에 매개변수와 상관없이 동작을 해야 한다. 그래서 다음과 같이 정의를 해준다. 
def logger(func):
    def wrapper(*args, **kwargs):  # *args, **kwargs 는 전달받은 매개변수
        print("함수시작")
        func(*args, **kwargs)      # *args, **kwargs 전달받은 매개변수로 함수 실행
        print("함수 종료")
    return wrapper

  참고로 *args 는 튜플형태, **kwargs 는 딕셔너리 형태로 매개변수를 변환해서 처리한다. 정확히는 일반 변수는 튜플로, key=value 형태는 딕셔너리로 변환한다.

 

728x90
반응형
반응형
  • 이터러블 객체
    • 순서가 있는 자료형
    • 문자열, 리스트, 튜플, 딕셔너리, range 객체
    • __iter__(), __next__() 메소드가 정의되어있다.
  • 제너레이터 함수
    • 이터레이터를 만드는 함수이다.
    • yield 사용한다
    • 제너레이터 표현식을 사용해서 만들 수 있다.
    • 메모리 사용이 효율적이다.
      • List 같은 경우 결과 값을 메모리에 저장한다.
      • 제너레이터의 경우 식만 저장할뿐 값을 저장 하지 않는다. __next__ 함수가 호출 될 때에 결과값을 만든다
# yield 사용
def gen_func(*args):
  for arg in args:
    yield arg

month = gen_func('1월', '2월', '3월', '4월')

print(month.__next__())   # 1월
print(month.__next__())   # 2월
print(month.__next__())   # 3월
print(month.__next__())   # 4월


# 제너레이터 표현식 -> () 를 사용한다.
double_generator = (i * 2 for i in range(1,10))

for i in double_generator:
  print(i)


# 메모리 차이
import sys

list_data = [i * 3 for i in range(1, 10000+1)]
generator_data = (i * 3 for i in range(1, 10000+1))

print(sys.getsizeof(list_data))       # 85176
print(sys.getsizeof(generator_data))  # 208

 

728x90
반응형

+ Recent posts