분류 전체보기

    [서평] 게임 AI를 위한 탐색 알고리즘 입문

    [서평] 게임 AI를 위한 탐색 알고리즘 입문

    이 책은 게임 AI의 기초부터 심화 내용까지 깊이 있게 다루며, 개발자가 직접 AI를 구현해보는 실습까지 포함하고 있어 이론과 실제의 균형을 매우 잘 잡고 있습니다. 1장에서는 게임 AI의 기본 개념을 설명하고, 게임의 종류별로 적용할 수 있는 탐색 알고리즘을 소개합니다. 이는 게임 개발에 입문하는 이들에게 필수적인 지식을 제공합니다. 2장은 개발 환경 설정 방법을 자세히 안내하여 독자들이 본격적인 게임 AI 개발을 시작하기 전에 필요한 준비를 할 수 있게 도와줍니다. WSL 설치부터 C++ 개발 환경 구축까지의 과정을 단계별로 설명함으로써 초보자들도 쉽게 따라할 수 있습니다. 3장 이후의 장들은 각기 다른 형태의 게임에 적합한 다양한 탐색 알고리즘을 소개하고, 이를 구현하는 방법을 실제 게임 예제를 통..

    [서평] GPT-4를 활용한 인공지능 앱 개발

    [서평] GPT-4를 활용한 인공지능 앱 개발

    ChatGPT의 등장 이후 지금까지 많은 사람들이 GPT를 더욱 효과적으로 활용하기 위해 연구를 진행해왔으며, 세상에 긍정적인 영향을 미칠 수 있는 GPT 기반 애플리케이션을 개발하고 있습니다. 이러한 흐름에 발맞춰, GPT를 처음으로 활용하는 개발자들과 연구자들을 위해 한빛미디어에서 이라는 책이 출간되었습니다. 다른 GPT 관련 도서들과 달리 은 NLP 분야의 발전 과정과 GPT에 대한 개괄적인 내용부터 설명을 시작합니다. 이는 NLP 분야에 대한 기초 지식은 있지만, GPT 기술의 발전을 따라잡지 못한 독자들에게 매우 유용할뿐만 아니라, GPT로 처음 NLP 분야에 입문하신 분들에게도 많은 도움이 될 것 같습니다. 간단한 NLP 분야에 대한 소개 다음으로 OpenAI의 Playground를 통한 GP..

    ML. Pinball Loss

    ML. Pinball Loss

    주로 Quantile Prediction을 위해 사용되는 Loss로 Quantile Loss라고도 불린다. 계산식은 다음과 같다.$$ \begin{align} \mathcal{L} &=(Y_{t}-Q_{t}(u)){\cdot}u{\cdot}{\mathbb{1}\{Q_{t}(u){\leq}Y_{t}\}} +(Q_{t}(u)-Y_{t}){\cdot}(1-u){\cdot}{\mathbb{1}\{Q_{t}(u){\gt}Y_{t}\}} \\ \\ &=\begin{cases} (Y_{t}-Q_{t}(u)){\cdot}u & if $Q_{t}(u){\leq}Y_{t}$, \\ \\ (Q_{t}(u)-Y_{t}){\cdot}(1-u) & otherwise. \end{cases} \end{align} $$ 이 때 $Y_..

    SQLAlchemy. 조건식의 원하는 곳에 괄호 추가하기

    Calendar라는 테이블에 Mapping되는 모델을 다음과 같이 정의했다고 하자. from sqlalchemy import Column, INTEGER from sqlalchemy.orm import declarative_base Base = declarative_base() class Calendar(Base): __tablename__ = "calendar" year = Column(INTEGER, primary_key=True) month = Column(INTEGER, primary_key=True) day = Column(INTEGER, primary_key=True) ... 위 테이블에서 2021년 12월과 2022년 1월의 정보를 얻고자 하면 다음과 같이 SQL Query를 작성할 것이다...

    Alembic. 버전 관리 테이블이 생성될 스키마 지정하기

    Alembic이 적용된 DB에는 적용된 Revision을 기록하기 위한 `alembic_version`과 같은 테이블이 생성되게 된다. (큰 상관이 없을 수도 있지만) 서비스와 관련된 테이블과 같은 곳에 있는 것은 구분을 어렵게 하므로 다음 방법을 통해 Alembic과 관련된 테이블을 별도의 스키마에 저장할 수 있다. # In env.py, from sqlalchemy.schema import CreateSchema def run_migrations_online(): ... with connectable.connect() as connection: context.configure( connection=connection, target_metadata=target_metadata, include_schem..

    SQLAlchemy. CASE WHEN 구문 with Label

    from sqlalchemy import case session.query( ..., case( (Table.column == "조건1", "값1"), (Table.column == "조건2", "값2"), else_="예외값", ).label("새로운_칼럼명") ).filter( ... ) 만약 Equality 조건만 있다면 case.value를 사용하여 구문을 단순화할 수 있다. from sqlalchemy import case session.query( ..., case( {"조건1": "값1", "조건2": "값2"}, value=Table.column, else_="예외값", ).label("새로운_칼럼명") ).filter( ... ) 잘못된 내용, 오타, 부정확한 문장 등 어떤 피드백이든 환..

    Alembic. 동적으로 DB 접속 정보 만들기

    일반적으로 DB 접속 정보는 코드 형상 관리 도구에 포함되지 않아야하지만, Alembic에서 일반적으로 DB 접속 정보를 저장하게 되는 alembic.ini 파일을 DB 접속 정보 때문에 코드 형상 관리 도구에 포함하지 않고 개발자들이 공유하는 방식으로 이용하면 배보다 배꼽이 큰 상황이 될 수 있다. 또한, 개발 환경 별로 DB가 나누어져 있을 경우 Section을 나누어 서로 다른 DB 접속 정보를 넣어줄 수도 있어야 한다. alembic.ini를 이용해 일반적인 Configuration들은 공유하되 DB 접속 정보과 같이 코드 형상 관리 도구에 포함되지 않아야 하는 정보들을 섹션 별로 관리할 수 있는 방법들은 다음과 같다. env.py에서 alembic.ini로 인자 넘기기 1. alembic.ini..

    [FastAPI]FastAPI의 비동기 함수 동작 방식

    앞선 글 2023.03.21 - [CS/Python] - FastAPI의 동기 함수 동작 방식에서 FastAPI는 서버 Blocking을 막기 위해 동기 함수를 스레드풀로 넘겨 작업한다는 것을 확인했습니다. 그럼 비동기 함수는 어떻게 동작할까요? FastAPI를 만든 tiangolo가 한 이슈에 단 답변으로 이를 확인할 수 있습니다. Any async function can only be run on the main thread, on the main event loop. There's no other way around in Python. So, if there's an async path operation (route) function or an async dependency function, kno..

    [FastAPI]FastAPI의 동기 함수 동작 방식

    일반적인 파이썬 코드에서는 동기 함수는 순서대로 작동하고, 비동기 함수는 병렬적으로 작동합니다. 그럼 FastAPI 내의 동기 함수만을 이용한 엔드포인트에 다수의 HTTP 요청을 보내면 동기 함수를 실행하느라 서버가 요청을 받지 못하는 상황이 될 것 같다는 의문이 들었습니다. 의문을 해결하기 위해 내부적으로 FastAPI가 어떤 식으로 동작하는지 알아보겠습니다. 우선 다음과 같이 작성된 동기 함수로 작성된 엔드포인트에 `curl`을 이용하여 두 번의 HTTP 요청을 보내보겠습니다. @app.get("/sync") def sync(): print("Hello") time.sleep(2) print("Bye") # In run_sync.txt url = "http://127.0.0.1:8000/sync" u..

    [Selenium] 크롬의 구글 이미지 검색 결과가 오래된 버전의 크롬으로 로드되는 경우 해결책

    상황 최신 버전의 크롬 드라이브를 사용하였음에도 불구하고 Selnium을 이용하여 구글 이미지 검색 결과 페이지에 진입시 오래된 버전(현재의 스크롤 다운 방식이 아닌 ‘다음 결과’ 버튼 방식)의 크롬으로 페이지 로드 원인 user-agent에 크롬과 관련된 인자가 포함되지 않은 것이 원인으로 보임 해결책 Selenium의 user-agent로 크롬과 관련된 인자(예: Chrome/105.0.0.0)를 추가 잘못된 내용, 오타, 부정확한 문장 등 어떤 피드백이든 환영합니다. 감사합니다.