Popular

Recent

  • [FCM] Firebase Cloud Messaging Vanilla JS + FastAPI에 적용하기

    [FCM] Firebase Cloud Messaging Vanilla JS + FastAPI에 적용하기

    FCM 설정공식 예제에서는 Node JS 기준으로 설명되어 있음https://firebase.google.com/docs/cloud-messaging/js/client?hl=ko&_gl=1*16582yh*_up*MQ..*_ga*MTk1Nzk3ODc5Mi4xNzEzMjI3MTcy*_ga_CW55HF8NVT*MTcxMzIyNzE3Mi4xLjAuMTcxMzIyNzE3Mi4wLjAuMA..#web-modular-apiVanilla JS 환경에서 하는 법 정리 자바스크립트 Firebase 클라우드 메시징 클라이언트 앱 설정Google I/O 2023에서 Firebase의 주요 소식을 확인하세요. 자세히 알아보기 의견 보내기 자바스크립트 Firebase 클라우드 메시징 클라이언트 앱 설정 컬렉션을 사용해 정리하기 ..

  • [라이트 딥러닝] n. Backpropagation 수식 풀이 및 검증

    [라이트 딥러닝] n. Backpropagation 수식 풀이 및 검증

    출처: https://mattmazur.com/2015/03/17/a-step-by-step-backpropagation-example/ A Step by Step Backpropagation Example Background Backpropagation is a common method for training a neural network. There is no shortage of papers online that attempt to explain how backpropagation works, but few that include an example… mattmazur.com feed forward 계산 1. h1 구하기 $$net_{h1} = 0.05 * 0.15 + 0.1 * 0.2 + 0.35..

  • [MPC] 4. Optimal Control(2) - Taylor Series 적용, Algebraic Riccati Equation(ARE) 구하기

    LQR에 적용 $$V^{*}(x(t), t) = \underset{u[t, t+\Delta t]}{min} \{ \Delta t \cdot l[x(t + \alpha \Delta t), u(t + \alpha \Delta t), t + \alpha \Delta t] + V^{*}(x(t + \Delta t), t+\Delta t) \}$$ 이 식에서 $V^{*}(x(t + \Delta t), t+\Delta t)$ 부분을 위 Taylor Series로 x와 t에 대해서 정리해보자. $x = (x(t), t), v = \Delta t$ 라고 생각하자. 정리하면 아래와 같다. $$V^{*}(x + v) = V^{*}(x) + f'(x)v + f(x)v' + \frac 12 f''(x)v^{2}+ \frac1..

  • [MPC] 4. Optimal Control(1) - LQR과 Taylor Series(테일러 급수)

    optimal control 기초 - LQR(Linear Quadratic Regulator) LQR이 기초라서 요걸로 system : $\dot x = f(x, u, t), x(t_{0}) = x_{0}$ cost function : $$V(x(t_{0}), u, t_{0}) = \int_{t_{0}}^{T} l[x(\tau), u(\tau), \tau]d\tau + m(x(T))$$ 위 cost function을 최소화하는 입력 $u^{*}(t), t_{0}\le t \le T$ 찾기 -> optimal control의 목적 principle of optimality 에 따라 한 해가 최적이면 sub problem의 해도 최적이 된다. $t_{0} < t < t_{1} < T$ 로 $t_{1}$ 추가..

  • [MPC] 3. 상태(state)와 출력(output) 예측해보기

    Input / Output 정리 $N_p$ : 예측하려는 미래 출력 수 $N_c$ : 예측하려는 미래 제어입력 수 경로 추적의 경우, $N_p$개 점을 tracking 하기 위한 $N_c$개 제어 명령... Control Input $\Delta u(k), \Delta u(k+1), \Delta u(k+2), \cdots, \Delta u(k + N_{c} - 1)$ Output $y(k), y(k+1), \cdots, y(k+N_{p})$ $y(k) = Cx(k)$ 이므로 $y(k+1) = Cx(k+1), y(k+2) = Cx(k+2), \cdots$ 로 표현 가능 따라서 예측 state $x(k+1), x(k+2), \cdots, x(k+N_{p})$를 구하면 됨 State variable 구하기 $..

  • [MPC] 2. 상태 공간 방정식 유도

    MPC 상태 공간 방정식 유도 상태공강 방정식 + LTI(Linear TimeINvariant, 선형 시간 불변 시스템)의 경우 => Continuous-time state-space model 상태 방정식 : $$\bar{x} = Ax + Bu$$ 출력 방정식 : $$y = Cx$$ MPC는 discrete 한 환경 => Discrete-time state-space model 상태 방정식 : $$x(k+1) = A_{d}x(k) + B_{d}u(k)$$ 출력 방정식 : $$y(k) = C_{d}x(k)$$ MPC 기본 모델은 Discrete-time aumented state-space model 상태 변수 대신 상태 변수의 변화량 $\Delta x$ 사용 상태 방정식 $${x(k+1) - x(k) ..

  • [MPC] 1. Model Predictive Control Intro

    [MPC] 1. Model Predictive Control Intro

    유튜브 https://www.youtube.com/watch?v=zU9DxmNZ1ng&list=PLSAJDR2d_AUtkWiO_U-p-4VpnXGIorrO-&index=1 블로그 https://sunggoo.tistory.com/65 위 자료를 기반으로 공부한 내용을 가볍게 정리하려고 합니다. 수식 증명이 많겠고, 그 뒤로는 목적에 따라 논문이나 코드 구현을 보면서 추가해보겠습니다. MPC(Model Predictive Control)의 컨셉 기기 상태 변화(dynamics) + 주변 환경 요소 => cost function 제어공학 비선형 / 비볼록(Non-linear, Non-convex) 대상 공부하면서 느끼기에는 강화학습의 향기가 좀 있음 Flow k-1 일 때의 상태 변수를 기반으로 k+1 ~ ..

  • [etc] Logout 후 뒤로 가기 방지 - BF Cache

    문제 logout을 한 뒤에 로그인 권한이 필요한 페이지로 뒤로 가기를 눌렀을 때, 데이터가 그대로 노출되는 문제 보안상의 결함으로 수정해야하는 경우 원인 브라우저에서 관리하는 BF Cache(Back-Forward Cache) 웹 페이지를 방문하면 해당 페이지의 css/html/javascript/image 등 모든 리소스를 캐시에 저장 뒤로가기 / 앞으로 가기 버튼을 누르면 서버에 다시 요청하지 않고 캐시 리소스 활용해서 로딩 로그아웃 이후에도 BF Cache가 남아있기 때문에 다시 페이지가 보일 수 있음 해결 방법(Fast API 기준) Jinja Template response 사용 로그인 해야 이용할 수 있는 페이지에 접속 요청을 보내면 라우터에서 access token 확인 권한이 있는 경우 ..

  • [Math] Mathematics for Machine Learning 2. Linear Algebra

    [Math] Mathematics for Machine Learning 2. Linear Algebra

    근래에 정말이지 수학 공부의 필요성을 느껴서 MML 이라는 머신러닝 수학의 바이블 같은 책으로 공부를 시작했는데... 일단 영어고(!), 용어가 너무 많고(!), 내용도 어려워서 아주 애를 먹고 있다. 어찌저찌 이해했다고 생각했는데 연습문제를 보니까 또 이야~ 모르겠고 난리다... 답안지를 봐도 이해가 어려운 부분이 많아서 꼼꼼하게 가이드 따라 두세번 풀어봐야 이해가 되지 싶다. 근데 너무 어렵다 ㅎㅋ... 선형대수 강의를 수강했었는데도 내가 들었던 선형대수 강의의 범위보다 더 넓은 듯 하다. 아무튼 아래 링크는 참고한 사이트 등. 한국어 번역 해주신 준별님 정말 감사합니다... 비교하며 보고 있습니다... 교재 - pdf 무료 공개(https://mml-book.github.io/book/mml-boo..

  • 2023년 회고

    새해를 맞이한만큼 새로운 마음으로, 과거를 발판삼아 나아가자는 의미에서 회고로 시작을 해보려고 합니다. 2023년은 모순적이게도 도전과 안정의 한 해였습니다. 저는 무수한 도전 속에서 삶의 흥미를 되찾고 안정을 얻는 사람인지라 2023년도의 수많은 새로운 도전들이 이전에 개인적인 이유로 불안정했던 마음을 추스리는데 도움이 되었습니다. 3월에 현직장에서 근무를 시작했습니다. 감사하게도 지금 이곳에서 너무나 많은 것들을 배우고, 경험하고, 성장하고 있습니다. 제가 12월까지 10개월간 근무하며 새롭게 도전해서 성과를 내본 것들은 아래와 같습니다. 관련 사항을 공부해서 정리한 블로그를 함께 첨부합니다. - YOLO 기반 object detection [Model Review] YOLOv5 + Roboflow ..

  • [Docker + ELK] Docker ELK를 사용해서 PostgreSQL DB 모니터링 하기

    [Docker + ELK] Docker ELK를 사용해서 PostgreSQL DB 모니터링 하기

    이번 포스팅에서는 이전에 elasticsearch, kibana, logstash를 별도로 실행하여 PostgreSQL DB를 모니터링했던 것을 Docker을 통해서 구현해본다. 로컬 환경에서 elk를 구성했던 포스트는 아래 링크에서 확인할 수 있다. '🐥 Web/❔ Back-end | etc.' 카테고리의 글 목록 호락호락하지 않은 개발자가 되어보자 dnai-deny.tistory.com Docker을 사용해서 배포하면 명령어 하나로 쉽게 다른 사람의 개발환경, 버전, 설정을 복사해서 시스템을 구축할 수 있으므로, 다소 준비단계가 복잡한 ELK stack을 보다 간편하게 사용하기 위해 공부해서 구현해보기로 결정하였다. 사전 작업이 꼼꼼하게 들어가야하지만 제대로 알아두면 다음에도 할 수 있을테니까...👀..

  • [Protocol] XKNX를 활용한 KNXnet/IP 데이터 통신하기

    [Protocol] XKNX를 활용한 KNXnet/IP 데이터 통신하기

    ETS를 이용해서 device의 group address가 전부 설정된 이후 read/write 하는 것이 목표 1. knx 객체 정의 from xknx import XKNX from xknx.io import ConnectionConfig, ConnectionType aysnc def main(): xknx = XKNX( connection_config=ConnectionConfig( gateway_ip="knx net/ip address", gateway_port=3671, connection_type=ConnectionType.ROUTING, ), ) router를 사용하는 경우(EX. ABB ips) ConnectionType을 Routing으로, TUNNELING도 설정 가능 device들이 이..

  • [Protocol] KNX Overview

    [Protocol] KNX Overview

    KNX https://support.knx.org/ 빌딩 자동화를 위해 표존화된 통신 프로토콜 커뮤니케이션 매체 : 트위스터 페어 / 전력선 / 무선 지원 버트 토폴로지 : 중앙 컨트롤러 필요 정보 구조 : 텔레그램 기반 통신 그룹 주소 지정 : 그룹 주소 사용해서 장치 통신 버스 전원 공급 장치 : 버스 라인에서 전원 공급받음 구성 및 프로그래밍 : ETS(Engineering Tool Software) 사용 KNX python open source library GitHub - XKNX/xknx: XKNX - A KNX library written in Python XKNX - A KNX library written in Python. Contribute to XKNX/xknx development ..

  • [SciChart] Vanilla Javascript에서 SciChart 사용하기

    [SciChart] Vanilla Javascript에서 SciChart 사용하기

    Javascript에서 SciChart 사용하기 script를 가져오고 미리 필요한 것들 정의하기 ... const { SciChartSurface, NumericAxis, DateTimeNumericAxis, FastLineRenderableSeries, XyDataSeries, XyScatterRenderableSeries, EllipsePointMarker, EZoomState, SweepAnimation, SciChartJsNavyTheme, RolloverModifier, RubberBandXyZoomModifier, NumberRange, LegendModifier, MouseWheelZoomModifier, ZoomPanModifier, ZoomExtentsModifier } = SciCha..

  • [PostgreSQL] Windows 외부 접속 허용 설정 및 외부 접속 방법

    [PostgreSQL] Windows 외부 접속 허용 설정 및 외부 접속 방법

    postgresql.conf 수정 C:\Program Files\PostgreSQL\15\data_ 경로에 postgresql.conf listen_addresses = '*' 로 설정 - 모든 ip 주소에서 접속 허용 white list ip 설정하고 싶으면 ip 주소 쓰기 ps_hba.conf 수정 C:\Program Files\PostgreSQL\15\data 경로에 pg_hba.conf # IPv4 local connections: host all all 0.0.0.0/0 scram-sha-256 IPv4 local connection address 0.0.0.0/0 으로 수정(원래는 127.0.0.1) 방화벽 설정 고급 보안이 포함된 windows defender 방화벽 인바운드 규칙 - 새 규..

  • [라이트 딥러닝] 1. 넓은 시각으로 보는 머신러닝 개괄

    [라이트 딥러닝] 1. 넓은 시각으로 보는 머신러닝 개괄

    2022년 11월 Chat GPT가 대중적으로 굉장히 넓게 알려지면서 서서히 붐이 오고 있던 인공지능 시장이 그야말로 전성기를 맞이했다는 생각이 드는 요즘입니다. LLM(Large Language Model) 뿐만 아니라 CV(Computer Vision) 분야에서는 저작권 문제가 대두되고 있기는 하지만 사진과 그림체를 학습시켜 그림체를 입은 새로운 그림을 만들어내고, 음성합성 분야에서는 인공지능을 활용해 TTS가 노래를 부르게 하기도 합니다. 눈에 보이는 서비스를 제공하는 위와 같은 분야를 제외하고도 인공지능을 통한 이상탐지 솔루션, 강화학습을 활용한 게임 봇(Bot) 생성 등 아직 저도 완벽히 쓰임을 다 알지 못하는 무궁무진한 분야에서 딥러닝이 사용되고 있습니다. 이번 포스팅에서는 AI를 공부하기로 ..

  • [강화학습] Dealing with Sparse Reward Environments - 희박한 보상 환경에서 학습하기

    [강화학습] Dealing with Sparse Reward Environments - 희박한 보상 환경에서 학습하기

    ※ 아래 링크의 내용을 공부하며 한국어로 정리한 내용입니다. Reinforcement Learning: Dealing with Sparse Reward Environments Reinforcement Learning (RL) is a method of machine learning in which an agent learns a strategy through interactions with its environment… medium.com 1. Sparse Reward Sparse Reward(희박한 보상) : Agent가 목표 상황에 가까워졌을 때만 긍정 보상을 받는 경우 현재 실험 환경 세팅과 같음 Curiosity-Driven method agent가 관심사 밖의 환경에도 동기를 받도록 Curric..

  • [Obsidian] 커뮤니티 플러그인 추천 및 Git을 활용한 연동법

    [Obsidian] 커뮤니티 플러그인 추천 및 Git을 활용한 연동법

    지난 포스팅에서는 Obsidian과 Notion을 비교하는 내용을 다뤘었는데, 이번 포스팅에서는 어차피 옵시디언으로 넘어온 거! 기깔나게 써봅세! 하는 마음가짐으로 커뮤니티 플러그인 소개를 하도록 하겠다. 이전에 말한 것처럼 옵시디언은 유저가 개발한 플러그인을 다운받아서 기능을 확장시킬 수 있는데, 이게 사실상 옵시디언을 사용하는 이유라고 해도 무방하다. 그럼 바로! 시작하도록 하겠다. 정렬 순서는 추천순은 아니고 생각난 대로이다. Git 활용법만 궁금하시면 1번은 생략하시고 2번으로 넘어가시면 된다. 1. Obsidian 커뮤니티 플러그인 추천 a. Calendar 안녕하세요, 데일리 노트 없이는 살 수 없는 사람입니다. 나와 같은 종류의 사람이라면 장담컨데 옵시디언으로 넘어와서 가장 먼저 찾은 게 캘..

  • [Obsidian] Notion vs Obsidian, 내가 Obsidian으로 이사한 이유

    [Obsidian] Notion vs Obsidian, 내가 Obsidian으로 이사한 이유

    2~3주 전이었나? 업무시간 중간에 Notion 서버에 잠시간 장애가 발생했던 적이 있다. 나는 내 기억력을 안 믿는 편이라 해야할 업무부터 일하면서 리서치한 내용 등을 노션에 다 기록해두고 쓰고 있어서 아주, 아주, 아주 불편한 시간이었다. 그때 결심했다. 아, 대체제를 찾아야겠다. 그때 Obsidian을 알게 됐다. 노마드 코더의 영상을 보고(사실 봤다기엔 썸네일만 봤다) 처음으로 Obsidian을 접하게 되었고, 장단점을 비교한 여러 글들을 읽어보고 이사를 결심하게 되었다. 이사 과정이 조금 험난하기도 했고, 적응에도 시간이 필요해서 이제 조금 알 것 같은 기분이라 나처럼 이사를 고민 중인 분들을 위해서 기록을 남겨보려고 한다. 연동성, 디자인(이라 쓰고 사용자 경험), 확장성을 중심으로 비교해보자..

  • [강화학습] DDPG(Deep Deterministic Policy Gradient)

    [강화학습] DDPG(Deep Deterministic Policy Gradient)

    DQN의 차원의 저주 문제(고차원 action을 다루는 경우 연산 속도가 느려지고 memory space를 많이 요함)를 off-policy actor critic 방식으로 풀어낸다. 기존 DQN 방식의 insight들에 batch normalization replay buffer target Q network Actor-critic 파라미터화 된 actor function을 가짐 actor function : state에서 특정 action으로 mapping하여 현재 policy를 지정 policy gradient 방식으로 학습 여기에서 J가 Objective Function(목표함수) actor function이 목표 함수를 gradient asent로 최대화→ 이 때의 policy parameter..

  • [강화학습] Dueling Double Deep Q Learning(DDDQN / Dueling DQN / D3QN)

    Dueling Double DQN https://arxiv.org/pdf/1509.06461.pdf https://arxiv.org/pdf/1511.06581.pdf Double DQN DQN에서 reward를 과대 평가하는 문제가 있음. Q Value가 agent가 실제보다 높은 리턴을 받을 것이라고 생각하는 경향 ⇒ Q learning update 방정식에 다음 상태(state)에 대한 Q value 최대값이 존재하기 때문 Q 값에 대한 max 연산은 편향을 최대화한다. 환경의 최대 true value가 0인데 agent가 추정하는 최대 true value가 양수인 경우에 성능 저하 해결을 위해 두 개의 network 사용. Q Next : action selection → 다음 액션으로 가장 좋은 ..

  • [Computer Science] CPU 작동원리

    [Computer Science] CPU 작동원리

    CPU 작동원리 CPU 구성 연산 장치(ALU) 산술 / 논리 연산 수행 데이터를 레지스터에서 읽어오고 다시 레지스터에 결과를 저장 제어 장치 명령어의 순서를 제어 주기억장치에서 명령어를 가져와 해독 → 실행을 위한 신호를 기억/연산/입출력 장치로 전송 레지스터 고속 기억 장치 명령어 주소, 코드, 데이터, 결과 등을 임시 저장함 종류 범용 레지스터 일반적인 데이터/연산결과 저장 특수목적 레지스터 특수 목적으로 사용되는 레지스터 특수목적 레지스터 MAR(Memory Address Register) : 읽기/쓰기 수행하는 주기억장치 주소 PC(Program Counter): 다음에 수행할 명령어 주소 IR(Instruction Register): 현재 실행중인 명령어 MBR(Memory Buffer Reg..

  • [라이트 딥러닝] 0. Intro

    [라이트 딥러닝] 0. Intro

    제 블로그에서 왠지는 모르겠지만 꾸준히 사랑받아온 라이트 머신러닝 시리즈를 쓴지도 벌써 3년 반이 지났습니다. 처음 이 시리즈를 쓸 때 저는 이제 막 컴퓨터공학 1학년 과정을 마친 학생이었고, 자료구조며 알고리즘도 모르는 주주주주주니어 개발자 시절이었습니다. 때문에 제가 봐도 ‘아, 이 녀석이 이해를 못하고 썼구나….’ 하는 부분들이 분명 존재합니다. 3년 반이 지났고, 저는 8개월 전에 학사 졸업을 했으며, 머신러닝 엔지니어 겸 이것저것 개발자로 경험을 쌓은지도 1년이 조금 넘었습니다. 사실 아직도 아는 게 많다고 느껴지지는 않습니다만, 저때의 저보다는 뭐가 되었든 나은 것도 사실입니다. 이제 한 주주니어 개발자쯤은 됐겠죠? 그리고 당시의 녀석은 몰랐겠지만 내년 후기 대학원 지원을 염두에 두고 있는 만..

  • [Monitoring System] 1~4 까지의 내용으로 학술대회에 논문을 냈습니다.

    별 건 아니고 기회가 되어서 한국통신학회 하계종합학술대회에 해당 내용으로 논문을 실을 수 있게 되었습니다. 후속 논문으로 이상탐지 관련 내용을 정리해두고 있는데 쓸 수 있을런지까지는 잘 모르겠네요ㅎㅎ 실험장치에 관한 내용이나 자세한 세팅 등의 내용이 포함되어 있습니다. 필요하면 읽어보셔도 될 것 같습니다. 두 페이지 짜리고 무려 천원(!)입니다. 감사합니다 :) 고속 무선 통신 기반의 실시간 진동 측정 및 분석 시스템 | DBpia 강다인, 조수형, 김대환 | 한국통신학회 학술대회논문집 | 2023.06 www.dbpia.co.kr

  • [Data] 전동 모터 이상탐지 및 분류를 위한 주파수 분석

    [Data] 전동 모터 이상탐지 및 분류를 위한 주파수 분석

    1. 데이터 취득 Sampling rate 25.6kHz DC Motor, 자체 제작 실험환경 데이터 파일 당 102,400개 포인트 2. FFT 모터 주파수 분석 1. Normal 정상상태 모터의 주파수는 진동 차수(Harmonic)가 반비례한다. 현재 실험 세트의 모터는 약 3600rpm을 가지고 있으므로 진동차수는 1차 60Hz, 2차 120Hz, 3차 180Hz로 이루어져 있다. 위 FFT 주파수 분석 결과 1차, 2차, 3차 진동 차수 순으로 amplitude가 감소하는 것을 확인할 수 있다. 2. Misalignment 오정렬(Misalignment) 상태는 Parallel Misalignment(지면과 모터의 축은 평행하나 베어링을 기준으로 단차가 존재할 떄)와 Angular Misalign..

  • [Spring 입문] 5. 회원 관리 예제 - 웹 MVC 개발

    [Spring 입문] 5. 회원 관리 예제 - 웹 MVC 개발

    1. 회원 웹 기능 - 홈 화면 추가 localhost:8080 으로 호출 container에서 뒤짐 localhost:8080/ < 컨트롤러 있음 연결! package hello.hellospring.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controller public class HomeController { @GetMapping("/") public String Home() { return "home"; } } 2. 회원 웹 기능 - 등록 package hello.hellospring.controller; import he..

  • [Spring 입문] 4. 스프링 빈과 의존관계

    [Spring 입문] 4. 스프링 빈과 의존관계

    1. 컴포넌트 스캔과 자동 의존관계 설정 회원 컨트롤러가 서비스와 레포지토리를 사용가능하도록 하기 → 의존관계 생성 package hello.hellospring.controller; import org.springframework.stereotype.Controller; @Controller public class MemberController { } @Controller 로 annotation을 하게되면 스프링 빈에서 얘를 관리하게 할 수 있음. private final MemberService memberService; 스프링 컨테이너에 등록해서 하나를 여러 개가 공유 @Controller public class MemberController { private final MemberService m..

  • [Spring 입문] 3. 회원 관리 예제 - 백엔드 개발

    [Spring 입문] 3. 회원 관리 예제 - 백엔드 개발

    1. 비즈니스 요구사항 정리 데이터 회원 ID 이름 기능 회원 등록 조회 아직 DB 선정하지 않은 상황 ← 이라는 설정 컨트롤러 : 웹 MVC의 컨트롤러 (API 생성 등) 서비스 : 핵심 비즈니스 로직 도메인 : 데이터베이스에 저장 / 관리되는 것 리포지토리 : 데이터 베이스 접근 / 도메인 객체를 DB에 저장 및 관리 인터페이스로 구현 클래스 변경 가능하게 설계(DB 선정 안 함) 구현체로 메모리 기반의 가벼운 데이터 저장소로 개발 진행 2. 회원 도메인과 레포지토리 만들기 1. Member 클래스 생성 package hello.hellospring.domain; public class Member { private Long id; // database index에 가까움 private String ..

  • [Monitoring System] 7. Fast API 로 이틀만에 백엔드 구축하기(feat. Google Chart) (3) - 마침내 그래프 그리기 完

    [Monitoring System] 7. Fast API 로 이틀만에 백엔드 구축하기(feat. Google Chart) (3) - 마침내 그래프 그리기 完

    [Monitoring System] 5. Fast API 로 이틀만에 백엔드 구축하기(feat. SQLAlchemy, PostgreSQL) (1) from sqlalchemy import Boolean, Column, ForeignKey, Integer, String, TIMESTAMP, Float from .base import Base 제목은 거창하게 써놨지만 아주 간단한 백엔드를 구축해서 그리 오래걸리지 않았을 뿐이다^^. 우선 백엔드를 dnai-deny.tistory.com [Monitoring System] 6. Fast API 로 이틀만에 백엔드 구축하기(feat. SQLAlchemy, PostgreSQL) (2) - MQTT 데이터 적 2023.06.13 - [Project/Monitorin..

  • [강화학습] gym으로 강화학습 custom 환경 생성부터 Dueling DDQN 학습까지

    [강화학습] gym으로 강화학습 custom 환경 생성부터 Dueling DDQN 학습까지

    인터넷을 다 뒤져봤는데 강화학습을 gym에서 제공하는 게임 agent 사용해서 하는 예제는 육천만 개고 커스텀해서 학습을 하는 예제는 단 한 개 있었다. 이제 막 공부를 시작하는 사람들에게 도움이 되었으면 하는 마음으로 간단하게 써보고자 한다. 1. Gym의 Env 구조 살펴보기 꼭 그래야하는 것은 아니지만(밑바닥부터 구현하는 방법도 있긴 하다) 어쨌든 gym 라이브러리의 environment 구조를 기반으로 해서 구현해볼 것이다. !pip install gym gym 라이브러리의 env 구조는 대충 아래와 같다. site-packages/gym/core.py 에서 직접 볼 수 있다. class Env(Generic[ObsType, ActType]):m.Generator] = None """ The ma..

  • [Paper Review] Transforming Cooling Optimization for Green Data Center via Deep Reinforcement Learning

    [Paper Review] Transforming Cooling Optimization for Green Data Center via Deep Reinforcement Learning

    * 개인적으로 읽고 가볍게 정리해보는 용도로 작성한 글이라 미숙하고 정확하지 않습니다. 양해 부탁드립니다 :D Transforming Cooling Optimization for Green Data Center via Deep Reinforcement Learning Cooling system plays a critical role in a modern data center (DC). Developing an optimal control policy for DC cooling system is a challenging task. The prevailing approaches often rely on approximating system models that are built upon the knowled..

  • [Monitoring System] 6. Fast API 로 이틀만에 백엔드 구축하기(feat. SQLAlchemy, PostgreSQL) (2) - MQTT 데이터 적재 / 로그인 기능 구현

    [Monitoring System] 6. Fast API 로 이틀만에 백엔드 구축하기(feat. SQLAlchemy, PostgreSQL) (2) - MQTT 데이터 적재 / 로그인 기능 구현

    2023.06.13 - [Project/Monitoring System] - [Monitoring System] 5. Fast API 로 이틀만에 백엔드 구축하기(feat. SQLAlchemy, PostgreSQL) (1) [Monitoring System] 5. Fast API 로 이틀만에 백엔드 구축하기(feat. SQLAlchemy, PostgreSQL) (1) from sqlalchemy import Boolean, Column, ForeignKey, Integer, String, TIMESTAMP, Float from .base import Base 제목은 거창하게 써놨지만 아주 간단한 백엔드를 구축해서 그리 오래걸리지 않았을 뿐이다^^. 우선 백엔드를 dnai-deny.tistory.com 전..

  • [강화학습] DQN(Deep Q-Network)

    [강화학습] DQN(Deep Q-Network)

    [Model Review] Markov Decision Process & Q-Learning 1. 마르코프 결정 프로세스(MDP) 바닥부터 배우는 강화학습 - 마르코프 결정 프로세스(Markov Decision Process) 마르코프 프로세스(Markov Process) 상태 S와 전이확률행렬 P로 정의됨 하나의 상태에서 다른 dnai-deny.tistory.com Deep Reinforcement Learning 기존 Q Learning에서는 State와 Action에 해당하는 Q-Value를 테이블 형식으로 저장 state space와 action space가 커지면 Q-Value를 저장하기 위해 memory와 exploration time이 증가하는 문제 ⇒ 딥러닝으로 Q-Table을 생성하는 Q..

  • [강화학습] Markov Decision Process & Q-Learning

    [강화학습] Markov Decision Process & Q-Learning

    1. 마르코프 결정 프로세스(MDP) 바닥부터 배우는 강화학습 - 마르코프 결정 프로세스(Markov Decision Process) 마르코프 프로세스(Markov Process) 상태 S와 전이확률행렬 P로 정의됨 하나의 상태에서 다른 상태로 전이가 일어남 상태 전이에 각각 확률 존재 S4의 경우 종료상태 마르코프 성질(Markov property) $$ P[S_{t+1} | S_t] = P[S_{t+1} |S_1,S_2, ... S_t] $$ 상태가 되기까지의 과정은 확률 계산에 영향을 주지 않음. 어느 시점의 상태로 다음 상태를 결정할 수 있을 때 마르코프한 상태라고 함.반례) 운전하는 사진(어느 시점의 사진으로는 후진/전진/속도 등을 파악 불가 → 다음 상태 결정 불가능) ex) 체스 게임(어느 ..

  • [Elasticsearch] Index Template 구성하기 with Kibana & Logstash (2) - Mapping 기초

    [Elasticsearch] Index Template 구성하기 with Kibana & Logstash (2) - Mapping 기초

    2023.07.06 - [Web/Back-end \ etc.] - [Elasticsearch] Index Template 구성하기 with Kibana & Logstash (1) - Setting [Elasticsearch] Index Template 구성하기 with Kibana & Logstash (1) - Setting Elasticsearch에 데이터를 적재할 때, 어떤 방식으로 데이터를 적재할지에 대한 세팅을 해줄 수 있다. Elasticsearch는 역색인을 기반으로 데이터를 인덱싱하기 때문에, 역색인의 기준이 되는 단어(token) dnai-deny.tistory.com 이전 포스팅에 이어 이번에는 Index Template의 두 번째 주요 구성인 Mapping 영역을 살펴보도록 하겠다. M..

  • [Elasticsearch] Index Template 구성하기 with Kibana & Logstash (1) - Setting

    [Elasticsearch] Index Template 구성하기 with Kibana & Logstash (1) - Setting

    Elasticsearch에 데이터를 적재할 때, 어떤 방식으로 데이터를 적재할지에 대한 세팅을 해줄 수 있다. Elasticsearch는 역색인을 기반으로 데이터를 인덱싱하기 때문에, 역색인의 기준이 되는 단어(token)들을 어떻게 토큰화하는지에 따라서 검색의 결과도 달라질 수 있다. 이렇게 Token을 생성하는 규칙을 담은 설정을 Index Template라고 부른다. Elasticsearch의 Index Template은 크게 Setting의 영역과 Mapping의 영역으로 나누어진다. 오늘은 Setting의 구성요소인 Analyzer, Tokenizer, Filter에 대해 이야기해보려고 한다! logstash에서 elasticsearch로 데이터를 보내줄 때 json 형태로 미리 setting ..

  • [Computer Science] 컴퓨터의 구성

    [Computer Science] 컴퓨터의 구성

    하드웨어 : 물리적 장치 소프트웨어 : 하드웨어의 동작을 지시하는 명령어 집합 하드웨어 CPU(Central Processing Units) RAM(Random Access Memory), HDD(Hard Disk Drive) 마우스, 프린터, 키보드 위 세 가지 구성요소는 시스템 버스(System Bus) 로 연결되며, 시스템 버스를 통해 명령 제어 신호와 데이터를 주고받는다. 중앙처리장치 CPU 주기억장치(RAM or ROM(Read Only Memory))에서 명령어와 데이터를 읽어와 처리 명령어의 수행 순서를 제어함 ⇒ Scheduling 구성 산술논리연산장치(ALU) : 비교 및 연산 제어장치 : 명령어 해석 및 실행 연산 결과를 임시 저장하는 등에 사용됨 주기억장치보다 빠름레지스터 : 고속 /..

  • [Spring 입문] 2. 스프링 웹 개발 기초

    [Spring 입문] 2. 스프링 웹 개발 기초

    정적 컨텐츠 = 파일을 그대로 고객에게 전달 MVC & 템플릿 엔진 = html을 서버에서 가공해서 동적 컨텐츠로 전달 API = json 데이터 포맷으로 클라이언트에 데이터 전달 Vue.js, React 등에서 사용 서버끼리 통신할 때 1. 정적 컨텐츠 Spring boot는 static/ 폴더에서 정적 컨텐츠를 찾아서 사용한다. ex) resources/static/hello-static.html 정적 컨텐츠 입니다. 흐름도 주소 요청 보냄 톰캣 서버에서 접수 먼저 스프링 컨테이터에서 컨트롤러 있는지 확인 없으면 static 하위의 파일 찾음 있으면 웹 브라우저로 리턴해줌 2. MVC와 템플릿 엔진 MVC = Model View Controller 과거 view와 controller가 나누어지지 않았..

  • [Spring 입문] 1. 프로젝트 환경 설정

    [Spring 입문] 1. 프로젝트 환경 설정

    1. 프로젝트 생성 project - Gradle spring boot version - 2.7.12 spring boot 3.x.x로 선택하는 경우 java version이 17 이상이어야함 java version 12(11) artifact - output name package name = name.artifact 형태로 패키징됨 Thymeleaf - template engine, 뒤에서 설명 spring web - web builder 프로젝트 구성 src/main src/test ⇒ test 코드를 따로 작성하는 것에 대한 중요성이 대두되는 중. build.gradle ⇒ 버전 설정, 라이브러리 로드 등 python virtual environment에서 requirement.txt처럼 depe..

  • [Elasticsearch] Logstash를 통해 PostgreSQL과 Elastic Stack 연동하기

    [Elasticsearch] Logstash를 통해 PostgreSQL과 Elastic Stack 연동하기

    * 2023.12.21 업데이트 - Docker ELK로 PostgreSQL과 Elastic Stack 연동 포스팅 [Docker + ELK] Docker ELK를 사용해서 PostgreSQL DB 모니터링 하기 이번 포스팅에서는 이전에 elasticsearch, kibana, logstash를 별도로 실행하여 PostgreSQL DB를 모니터링했던 것을 Docker을 통해서 구현해본다. 로컬 환경에서 elk를 구성했던 포스트는 아래 링크에서 확인할 dnai-deny.tistory.com 이전 포스팅에 먼저 언급했다싶이 RDBMS에 Elasticsearch를 적용하기 위한 방법을 검색했을 때 가장 많이 추천하는 방법이 Logstash를 이용한 모니터링이었다. [Elasticsearch] Logstash ..

  • [Elasticsearch] Logstash 사용해보기

    [Elasticsearch] Logstash 사용해보기

    제목만 썼는데 어제의 삽질이 올라오는 기분.... 곧장 시작해보겠다. elasticsearch 설치에 관련된 내용은 이전 포스팅 참고. [Elasticsearch] Elasticsearch 기본 개념 및 설치, kibana 연동하기 최신 한국어 자료가 없어서 설치만 하다가도 쓰러질 뻔했다. 세상에 이렇게 기빨리는 설치작업은 처음이다... Elasticsearch 설치 방법이 어렵다기보다는 백엔드 바보(...)인 내가 걷기에는 제법 어 dnai-deny.tistory.com 1. Logstash를 사용하려는 이유? logstash를 사용해서 elastic search와 rdbms 사이에 pipline을 생성할 수 있다. 입력 → 필터(가공) → 출력 검색해보니 elasticsearch와 rdbms를 연결할..

  • [Elasticsearch] Elasticsearch 기본 개념 및 설치, kibana 연동하기

    [Elasticsearch] Elasticsearch 기본 개념 및 설치, kibana 연동하기

    최신 한국어 자료가 없어서 설치만 하다가도 쓰러질 뻔했다. 세상에 이렇게 기빨리는 설치작업은 처음이다... Elasticsearch 설치 방법이 어렵다기보다는 백엔드 바보(...)인 내가 걷기에는 제법 어려운 일이었다고 할 수 있겠다. 이미 유사한 경험이 있다면 쉽게 하실 것 같다. 어쨌든 성공했으니 가볍게 정리해보도록 하겠다. 1. Elasticsearch 란? 명확하게 답을 내기에는 아직 부족한 점이 많지만, 검색엔진이다. NoSQL 기반으로 데이터 구조를 가져가고, 각각은 RDBMS와 매핑되는 용어를 가지고 있다. NoSQL에 익숙하다면 더 쉬울 것 같다. Firebase 등등. A. RDBMS와 검색엔진의 차이 RDBMS는 테이블로 딱딱 쪼개서 자를 수 있는 체계적인 구조 단어 검색, 쿼리문을 활..

  • [Monitoring System] 5. Fast API 로 이틀만에 백엔드 구축하기(feat. SQLAlchemy, PostgreSQL) (1)

    [Monitoring System] 5. Fast API 로 이틀만에 백엔드 구축하기(feat. SQLAlchemy, PostgreSQL) (1)

    from sqlalchemy import Boolean, Column, ForeignKey, Integer, String, TIMESTAMP, Float from .base import Base 제목은 거창하게 써놨지만 아주 간단한 백엔드를 구축해서 그리 오래걸리지 않았을 뿐이다^^. 우선 백엔드를 해보는 것 자체가 이번이 처음이고, 필요에 의해서 필요한 부분만 공부해서 후닥닥 만들어서 다소 조잡할 수 있으나 어쨌든 모니터링 시스템 자체는 잘 동작하고 있으니 호스팅만 따로 해주면 당장 쓸 수 있다. Python으로 작성되어 있어서 Python의 노예인 나에게는 아주 편한 프로그래밍이었던 것도 한 몫했다. 0. Fast API 자습서 Fast API 공식문서로 공부하는 시간을 하루 가지고 이틀동안 개발을 ..

  • [Model Review] TadGAN(Time series Anomaly Detection GAN)

    [Model Review] TadGAN(Time series Anomaly Detection GAN)

    이번에 고장진단에 관한 과제를 하게 되면서 LSTM AE나 CNN 보다 최근 모델을 적용해보고 싶어서 TadGAN을 골랐다. 아직 완전히 이해했는지는 모르겠으나 알게된대로 조금 적어보려고 한다. TadGAN(Time series Anomaly Detection GAN) TadGAN은 2020년 발표된 모델로, 이름 그대로 시계열 데이터의 이상 탐지용 GAN 모델이다. GAN 모델은 복원, 이미지 생성 등에 특화되어 있는데, 이 성질을 이용하여 LSTM Auto Encoder처럼 패턴을 복원하며 학습하고, 이후에 들어오는 새로운 데이터를 기반으로 예측했을 때 에러가 큰 부분을 이상치로 탐지하는 것이다. TadGAN의 구조 TadGAN은 2개의 Generator와 2개의 Critic 으로 구성된다. Gene..

  • [Docker] Docker 입문 - Docker Image, Container, 버전 관리와 moniwiki 배포 예제까지

    [Docker] Docker 입문 - Docker Image, Container, 버전 관리와 moniwiki 배포 예제까지

    ※ 44bits 블로그에서 작성한 글을 보고 나름의 정리를 더해봤습니다. 좋은 글 감사드립니다! 원문은 링크. 도커(Docker) 입문편: 컨테이너 기초부터 서버 배포까지 도커(Docker)는 2013년 등장한 컨테이너 기반 가상화 도구입니다. 도커를 사용하면 컨테이너를 쉽게 관리할 수 있으며, 이미지를 만들어 외부 서버에 배포하는 것도 가능합니다. 이 글은 도커를 시 www.44bits.io 도커는 컨테이너 기반의 오픈소스 가상화 플랫폼이다. 라고 한 줄 설명을 들어도 나는 잘 이해가 안됐다. 지금까지 내가 이해하기로는, 일종의 가상환경이라고 생각했다. 직접 가상환경을 깔고, 필요한 프로그램을 설치하고, 종속성 문제를 해결하는 모든 일련의 과정을 한 큐에 끝내버리는 아주 깔끔한 가상화 플랫폼인 것이다...

  • [Monitoring System] 4.1 세상에 더 빠른 방법이 - pyqtgraph

    [Monitoring System] 4.1 세상에 더 빠른 방법이 - pyqtgraph

    [Monitoring System] 3. UDP 통신으로 실시간 진동 데이터 Plotting(feat. matplotlib) 이번 포스팅에서는 이전 mqtt에서 사용한 예제 데이터보다 2만 배 정도 많은 데이터를 DAQ에서 받아오는 UDP 예제를 만들 것이다. 구현하려는 웹 서비스에 온도 데이터 말고 진동 데이터도 넣어보 dnai-deny.tistory.com [Monitoring System] 4. UDP 통신으로 실시간 진동 데이터 FFT / STFT시각화(numpy, tensorflow, pytorch) 결론부터 말하면 stft는 부하가 너무 심해서 실시간으로 시각화하는 것은 무리무리무리이다. 일단 matplotlib 자체에서 단순 시각화를 하기에도 데이터 양이 너무 많기 때문에 일종의 녹화기능을 ..

  • [Monitoring System] 4. UDP 통신으로 실시간 진동 데이터 FFT / STFT시각화(numpy, tensorflow, pytorch)

    [Monitoring System] 4. UDP 통신으로 실시간 진동 데이터 FFT / STFT시각화(numpy, tensorflow, pytorch)

    결론부터 말하면 stft는 부하가 너무 심해서 실시간으로 시각화하는 것은 무리무리무리이다. 일단 matplotlib 자체에서 단순 시각화를 하기에도 데이터 양이 너무 많기 때문에 일종의 녹화기능을 넣어서 원하는 만큼의 데이터를 fft / stft 처리해서 따로 시각화하기로 결정하였다. 그래도 FFT 정도는 실시간으로 가능할 것 같아서 gpu accelerator를 사용해서 구현하였다. 그러나 CUDA 환경이 아닌 곳에서도 쓸 수 있도록 numpy로도 코드를 추가했다. 이전까지 코드는 요기에 있다. https://dnai-deny.tistory.com/65 [Monitoring System] 3. UDP 통신으로 실시간 진동 데이터 Plotting(feat. matplotlib) 이번 포스팅에서는 이전 m..

  • [Monitoring System] 3. UDP 통신으로 실시간 진동 데이터 Plotting(feat. matplotlib)

    [Monitoring System] 3. UDP 통신으로 실시간 진동 데이터 Plotting(feat. matplotlib)

    이번 포스팅에서는 이전 mqtt에서 사용한 예제 데이터보다 2만 배 정도 많은 데이터를 DAQ에서 받아오는 UDP 예제를 만들 것이다. 구현하려는 웹 서비스에 온도 데이터 말고 진동 데이터도 넣어보고 싶은데, 그것을 위해서 우선 대용량 데이터이기 때문에 복잡해지는 데이터베이스나 서버를 제외하고 소켓 통신한 결과를 matplotlib로 로컬에 간단하게 띄워보도록 하겠다. 1. UDP 통신 UDP는 소켓 통신의 일종으로, 다른 소켓 통신방법인 TCP와는 다르게 연결을 보장해주지 않는다. 나쁘게 들릴 수도 있겠으나 client와 server의 연결을 요청하고, 승인하고 연결한 후 통신을 시작하는 TCP와 달리 데이터를 매번 보낼 때마다 데이터의 목적지(ip, port번호)를 함께 실어서 일단 냅다 보내는 방식..

  • [NVIDIA] 윈도우에서 가상머신(WSL)으로 Jetson AGX Xavier 부팅하기

    [NVIDIA] 윈도우에서 가상머신(WSL)으로 Jetson AGX Xavier 부팅하기

    이 글은... Jetson AGX Xavier를 부팅하기 위해 온갖 시행착오를 거친 후 성공한 과정을 정리한 것이다. 따라서 설치하다가 다른 오류가 나거나 한다면 댓글로 알려주시면 힘 닿는대로 도와드릴 수 있다. 1. Ubuntu 18.04 or Ubuntu 16.04 환경의 host 디바이스 준비 없다면 Window는 WSL로 하자…… Virtual box로 하면 곧죽어도 안된다. 맥유저라면 아래 첨부한 링크에서 잘 설명해주고 있으므로 따라가면 된다. NVIDIA JETSON AGX XAVIER 소개 및 설정 방법 NVIDIA JETSON AGX XAVIER 소개 및 설정 방법 오늘은 강력한 추론 엔진인 NVIDIA® Jetson AGX Xavier™의 설정 방법을 소개드리려고 합니다. 먼저 자비에가 ..

  • [Monitoring System] 2. MQTT 통신

    [Monitoring System] 2. MQTT 통신

    : Message Queuing Telemetry Transport 가장 먼저 데이터 수집을 위해 MQTT 통신이 무엇인지부터 알아보도록 하겠다. 원리 Publish - Subscribe 모델 메세지 발신자와 수신자를 구분함 브로커 라는 제 3의 구성요소가 둘 사이의 통신 처리 브로커의 publisher - subcriber 분리 공간 분리 발신자 / 수신자가 서로의 IP / 포트번호 / 네트워크 위치 모름 시간 분리 동시에 일생되거나 네트워크 통해 연결되지 않음 동기화 분리 서로를 중단시키지 않고 메세지 송수신 가능. 구독자가 데이터 올 때까지 기다릴 필요 없다. 요약하면, 메세지 발신자가 주제 + 데이터를 브로커에게 보내면, 브로커는 그 주제를 구독하고 있는 수신자를 찾아서 받은 데이터를 전송해준다...

  • [Monitoring System] 1. 시스템 구성 및 목표

    [Monitoring System] 1. 시스템 구성 및 목표

    앞으로 딥러닝을 활용한 과제를 수행할 때, 직접 데이터를 센서나 카메라 등을 활용해서 수집하고 모니터링하는 기능까지 구현할 일이 꽤 있으리라는 이야기와 함께 간단한 모니터링 시스템을 로컬에서 구축해보는 숙제(?)를 받았다. 이전에 한 번도 백엔드를 해본 적이 없어서 조금 막막했지만, 역시 파이썬... FastAPI를 활용해서 5일 정도만에 아주 기본적인 틀을 짜는데 성공했다. 이 챕터에서 지속적인 시스템 업데이트와 개발 과정을 기록해보려고 한다. 공개할 수 있는 코드는 아래 깃헙 repository에 올려두었다. https://github.com/melli0505/monitoring_system [GitHub - melli0505/monitoring_system: FastAPI/PostgreSQL/MQT..

  • [FastAPI] Tutorial(2)

    [FastAPI] Tutorial(2)

    ※ FastAPI Tutorial을 공부하며 이해한대로 작성한 내용으로, 실제 내용과 다르거나 틀린 부분이 있을 수 있습니다. 댓글로 알려주시면 즉시 반영하겠습니다. 감사합니다. https://fastapi.tiangolo.com/ko/tutorial/ [자습서 - 사용자 안내서 - 도입부 - FastAPI 자습서 - 사용자 안내서 - 도입부 이 자습서는 FastAPI의 대부분의 기능을 단계별로 사용하는 방법을 보여줍니다. 각 섹션은 이전 섹션을 기반해서 점진적으로 만들어 졌지만, 주제에 따라 다르게 fastapi.tiangolo.com](https://fastapi.tiangolo.com/ko/tutorial/) 1. Body - 여러 개의 매개변수 class Item(BaseModel): name: ..

  • [FastAPI] Tutorial(1)

    ※ FastAPI Tutorial을 공부하며 이해한대로 작성한 내용으로, 실제 내용과 다르거나 틀린 부분이 있을 수 있습니다. 댓글로 알려주시면 즉시 반영하겠습니다. 감사합니다. ※ 중간에 이해하지 못해 영어로 옮겨둔 부분이 있습니다. 추후 수정하겠습니다. https://fastapi.tiangolo.com/ko/tutorial/ 자습서 - 사용자 안내서 - 도입부 - FastAPI 자습서 - 사용자 안내서 - 도입부 이 자습서는 FastAPI의 대부분의 기능을 단계별로 사용하는 방법을 보여줍니다. 각 섹션은 이전 섹션을 기반해서 점진적으로 만들어 졌지만, 주제에 따라 다르게 fastapi.tiangolo.com 1. 첫걸음 1. FastAPI import from fastapi import FastAP..

  • [Model Review] YOLOv5 + Roboflow Annotation

    [Model Review] YOLOv5 + Roboflow Annotation

    ! 주의 ! 이 글에는 적은 yolo v5에 대한 요약과 짧은 사용법, 그리고 roboflow annotation에 대한 개인적인 견해가 쓰여있습니다. 1. YOLOv5 Summary You Only Look Once - one stage detection 모델 R-CNN이나 Faster R-CNN과 달리 이미지 분할 없이 이미지를 한 번만 보는 특징 전처리모델과 인공신경망 통합 실시간 객체탐지 Backbone : input image → feature map CSP-Darknet https://keyog.tistory.com/30 Head : predict classes / bounding boxes Dense Prediction : One stage detector(predict classes + b..

  • [Model Review] MobileNet SSD 논문 퀵 리뷰

    [Model Review] MobileNet SSD 논문 퀵 리뷰

    퀄리티가 높지 않습니다. 주의! Mobile Object Detection model - based on VGG- 16 https://arxiv.org/abs/1704.04861 1. Summary VGG-16 기반 기본 모델이다. 기존 VGG-16 모델이 3x3x3 convolution을 3-dimention으로 사용했기 때문에 총 parameter 개수가 81개였는데, mobile 기기 위에 올리기 위해 depthwise convolution과 pointwise convolution을 함께 사용하여 331 x 3 + 311 x 3 = 27 + 9 = 36개의 parameter로 줄인 방식의 모델이다. → 이를 Depth separable convolution 이라고 부른다. 2. Architectur..

  • [ML/DL] nms(None-maximum-suppression) - hard nms / soft nms

    [ML/DL] nms(None-maximum-suppression) - hard nms / soft nms

    nms(None-maximum-suppression) Soft-NMS -- Improving Object Detection With One Line of Code Theory 예측된 bounding box의 confidence가 임계치(threshold) 이상이면 참으로 처리하게 된다. 그렇게 되면 하나의 Object에 대해 여러 개의 Bounding box가 겹쳐서 생성될 수 있다. → 한 객체에 대해 가장 신뢰도가 높은 하나의 bounding box만 남기고 나머지를 삭제하는 post processing 알고리즘의 일종 = nms non-maximum suppression bounding box 집합에서 class score이 가장 높은 것부터 다른 집합으로 옮기고 원본 bounding box 집합에..

  • [Evaluate Performance] mAP(mean Average Precision)

    [Evaluate Performance] mAP(mean Average Precision)

    SSD, Faster R-CNN에서 사용하는 대표적인 성능평가지표인 mAP(mean Average Precision)에 대해 공부한 내용을 정리해봤습니다. 차마 다시 글로 적을 자신이 없어서 필기 사진으로 대체합니다ㅎㅎ mAP 구현은 COCO Eval API와 Cartucho님의 mAP 구현 repository를 참고하여 COCO format에서는 COCO Eval을, VOC데이터는 Cartucho mAP를 사용해서 만들었습니다. annotation format만 맞춰주면 되기 때문에 수정해서 적용시키는데 어려운 것은 없을 것 같습니다. 이 글을 보고 시도하시다가 어려운 점이 있으시면 댓글로 남겨주세요. GitHub - cocodataset/cocoapi: COCO API - Dataset @ http:..

  • [PyTorch] pretrained model load/save, pretrained model 편집

    Load Pretrained model in pytorch Pretrained model pth로 저장된 torch pretrained model(weight)를 불러와서 사용 weight의 일부만 불러와서 사용할 수 있다. pth = dictionary 로 구성된다. Get format pth 파일은 Dictionary 형태로 저장되어 있다. pytorch의 load를 통해서 불러올 수 있다. import torch model = torch.load('model.pth') print(model.keys()) model.keys() 를 사용해서 key 값들을 불러올 수 있는데, 이것으로 모델 구조를 파악할 수 있다. 현재 예제로 사용하고 있는 pth 파일은 mobilenet-ssd-v1 모델의 mAP 0..

  • [Docker] Anaconda/Jupyter notebook을 dockerfile로 설치 + 커스텀 이미지 만들기

    1. jupyter/datascience-notebook image 기반 CMD로 실행 CMD로 생성하는 과정 도커 이미지 pull $ docker pull jupyter/datascience-notebook image 컨테이너 run $ docker run \ -d \ -it \ -p 8000:8888 \ -e GRANT_SUDO=yes --name jupyter 컨테이너 접속 $ docker exec -it jupyter bash 비밀번호 생성 / ipython > from notebook.auth import passwd > passwd() # 비밀번호 입력 # 비밀번호 확인 # 암호화 비밀번호 출력 (복사해둘 것) jupyter notebook 비밀번호 설정 / sudo vim ~/.jupyter..

  • Equirectangular projection(등장방형도법) & Spherical Coordinates(구면좌표계)

    Equirectangular projection(등장방형도법) & Spherical Coordinates(구면좌표계)

    Equirectangular Projection ⇒ 구형 물체를 2D 좌표로 투영하는 등/장방형 투영도법 Apply equirectangular projection → standard parallel = 왜곡이 없는 구의 중심(가로 선) 위도 ⇒ In panorama, 적도 = standard parallel Spherical Coordinate System ⇒ 3차원 공간 상의 점을 나타내는 좌표계 (r, theta, psi) Equirectangular Projection to Spherical Coordinate System Omnidirectional Image Capture 논문 참조 - 4. Transform Definition

  • [PyQt5/OpenGL/Anaconda] OSError: dlopen(OpenGL, 0x000A), ImportError: ('Unable to load OpenGL library', "dlopen(OpenGL, 0x000A) 해결방법

    environment.yml 파일을 활용해서 anaconda 가상환경을 구성하던 중에 화려한 에러가 발생했다. 이 에러가 발생했을 때는 openGL이고 뭐고 하나도 모를 때라서 엥? 왜 안되지? 상태였다. 전문을 첨부한다... OSError: ("dlopen(OpenGL, 0x000A): tried: '/Users/user/opt/anaconda3/envs/environment/lib/OpenGL' (no such file), '/Users/user/opt/anaconda3/envs/environment/lib/OpenGL' (no such file), '/Users/user/opt/anaconda3/envs/environment/lib/OpenGL' (no such file), '/Users/user/..

  • [flutter/dart] dart migrate 명령어 수행 시 File Exception error

    2시간 전에 발견한 따끈따끈한 에러,,, 방금 해결했으므로 같은 문제를 겪고 계신 분들을 위해 짧게 남겨봅니다. 검색에 걸리라고 한 번 쳐보면 아래와 같습니다. sdk 폴더 찾았는데 파일을 열 수가 없다는 내용입니다... exception: FileSystemException(path=C:\Program Files\Dart\dart-sdk\lib\_internal\sdk_library_metadata\lib\libraries.dart' message=Cannot open file) Dart를 독립적으로 설치하신 경우에는 C:\ProgramFiles\Dart 안에 Dart SDK가 들어있을텐데, 저처럼 flutter와 함께 설치하셨거나 flutter을 안쓴지 2년이 다 되어가서 급한 업데이트와 함께 mig..

  • [CSS] 3. CSS 기초 총정리

    [CSS] 3. CSS 기초 총정리

    블로그에 웹 글을 업로드하지 않은지 어마무시한 시간이 지났지만(...) 천천히 다시 백업해보겠습니다. 다음은 CSS 기초입니다. 개인적으로는 이 기본 문법만 어느정도 알면 그 다음은 그리 어렵지 않은 것 같아요. 사실 CSS가 제 말을 잘 들어주는 편은 아니지만 아무튼 문법은 어렵지 않습니다 ^!^ 1. CSS 기초 형식 Selector{ property: value; } css는 기본적으로 위와 같은 형식을 따릅니다. Selector라고 쓴 식별자를 통해서 접근 및 적용을 가능케 합니다. h2 { color: red; } p { color: pink; } // html CSS head에 위와같이 작성하고 나면 h2태그의 컬러는 red로, p 태그의 컬러는 pink로 바뀝니다. 여기서 알 수 있듯이, h..

  • [SQL] SQL 중급

    [SQL] SQL 중급

    지난번 글에 이어서 Mode의 SQL 튜토리얼을 읽고 정리하고 실습해보고 있습니다. 오늘은 Count를 포함한 기초 산술연산 방법, 조건, 그리고 join에 대해서 다뤄보려고 합니다. 잘못 이해했거나 오류가 있는 부분은 알려주시면 정말 감사하겠습니다! Mode에서 로그인 후 새 report를 만드셔서 따라하실 수 있습니다. 링크 아래에 달아두겠습니다. https://app.mode.com/ Count SELECT COUNT(*) FROM tutorial.aapl_historical_stock_price 특정 열의 행의 수를 계산합니다. *을 입력하면 전체 행의 수를 출력합니다. high를 입력하는 경우에는 null이 아닌 행의 수를 계산합니다( *보다 항상 작아요! ) 열을 셀 수도, 숫자가 아닌 데이터..

  • [SQL] SQL 기초

    [SQL] SQL 기초

    3학년이나 됐는데 데이터베이스를 좀 알긴 알아야되지 않겠나 싶은 마음으로 SQL 문법을 간단하게 공부해서 올려보고자 합니다. Mode의 SQL 튜토리얼을 읽고 정리하고 실습해보고 있습니다. 잘못 이해했거나 오류가 있는 부분은 알려주시면 정말 감사하겠습니다! Mode에서 로그인 후 새 report를 만드셔서 따라하실 수 있습니다. 링크 아래에 달아두겠습니다. https://app.mode.com/ SQL이란? SQL(Structured Query Language)은 관계형 데이터베이스의 데이터를 관리하기 위해 설계된 프로그래밍 언어입니다. SELECT - FROM 한 번에 하나의 select만 실행할 수 있으며, SELECT로 FROM에서 가져온 데이터의 열을 선택할 수 있습니다. SELECT A, B, ..

  • [HTML] 2. HTML5 2

    [HTML] 2. HTML5 2

    이번 포스팅에서는 지난 번에 이어 HTML5에 대한 내용을 다루려고 합니다. 이번에 집중적으로 알아볼 부분은 input 태그와 form 태그의 method, input 태그, 그리고 주석입니다. 1. input 태그와 속성 form은 입력 양식입니다. 구글 폼과 같은 것들을 사용해보셨다면 충분히 예상하실 수 있으실텐데, form 태그 내부는 input 태그로 구성되어 있습니다. form 태그를 사용하는 이유에 대해서는 두 번째에서 말씀드리도록 하겠습니다. input 태그는 아주 많은 속성을 가지고 있습니다. 지금까지 제가 웹 공부를 하면서 가장 많이 본 속성은 type, value, placeholder, name 정도가 있습니다. 하나씩 차차 알아보도록 하죠! 전체 input 태그의 속성에는 다음 ur..

  • [HTML] 1. HTML5 기초

    웹을 공부하고자 하시는 분들이 몇천 번이고 문턱을 밟았다 돌아가시는 그 부분(사실 제 경험담입니다), 바로 HTML에 대해 오늘 다뤄보려고 합니다. HTML은 HyperText Markup Language의 약자로, WWW(world wide web)의 핵심 언어이기도 합니다. 이후에 다뤄질 CSS, JavaScript도 결국 HTML에 기본 토대를 두고 그 안에서 더해지고 작동하게 되죠. 이번 포스팅에서는 HTML의 기초에 대해서 다뤄보려고 합니다. 1. HTML 구성 HTML은 지금 다섯번째 버전을 맞이했습니다. HTML5라고 불리는 이유도 거기에 있습니다. HTML은 Tag로 이루어져 있습니다. HTML5는 아래와 같은 기본 형식을 가지고 있습니다. hello there! 가장 위에 이 문서가 어떤..

  • [라이트 머신러닝] Session 19. 앙상블의 정의와 다수결 투표!

    [라이트 머신러닝] Session 19. 앙상블의 정의와 다수결 투표!

    본의 아니게 오랜만에 라이트 머신러닝 글을 올리게 되었네요! 이번 세션에서는 저번에 예고했다싶이 앙상블 학습에 대해서 알아보려고 하는데요, 여러분은 앙상블하면 무엇이 떠오르시나요? 솔직히 저는 음악이 가장 먼저 떠올랐는데요, 사실 비슷한 개념이기는 합니다. 이번 세션에서는 여러 개 분류기를 합쳐 좋은 성능을 내는 앙상블 학습의 정의와 종류 중 하나인 다수결 투표에 대해서 알아보도록 하겠습니다! A. 앙상블 학습 앙상블 학습(ensemble learning)은 여러 개의 분류기를 하나의 메타 분류기로 연결해서 더 좋은 성능을 이끌어내는 기법입니다. 앙상블 학습을 위한 분류기를 만들기 위한 방법은 여러가지가 있습니다. 일단 먼저, 앙상블의 작동 원리와 왜 더 성능이 좋은지에 대해서 알아보도록 하겠습니다. 먼..

  • [라이트 머신러닝] Session 18. ROC 곡선과 불균형 데이터 균형 맞추기!

    [라이트 머신러닝] Session 18. ROC 곡선과 불균형 데이터 균형 맞추기!

    A. 여러가지 성능 평가 지표 1. 오차 행렬 오차행렬(confusion matrix)은 학습 알고리즘의 성능을 행렬로 펼쳐둔 것입니다. 아래 그림과 같이 진짜 양성(True Positive, TP), 진짜 음성(True Negative, TV), 가짜 양성(False Positive, FP), 가짜 음성(False Negative, FN)의 개수를 적은 정방 행렬이죠. 이 행렬을 만들 때 물론 직접 세어서 계산할 수도 있지만 사이킷런의 함수 confusion_matrix 를 사용할 수도 있습니다. from sklearn.metrics import confusion_matrix pipe_svc.fit(X_train, y_train) y_pred = pipe_svc.predict(X_test) confma..

  • [라이트 머신러닝] Session 17. 학습과 검증 곡선, 그리고 그리드 서치

    [라이트 머신러닝] Session 17. 학습과 검증 곡선, 그리고 그리드 서치

    이번 세션에서는 두 가지 곡선을 이용해 알고리즘을 디버깅하여 보다 나은 모델을 만드는 방법 하나와, 그리드 서치를 이용해 하이퍼파라미터를 튜닝하는 방법 두 가지를 살펴보도록 하겠습니다. 지난 세션과 어느정도 이어지는 주제이니, 16을 보고 오셔도 좋습니다! A. 학습 곡선과 검증 곡선을 사용한 알고리즘 디버깅 1. 학습 곡선으로 편향과 분산 문제 분석 학습 곡선, 즉 그래프를 이용하면 모델의 훈련 정확도와 검증 정확도를 모델의 높은 분산에 문제가 있는지, 편향에 문제가 있는지를 쉽게 확인하고 고칠 수 있습니다. 데이터를 더 모으는 것은 사실 불가능한 경우가 꽤 있기 때문에, 꼭 데이터를 더 모아야하는지를 판단할 수 있게 해주죠. 왼쪽 위 그래프는 편향이 높은 모델입니다. 이 모델은 훈련과 교차검증의 정확..

  • [라이트 머신러닝] Session 16. 파이프라인으로 묶고, 교차 검증으로 모델을 평가하자!

    [라이트 머신러닝] Session 16. 파이프라인으로 묶고, 교차 검증으로 모델을 평가하자!

    이전 세션들에서 테스트 세트처럼 새로운 데이터의 스케일을 조정하고 압축하기 위해 훈련 세트에서 사용한 파라미터를 재사용해야한다고 이야기했었는데요, 조금 더 쉬운 머신러닝을 위해 이번 세션에서 사이킷런의 Pipeline 클래스를 배워보도록 하겠습니다. 그리고 모델을 검증하기 위해 널리 쓰이고 있는 k-겹 교차검증 방법에 대해서도 알아보겠습니다. A. 파이프라인을 사용한 효율적인 워크플로 만들기 1. 위스콘신 유방암 데이터셋 위스콘신 데이터셋은 악성과 양성인 종양 샘플 569개가 포함되어 있습니다. 앞에서 두 열은 샘플의 ID와 진단결과가 들어있고, 3~32번째까지의 열에는 세포 핵의 이미지에서 계산된 30개 실수 값 특성이 들어있습니다. 일단 데이터를 받아오도록 할까요? 이 데이터셋에 대한 내용은 링크에서..

  • [라이트 머신러닝] Session 15. 커널 PCA를 이용한 비선형 매핑

    [라이트 머신러닝] Session 15. 커널 PCA를 이용한 비선형 매핑

    C. 커널 PCA를 사용한 비선형 매핑여태까지 많은 머신 러닝 알고리즘은 입력 데이터가 선형적으로 구분이 가능하다는 가정을 합니다. 다른 알고리즘들-아달린, 로지스틱 회귀, SVM-은 선형적으로 완벽하게 분리되지 않는 이유를 잡음때문이라고 이야기합니다.실전에서는 더 자주 비선형 문제들을 맞닥뜨립니다. 이 경우에 항상 PCA나 LDA와 같은 차원 축소 기법이 최선이라고는 말할 수 없겠죠. 이제부터 알아볼 것은 PCA의 커널화 버전인 KPCA입니다. 1. 커널 함수와 커널 트릭앞선 세션에서 커널 SVM에 대해 이야기한 것을 떠올려보면, 비선형 문제를 풀기 위해 고차원 공간으로 데이터를 투영해 풀었습니다. k 고차원 부분 공간에 있는 샘플을 변환하기 위해 비선형 매핑 함수를 정의합니다. 이 함수를 d차원 보다..

  • [라이트 머신러닝] Session 14. LDA를 통한 지도학습방식 데이터 압축

    [라이트 머신러닝] Session 14. LDA를 통한 지도학습방식 데이터 압축

    선형 판별 분석(Linear Discriminant Analysis)은 규제가 없는 모델에서 오버피팅 정도를 줄이고 계산 효율정을 높이기 위해 사용되는 특성추출 기법입니다. LDA의 개념은 PCA와 상당히 유사합니다. PCA가 데이터셋의 분산이 최대인 성분축을 찾는 것이 목표라면 LDA는 클래스를 최적으로 구분할 수 있는 특성 부분 공간을 찾는 것입니다. 1. 주성분 분석 vs 선형 판별 분석 PCA와 LDA 모두 데이터셋의 차원 개수를 줄이는 선형 변환 기법이지만 PCA는 비지도, LDA는 지도학습이라는 점에서 다릅니다. 여기서 여러분은 LDA가 클래스 구분을 위해 특성 부분 공간을 찾는 것이기 때문에 더 분류에 뛰어나다고 생각하실 수 있는데요, 사실은 그렇지는 않습니다. 마르티네스는 PCA를 통한 전..

  • [라이트 머신러닝] Session 13. 비지도 차원축소! PCA!

    [라이트 머신러닝] Session 13. 비지도 차원축소! PCA!

    이번 세션에 들어가기 전에, 저는 도통 이 책으로 이해가 안되서 따로 강의를 들어서 PCA에 대한 개념을 잡아왔으니 간단하게 먼저 설명을 드리고 들어가도록 하겠습니다. 부디 이 짧은 설명이 여러분이 이해하시는데 도움이 되길 바랍니다:) PCA는 입력 데이터의 구조는 최대한 보존하면서 차원을 감소시키는 기법입니다. 이때, 데이터의 분산이 데이터의 구조라고 할 수 있습니다. 이 데이터의 분산을 최대한으로 유지하는 저차원 벡터에 사영을 시키는 방식이죠. 예를 들어, 2차원에서 1차원으로 차원을 축소시킨다고 생각해봅시다. 우리는 일단 평균을 0으로 맞춘 데이터가 필요하고, 이 데이터를 공분산 행렬로 만들어줍니다. 그리고 이 공분산 행렬의 고유벡터를 기준으로 PCA를 실행하죠. 이렇게 되면 우리는 또 공분산 행렬..

  • [라이트 머신러닝] Session 12. 순차 특성 선택 알고리즘과 랜덤 포레스트 특성 중요도 사용

    [라이트 머신러닝] Session 12. 순차 특성 선택 알고리즘과 랜덤 포레스트 특성 중요도 사용

    이번 세션에서는 순차 특성 선택을 하는 방법과 랜덤 포레스트에서 특성 중요도를 사용하는 방법을 알아보겠습니다. 가볼까요? 1. 순차 특성 선택 알고리즘 모델 복잡도를 줄이는 방법을 Session 11에서 소개했었는데요, 다른 방법은 특성 선택을 통한 차원 축소(dimensionality reduction)가 있습니다. 규제가 없는 모델에서 유용하죠. 차원 축소에는 주요 카테고리인 특성 선택(feature selection)과 특성 추출(feature extraction)이 있습니다. 특성 선택은 특성 중에서 선택하는 것이고, 추출은 특성에서 얻은 정보들로 새 특성을 만드는 것입니다. 특성 선택에 있어서 중요한 것은 문제에 가장 관련이 높은 특성 부분집합을 자동선택하는 것입니다. 이번에는 특성 선택 알고리..

  • [라이트 머신러닝] Session 11. 데이터셋 나누기와 특성 스케일과 선택

    [라이트 머신러닝] Session 11. 데이터셋 나누기와 특성 스케일과 선택

    이번 세션에서는 말로만 듣던 훈련 세트와 테스트 세트로 데이터 셋을 분할하는 작업을 하는 방법에 대해서, 그리고 특성 스케일을 조정하는 방법에 대해서 알아보도록 하겠습니다. 1. 데이터셋 나누기 이번에는 새로운 데이터인 Wine 을 사용합니다. 붓꽃 데이터에서 벗어나신 걸 축하드려요! wine 데이터는 UCI 머신러닝 저장소 에서 다운받을 수 있습니다. 판다스를 이용해 바로 읽어드리는 코드는 아래와 같습니다. df_wine = pd.read_csv('https://archive.ics.uci.edu/' 'ml/machine-learning-databases/wine/wine.data', header=None) # UCI 머신 러닝 저장소에서 Wine 데이터셋을 다운로드할 수 없을 때 # df_wine =..

  • [라이트 머신러닝] Session 10. 누락 데이터와 범주형 데이터 다루기

    [라이트 머신러닝] Session 10. 누락 데이터와 범주형 데이터 다루기

    이번 세션에서는 데이터 전처리 중에서 누락 데이터와 범주형 데이터를 다루는 방법에 대해서 알아보도록 하겠습니다! 1. 누락된 데이터 다루기 실제 모델에서는 여러 이유로 값이 누락된 샘플이 있는 경우가 허다합니다. 보통 누락된 값은 데이터 테이블에 빈 공간이나 예약된 문자열(NULL, NaN)으로 채워집니다. 그럼 이제 샘플을 제거하거나 다른 샘플이나 특성에서 누락된 값을 대체하는 방법을 소개하겠습니다. 첫번째 과정은 당연히 누락된 값을 식별하는 것이겠죠. 일단 예제 데이터셋을 만들어보도록 하겠습니다. read_csv함수는 csv포맷 데이터를 판다스의 데이터 프레임으로 읽어옵니다. 여기 예제에서는 누락 데이터는 NaN으로 표시됩니다. 그리고 아래 코드에 쓰인 StringIO 는 csv_data에 저장된 문..

  • [라이트 머신러닝] Session 9. 결정 트리 학습

    [라이트 머신러닝] Session 9. 결정 트리 학습

    이번 세션에서는 모델의 결정 과정을 설명할 때 아주 중요한 결정 트리(decision tree) 분류기라는 모델을 소개해드리도록 하겠습니다. 1. 결정트리란? 결정 트리는 어떤 질문에 대한 결정을 통해서 데이터를 분해하는 모델이라고 할 수 있습니다. 그림 1에서 예를 들어볼까요? 결정 트리는 훈련 데이터의 특성을 기반으로 샘플의 클래스 레이블을 추정할 수 있는 질문을 학습합니다. 예시는 범주형 변수를 사용했지만 동일한 개념은 붓꽃 데이터셋 같은 실수형 특성에서도 적용됩니다. 예를 들어 "꽃잎의 길이가 3cm보다 긴가요?"라는 예/아니오 질문을 할 수 있습니다. 결정 알고리즘을 사용하면 트리의 루트, 그러니까 트리의 기원이 되는 부분부터 시작해서 정보 이득(Information Gain, IG)가 최대가 ..

  • [라이트 머신러닝] Session 8. 최대 마진 분류와 비선형 문제 풀기

    [라이트 머신러닝] Session 8. 최대 마진 분류와 비선형 문제 풀기

    이번 세션에서는 최대 마진과 SVM, 비선형 분류 문제를 풀어보도록 하겠습니다. 1. 서포트 벡터 머신과 최대 마진 분류 서포트 벡터 머신(support vector machine, SVM)은 퍼셉트론의 확장이라고 할 수 있습니다. 퍼셉트론이 분류 오차를 최소화했다면 SVM의 최적화 대상은 마진을 최대화하는 것입니다. 마진은 클래스를 구분하는 결정 경계와 결정 경계에 가장 가까운 훈련 샘플 사이의 거리입니다. 이 가장 가까운 훈련 샘플을 서포트 벡터(support vector)라고 합니다. 우리가 마진이 큰 결정 경계를 원하는 이유는 일반화할 때 오차가 낮아지는 경향이 있기 때문입니다. 마진이 작으면 작을 수록 결정 경계와 샘플의 거리가 가까워져 오버피팅될 가능성이 높습니다. 마진 최대화의 이해를 위해 ..

  • [라이트 머신러닝]Session 7. 로지스틱 회귀(logistic regression)

    [라이트 머신러닝]Session 7. 로지스틱 회귀(logistic regression)

    이전까지 설명했던 퍼셉트론 알고리즘은 간단하고 좋지만 클래스가 선형적으로 구분되지 않을 때는 수렴하지 않습니다. 따라서, 더 강력한 알고리즘 로지스틱 회귀를 설명하려고 합니다. 이름은 회귀지만 사실은 분류 알고리즘임을 잊지마세요! 1. 로지스틱 회귀의 이해와 조건부 확률 먼저, 오즈비(odds ratio)를 소개하도록 하겠습니다. 오즈는 특정한 상황이 발생활 확률로, 그림 1과 같은 수식을 갖습니다. 여기서 P는 예측할 대상, 양성 샘플을 의미합니다. 여기에 로그 함수를 취하면 로짓(logit)함수가 됩니다. 여기서의 로그는 예상하셨듯 자연로그입니다. logit함수는 0에서 1사이의 값을 입력받아서 실수 범위의 값으로 변환합니다. 가중치 w로 표현되었던 앞선 함수를 기억하시나요? 특성 가중치 합과 로그 ..

  • [라이트 머신러닝] Session 6. 사이킷런 입문!

    [라이트 머신러닝] Session 6. 사이킷런 입문!

    이번 세션에서는 사이킷런 라이브러리를 이용해서 퍼셉트론을 훈련해봄으로써 사이킷런을 시작하도록 하겠습니다. 이번 세션도 전과 마찬가지로 저는 Google Colab으로 실습합니다. Colab에는 이미 사이킷런이 설치되어있으므로 별도의 설치없이 사용하시면 됩니다! https://colab.research.google.com Google Colaboratory colab.research.google.com 1. 데이터 주입과 표준화 이번 세션에서는 세션 4와 5에서 구현한 것과 비슷한 퍼셉트론 모델을 사용할 것입니다. 사용할 붓꽃 데이터 셋은 이미 사이킷런에 포함되어있으므로, 따로 다운받을 필요는 없습니다. 꽃 샘플 중에 꽃입 길이와 너비를 행렬 X에, 꽃 품종을 벡터 Y에 할당합니다. from sklearn..

  • [라이트 머신러닝] Session 5. 퍼셉트론의 메가 진화와 경사하강법!

    [라이트 머신러닝] Session 5. 퍼셉트론의 메가 진화와 경사하강법!

    이전 세션 두 개에서 우리는 퍼셉트론 함수를 학습하고 왔습니다. 기억하시나요? 기억이 안 나신다면 앞 두 개 글을 보고 오시는 것을 추천드립니다. 제가 공부하는만큼 앞 글들이 주기적으로 수정될 수 있음을 알아주시길 바랍니다ㅜㅜ https://dnai-deny.tistory.com/5 https://dnai-deny.tistory.com/6 이번 세션에서는 퍼셉트론 알고리즘의 진화버전인 아달린과 머신러닝에 있어서 매우 중요한 개념인 경사하강법에 대해 알아보도록 하겠습니다. 1. 적응형 선형 뉴런, 아달린 아달린은 단일 층 신경망의 또 다른 종류입니다. 버나드 위드로우와 테드 호프가 개발한 알고리즘이죠. 제목에서 보이듯 퍼셉트론이 진화한 형태라고 할 수 있습니다. 왜냐하면, 아달린에서는 비용 함수(cost ..

  • [라이트 머신러닝] Session 4. 파이썬으로 퍼셉트론 알고리즘 구현하기!

    [라이트 머신러닝] Session 4. 파이썬으로 퍼셉트론 알고리즘 구현하기!

    이번 시간에는 드디어 마침내 프로그래밍이 등장합니다. 이전 섹션에서 공부한 수식들을 파이썬 클래스와 함수로 구현하고, 머신러닝의 대표적인 데이터 중 하나인 붓꽃 데이터셋을 학습시키는 것 까지 해보도록 하겠습니다. 각자 앞 세션에서 이야기한 아나콘다나 파이썬을 설치하셔도 좋습니다. 저는 google colaboratory를 사용하려고 합니다. 설치없이 간편하니 사용하셔도 좋습니다 :) https://colab.research.google.com/ Google Colaboratory colab.research.google.com 1. 객체 지향 퍼셉트론 API 코드를 보기 전에, 먼저 간단한 사전 코드 정의에 대해서 알려드리겠습니다. 아래 Perception 클래스를 초기화한 후 fit 메서드로 학습하고, ..

  • [라이트 머신러닝] Session 3. 퍼셉트론 알고리즘의 수학적 정의

    [라이트 머신러닝] Session 3. 퍼셉트론 알고리즘의 수학적 정의

    제목에 놀라신 분들이 있을 거라고 생각합니다! 지난 시간까지 정말 '라이트' 하게 머신러닝에 대한 넓고 얕은 지식을 배웠다면, 이제는 야금야금 실습에 들어갈 시간입니다. 일단은, 먼저 머신러닝에 대한 간단한 역사와 퍼셉트론 학습 알고리즘에 대해 먼저 소개해드리도록 하겠습니다. 1. 인공 뉴런의 수학적 정의 머신 러닝은 AI를 설계하기 위해 우리 생물의 뇌가 동작하는 방식을 이해하려는 시도입니다. 1943년 워런 맥컬록과 월터 피츠가 처음으로 간소화된 뉴런 개념(맥컬록 피츠 뉴런)을 발표했습니다. 맥컬록과 피츠는 신경 세포를 이진 출력을 만드는 논리회로로 표현했습니다. 수상돌기에 신호가 도착하면 세포체에 합쳐지고, 누적된 신호가 임계값을 넘으면 출력 신호가 생성되어 축삭돌기(말단)을 통해 전달됩니다. 이후..

  • [라이트 머신러닝] Session 2. 머신러닝 시작 전에 알아두면 좋은 것들

    [라이트 머신러닝] Session 2. 머신러닝 시작 전에 알아두면 좋은 것들

    이번 포스트에서는 머신러닝을 시작하기 전에 알아두면 유용한 표기법과 용어, 머신러닝 모델을 만드는 과정과 사용하게 될 패키지에 대해서 알아보도록 하겠습니다. 내용에 대한 피드백은 언제나 환영합니다! 1. 알아두면 좋은 용어와 표기법 데이터셋은 행렬과 벡터를 통해서 표현됩니다. 일반적으로 샘플을 행으로, 특성은 열로 저장됩니다. 위 그림에서 첫 열에 보이는 숫자들은 샘플들을 나타냅니다. 각 샘플별로 특성들은 행 단위로, 각 특성에 대한 샘플들의 값은 열 단위로 표현됩니다. 보통 소문자는 벡터를, 대문자는 행렬을 나타내며, 위 첨자는 i번째 훈련 샘플을, 아래 첨자 j는 훈련 데이터의 j번째 차원을 나타냅니다. 2. 머신러닝 시스템 작업순서 머신러닝 작업은 크게 전처리 - 학습 - 평가 - 예측의 수순을 밟..

  • [라이트 머신러닝] Session 1. 너어얿은 시각으로 보는 머신러닝의 기초

    [라이트 머신러닝] Session 1. 너어얿은 시각으로 보는 머신러닝의 기초

    [라이트 딥러닝] 1. ML Fundamental 2022년 11월 Chat GPT가 대중적으로 굉장히 넓게 알려지면서 서서히 붐이 오고 있던 인공지능 시장이 그야말로 전성기를 맞이했다는 생각이 드는 요즘입니다. LLM(Large Language Model) 뿐만 아니라 CV(Compu dnai-deny.tistory.com ※ 개정판을 작성하고 있습니다! 아래 글 보다는 링크를 확인하시는 것을 추천드립니다. 1. 머신러닝의 출현 여러분은 머신러닝이라는 단어를 처음 들을 때 어떤 생각이 드셨나요? 저는 처음에 머신러닝과 인공지능이 같은 단어라고 생각했습니다. 물론 아예 틀린 말은 아니지만, 머신러닝에는 인공지능이 포함되지 않으니 맞는 말도 아니라고 할 수 있죠. 20세기 후반, 자기 학습 알고리즘이 구현..

  • [라이트 머신러닝] 들어가는 글

    [라이트 머신러닝] 들어가는 글

    이 카테고리에서는 세바스찬 라시카, 바히드 미자리리의 저서 를 통해 머신러닝에 대한 기본 지식을 넓히고, 다른 카테고리와 마찬가지로 함께 지식을 공유하고 공부해나가려고 합니다. 저 또한 머신러닝에 대해서는 거의 문외한에 가깝고, 아시다시피 프로그래밍을 시작하고 제대로 공부한 기간이 길지 않습니다. 제게 질문하시면 저는 성심성의껏 제가 아는 만큼 알려드리고 모르는 건 찾아드리려 노력할 것입니다. 하지만 제가 아닌 누구라도 이 블로그를 보시는 모든 분들이 함께 질문하고 대답할 수 있는 건강한 댓글의 Q&A 문화가 생겨나길 바랍니다! 모든 글에 잘못된 부분은 댓글을 통해 편하게 지적해주시면 감사하겠습니다. 앞으로 잘 부탁드립니다. 함께 공부해요 :)