분류 전체보기
[네트워크 프로그래밍/C] 네트워크 프로그래밍과 소켓의 이해
네트워크 프로그래밍과 소켓에 대한 매우 간단한 이해 네트워크로 연결되어 있는 서로 다른 두 컴퓨터가 데이터를 주고받을 수 있도록 하는 것이 네트워크 프로그래밍입니다. 네트워크 프로그래밍은 소켓 프로그래밍이라고도 합니다. 그런데 왜 소켓이라는 단어를 사용했을까요? 우리는 전력망으로부터 전기를 공급받기 위해서 소켓을 꽂습니다. 즉, 가전기기의 소켓은 전력망으로의 연결에 사용됩니다. 마찬가지로 멀리 떨어져있는 컴퓨터와 데이터를 송수신하려면 인터넷이라는 네트워크 망에 연결해야 합니다. 그리고 프로그래밍의 소켓은 네트워크 망의 연결에 사용되는 도구입니다. 이렇듯 연결이라는 의미가 담겨있어서 소켓이라는 표현을 사용합니다. 그리고 그 의미를 조금 더 확장해서 소켓은 네트워크를 통한 두 컴퓨터의 연결을 의미하기도 합니..
[머신 러닝] RNN과 CNN을 사용해 시퀀스 처리하기
미래를 예측하는 것은 우리가 늘 하는 일입니다. 이번 포스트에서는 미래를 어느 정도 예측할 수 있는 네트워크인 순환 신경망을 알아보겠습니다. 이 신경망은 시계열 데이터를 분석해서 주식가격 같은 것을 예측해 언제 사고팔지 알려줄 수 있습니다. 일반적으로 이 신경망은 지금까지 봤던 모든 네트워크처럼 고정 길이 입력이 아닌 임의 길이를 가진 시퀀스를 다룰 수 있습니다. 예를 들어, 문장, 문서, 오디오 샘플을 입력으로 받을 수 있고, 자동 번역, 스피치 투 텍스트같은 자연어 처리(NLP)에 매우 유용합니다. 순환 뉴런과 순환 층 지금까지는 활성화 신호가 입력층에서 출력층으로 한 방향으로만 흐르는 피드포워드 신경망에 초점을 맞추었습니다. 순환 신경망은 피드포워드 신경망과 매우 비슷하지만 뒤쪽으로 순환하는 연결도..
[이것저것] 구글 코랩 사용법
구글 코랩이란? Google Colaboratory는, 구글에서 만든 딥러닝 환경 제공 서비스로, 구글코랩이라 불립니다. 이것의 장점은 다음과 같은 것들이 있습니다. 딥러닝 개발을 위한 라이브러리가 이미 설치 고가인 GPU를 저렴하게, 또는 무료로 사용 가능 GitHub 등과의 연동을 통해 자유롭게 소스를 올리고 가져올수 있는 개발 환경 제공 코랩에서 제공되는 GPU 사용하기 GPU를 사용하기 위해서는 런타임 -> 런타임 유형 변경을 클릭하고, 하드웨어 가속기를 None에서 GPU로 바꿔주면 됩니다. 런타임 연결 끊기지 않게 하기 구글 코랩은 무료 사용자에게 하루 최대 12시간, 유료 사용자에게 하루 최대 24시간의 이용 시간을 제공하지만, 90분동안 interaction이 없으면 긴 학습을 다 수행하지..
[머신 러닝] 합성곱 신경망을 사용한 컴퓨터 비전
합성곱 신경망(CNN)은 대뇌의 시각 피질 연구에서 시작되었고 1980년대부터 이미지 인식 분야에 사용됐습니다. CNN은 이미지 검색 서비스, 자율주행 자동차, 영상 자동 분류 시스템 등에 큰 기여를 했습니다. 또한 CNN은 시각 분야에 국한되지 않고 음성 인식이나 자연어 처리(NLP) 같은 다른 작업에도 많이 사용됩니다. 그러나 이번 포스트에서는 시각적 애플리케이션에 초점을 맞추겠습니다. 합성곱 층과 풀링 층부터 시작해서 하나하나 알아보겠습니다. 합성곱 층 합성곱 층은 CNN에서 가장 중요한 요소입니다. 첫 번째 합성곱 층의 뉴런은 입력 이미지의 모든 픽셀에 연결되는 것이 아니라 합성곱 층 뉴런의 수용장 안에 있는 픽셀에만 연결됩니다. 두 번째 합성곱 층에 있는 각 뉴런은 첫 번째 층의 작은 사각 영역..
[머신 러닝] 텐서플로를 사용한 사용자 정의 모델과 훈련
사용자 정의 모델과 훈련 알고리즘 가장 간단하고 많이 사용하는 사용자 정의 손실 함수를 만들어보겠습니다. 사용자 정의 손실 함수 회귀 모델을 훈련하는 데 훈련 세트에 잡음 데이터가 조금 있을 때, 이상치를 제거하거나 고쳐서 데이터셋을 수정할 수 있지만, 비효율적이고 잡음이 여전히 있을 수 있습니다. 이럴 때 평균 제곱 오차를 쓰면 큰 오차에 너무 과한 벌칙을 가해서 정확하지 않은 모델이 만들어질 것이고, 평균 절댓값 오차는 이상치에 관대해서 훈련이 수렴되기까지 식나이 걸리고 모델이 정밀하지 않을 것입니다. 이런 경우 후버 손실을 사용하면 좋습니다. 후버 손실은 아직 케라스 공식 API에서 지원하지 않습니다. tf.keras에서는 지원하기는 하지만, (keras.losses.Huber 클래스를 사용하면 됩..
[머신 러닝] 머신러닝을 위한 텐서플로
텐서플로 훑어보기 텐서플로는 강력한 수치 계산용 라이브러리입니다. 특히 대규모 머신러닝에 잘 맞도록 튜닝되어 있습니다. 텐서플로가 제공하는 것들을 간단히 요약하면 아래와 같습니다. 핵심 구조는 넘파이와 매우 비슷하지만 GPU를 지원합니다. (여러 장치와 서버에 대해서) 분산 컴퓨팅을 지원합니다. 일종의 JIT(just-in-time) 컴파일러를 포함합니다. 속도를 높이고 메모리 사용량을 줄이기 위해 계산을 최적화합니다. 이를 위해 파이썬 함수에서 계산 그래프를 추출한 다음 최적화하고 효율적으로 실행합니다. 계산 그래프는 플랫폼에 중립적인 포맷으로 내보낼 수 있으므로 한 환경에서 텐서플로 모델을 훈련하고 다른 환경에서 실행할 수 있습니다. 텐서플로는 자동 미분 기능과 RMSProp, Nadam과 같은 고성..
[머신 러닝] 심층 신경망 훈련하기
고해상도 이미지에서 수백 종류의 물체를 감지하는 것처럼 아주 복잡한 문제를 다뤄야 한다면 수백 개의 뉴런으로 구성된 10개 이상의 층을 수십만 개의 가중치로 연결해 훨씬 더 깊은 심층 신경망을 훈련해야 할 것입니다. 심층 신경망 훈련은 쉽지 않습니다. 훈련 중 다음과 같은 문제를 맞닥뜨릴 수 있습니다. 까다로운 그레이디언트 소실 또는 그레이디언트 폭주 문제에 직면할 수 있습니다. (신경망의 아래쪽으로 갈수록 그레이디언트가 점점 더 작아지거나 커지는 현상입니다.) 대규모 신경망을 위한 훈련 데이터가 충분하지 않거나 레이블을 만드는 작업에 비용이 많이 들 수 있습니다. 훈련이 극단적으로 느려질 수 있습니다. 모델이 너무 복잡해 과대적합될 위험이 큽니다. 특히 훈련 샘플이 충분하지 않거나 잡음이 많은 경우에 ..
[PDF 변환기 (GUI)] PDF 변환기 만들어보기
동기 저는 알바로 이도의 집현전이라는 학원에서 코딩 선생님을 하고 있는데, 이걸 할 때 강의자료를 ppt로 만든 후 학생들에게 pdf로 줘야 할 일이 많았습니다. 그런데 ppt를 서너개씩 pdf로 바꾸려고 했더니 너무 귀찮았습니다. 그래서 이런 걸 프로그램으로 만들어보면 어떨까? 라는 생각이 들어서 만들어보기로 했습니다. 과정 GUI를 위한 PyQt5 공부 위키독스의 PyQt5-Tutorial을 한 번 쭉 읽었습니다. 파이썬이 파이썬을 해서 그런지 어려울 것이 없었습니다. 그냥 이미 다 만들어져있는걸 가져와서 쓰기만 하면 돼서 너무 편하게 구성했습니다. 프로그램 제목은 pdf 변환기로 하였고, 제 블로그의 아이콘을 프로그램의 아이콘으로 등록해줬습니다. 위치와 크기를 적절하게 설정해줬고, 버튼을 세 개 추..