뱀게임 인공지능을 만들어보자.(1)
·
카테고리 없음
이번에는 간단하게 뱀 게임을 학습하는 모델을 만들어 보려고 한다. 뱀 게임은 이전에 만든 것을 가져와서 쓸 것이다. (github.com/2jun0/SnakeGame) 예시로 사용할 실행화면은 위와 같다. 빨간색 점이 음식(목표)이고 파란색이 뱀(진한 파랑 : 머리, 연한 파랑 : 몸)이다. 원래 이 게임은 상하좌우키로 뱀을 움직이는 방식이였지만, 잘 생각해보면, 역방향으로는 가는게 불가능 하다. 그래서 갈 수 있는 방향은 아래처럼 3방향인데, 뱀의 진행방향에 따라 이동할 수 있는 방향이 바뀐다. 그래서 고민끝에 어떤 블로그에서 이 게임을 구현하는 것을 보고 [왼쪽으로 돌기, 오른쪽으로 돌기, 앞으로 전진] 이렇게 3개의 Action으로 구성했다. 모델의 입력으로 들어갈 레이블은 총 5개이다. 0:빈공간..
[DB/오류] Exception has occurred: TypeError %d format: a number is required, not str
·
프로그래밍/기타
Exception has occurred: TypeError %d format: a number is required, not str Pymysql에서 사용하는 sql에서 %s는 그냥 "여기 파라미터가 들어갑니다." 라는 뜻이다. "string"이 들어간는 말이 아니다. 고로, %d, %f 이런것을 써서도 안된다.
[DB/오류] 1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ~~"
·
프로그래밍/기타
Mysql 쿼리를 보내는 프로그램을 테스트 하다보면, 다음과 같은 오류를 발견하곤 한다. Exception has occurred: ProgrammingError (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '~~~~' 오류의 원인은 sql 쿼리 문법이 틀린 것으로, 따옴표를 붙혀주거나 sql 쿼리를 잘 살펴 보아야 한다. 필자는 아래와 같은 식으로 했다가 아차 싶어서 update A set B = 10 C =10 where D = 1 이렇게 고쳤다. update A set B = 10, C =10..
Could not load dynamic library 'cudnn64_7.dll'; dlerror: cudnn64_7.dll not found 해결방법
·
프로그래밍/기타
Tensorflow gpu를 사용하기 위해 Cuda 10.2를 설치하고 cuDNN 8.x (최신버전)을 설치했는데, 아래와 같은 오류가 나왔다. 그래서 구글에서 찾아보니 Cuda 10.1를 설치해야 된다더라. 설치했던 10.2를 열심히 지우고 Cuda를 10.1로 다시 설치했더니!!! 알고보니 필요한 파일은 cuda64_7.dll... 텐서플로우는 cuDNN 8.x가 아니라 7.x가 필요했던 것이다. 알맞은 Cuda 버전의 cuDNN을 7.x을 다운받으면 (필자는 10.1) 아래와 같이 cuda64_7.dll파일이 있다. 적용한 후에 다시 실행해보니 gpu를 정상적으로 인식했다.
[정규화] Batch Normalization
·
프로그래밍/머신러닝
* 본 내용은 공부한 것을 정리한 글이므로, 오류가 있을 수 있습니다. Internal covariate shift Internal covariate shift는 번역하면 '내부 공변량 변화'으로, 데이터가 모델에 입력으로 들어갈때, 은닉층의 입력 분포가 다르다는 것이다.(입력은 정규화 할 수 있다.) 내부 레이어의 입력은 이전 레이어의 출력과 같으므로, 학습할 때마다 가중치 값이 변하고 분포는 또 바뀌게 된다. Batch Normalization을 하게 된 이유가 이러한 문제를 해결하기 위함이였다. Batch Normalization 논문에서는 입력 데이터의 정규화 처럼 은닉층의 입력도 정규화를 하면, 안정적으로 학습이 가능할 것 이라는 것으로 생각했다. (실제로도 그렇고) 그렇다면 어떻게 정규화를 할..
[컨볼루션] ShuffleNet
·
프로그래밍/머신러닝
*본 내용은 공부 정리용으로 작성되었으며, 내용에 오류가 있을 수도 있습니다. ShuffleNet ShuffleNet은 기존 MobileNet과 같은 이유로 만들어졌다. 주요 목적은 변수와 연산량을 줄이는 것으로, MobileNet에선 Depth-wise separable convolution을 썼지만 이번엔 Group convolution과 Channel Shuffle을 사용한다. MobileNet과 Depth-wise separable convolution, Group convolution에 대해선 이전에 포스팅 한 것이 있다. Group convolution Group Convolution은 전에 AlexNet에서 사용되었는데, 그 때에는 GPU의 성능 한계 때문에 병렬처리를 위해 channel을 ..
[컨볼루션] Group convolution
·
프로그래밍/머신러닝
Group convolution group convolution은 입력의 채널들을 여러개의 그룹으로 나누어 convolution을 수행하는 방식이다. 왜 이런 방식을 쓰는 것일까? 그룹이 독립적으로 나누어 계산되기 때문에, 병렬처리에 유리하고 변수가 적게 쓰인다. 변수개수는 다음과 같다(K = 필터크기, N = 출력채널크기, M = 입력채널크기, g = 그룹 개수) g개의 그룹이 입력채널M/g에서 출력채널N/g을 생성한다. $$g*K^2 \frac{N}{g} * \frac{M}{g} = \frac{K^2NM}{g}$$ AlexNet에서도 사용이 되었는데, 그땐 GPU의 성능이 부족해서 병렬처리 & 적은 변수를 위해 사용했었다.
[컨볼루션] Mobilenet
·
프로그래밍/머신러닝
* 다음은 공부용으로 기록된 것으로 내용에 오류가 있을 수 있습니다. 오늘은 무거운 CNN 모델을 임베디드나, 휴대폰 환경에서 극복하기 위해 개발된 2개의 모델을 살펴보겠다. Mobilenet Mobilenet은 2017년에 발표된 논문에서 처음 소개 되었으며, 저번에 설명했던 Depth-wise separable convolution를 사용해서 경량화한 모델이다. 기존 CNN 모델인 VGG-16과 비교해 보면, 먼저 3x3 -> 1x1 필터를 적용한 것을 보아 Mobilenet에서 depthwise separable convolution을 사용한 것을 알 수 있고, pooling을 stride 2로 대신했다. pooling과정도 줄어들고, depthwise separable convolution을 사용..
2jun0
2jun0의 블로그