diff --git a/.gitignore b/.gitignore
index 23834043..2f4395cb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -25,6 +25,6 @@ _writing/warehouse
_deepbrick/*
_writing/abstract/*
_posts/waiting/*
-_projects/*
+_projects/temp/*
_writing/graph/*
_writing/book/*
\ No newline at end of file
diff --git a/_config.yml b/_config.yml
index 8c94f66c..1feb470a 100755
--- a/_config.yml
+++ b/_config.yml
@@ -34,3 +34,10 @@ facebook:
markdown: kramdown
encoding: UTF-8
+
+plugins:
+ - jekyll-paginate # 플러그인 사용을 의미한다.(Jekyll 3)
+# pagination settings
+paginate: 10 # 한 페이지당 보여줄 posts 수
+# :num은 페이지마다 번호를 각각 부여한다.
+paginate_path: "/posts/page/:num" # 다음 페이지에 해당하는 URL
diff --git a/_includes/footer.html b/_includes/footer.html
index 77244163..cb775461 100755
--- a/_includes/footer.html
+++ b/_includes/footer.html
@@ -1,5 +1,5 @@
diff --git a/_includes/header.html b/_includes/header.html
index 3bc1ebb6..b18872f9 100755
--- a/_includes/header.html
+++ b/_includes/header.html
@@ -22,18 +22,7 @@
케라스
- {% endif %}
- {% if page.path == "kaggle.md" %}
-
-
- 캐글
-
-
- {% else %}
-
- 캐글
-
- {% endif %}
+ {% endif %}
{% if page.path == "seminar.md" %}
@@ -56,13 +45,14 @@
김태영
{% endif %}
-
-
케라스코리아
-
-
-
캐글코리아
-
- {{ site.motto }}
+
diff --git a/_includes/pagination.html b/_includes/pagination.html
new file mode 100644
index 00000000..ae1aa223
--- /dev/null
+++ b/_includes/pagination.html
@@ -0,0 +1,39 @@
+
diff --git a/_layouts/main_page.html b/_layouts/main_page.html
new file mode 100755
index 00000000..6ca6bef7
--- /dev/null
+++ b/_layouts/main_page.html
@@ -0,0 +1,13 @@
+---
+layout: default
+---
+
+
+
+
+
+ {{ content }}
+
+
diff --git a/_posts/2018-12-25-Astronomical_Cnalender_2019.md b/_posts/2018-12-25-Astronomical_Cnalender_2019.md
index 84be96ab..5caac1d4 100644
--- a/_posts/2018-12-25-Astronomical_Cnalender_2019.md
+++ b/_posts/2018-12-25-Astronomical_Cnalender_2019.md
@@ -2,7 +2,7 @@
layout: post
title: "달력은 역시 천문력으로 보는 것이 제 맛 - 2019 천문력"
author: 김태영
-date: 2019-12-25 00:00:00
+date: 2018-12-25 00:00:00
categories: etc
comments: true
image: http://tykimos.github.io/warehouse/2018-12-25-Astronomical_Cnalender_2019_title.jpg
diff --git a/_posts/2018-12-31-2019_1st_ML_month_with_KaKR.md b/_posts/2018-12-31-2019_1st_ML_month_with_KaKR.md
index dc7e70af..b483945f 100644
--- a/_posts/2018-12-31-2019_1st_ML_month_with_KaKR.md
+++ b/_posts/2018-12-31-2019_1st_ML_month_with_KaKR.md
@@ -2,7 +2,7 @@
layout: post
title: "캐글 코리아와 함께하는 첫번째 캐글 시작하기 (구글 코리아 후원)"
author: 김태영
-date: 2019-12-31 00:00:00
+date: 2018-12-31 00:00:00
categories: etc
comments: true
image: http://tykimos.github.io/warehouse/2018-12-31-2019_1st_ML_month_with_KaKR_title.png
diff --git a/_posts/2019-1-30-Keras_to_SNN.md b/_posts/2019-1-30-Keras_to_SNN.md
index b5ecefa3..d85fd7c8 100644
--- a/_posts/2019-1-30-Keras_to_SNN.md
+++ b/_posts/2019-1-30-Keras_to_SNN.md
@@ -7,7 +7,7 @@ categories: etc
comments: true
image: http://tykimos.github.io/warehouse/2019-1-30-Keras_to_SNN_title.png
---
-네이처 머신러닝에 등재된 휘스톤 방법을 소개드립니다. 이 방법은 케라스 모델을 부가적인 코드없이 쉽게 Spiking Neural Network로 만들어줍니다.
+신경망은 여러분야에서 탁월한 결과를 내놓곤 있지만 학습 시에 막대한 계산량이 필요하고 사용 시에도 만만치 않기에 좀 더 생물학적인 방법으로 신경망 구성을 하고자하는 노력이 있었고 그러한 신경망을 Spiking Neural Network(SNN)이라 부릅니다. 기존 케라스 모델을 부가적인 코드없이 SNN으로 변환하는 휘스턴 방법이 네이처 머신러닝에 소개되었습니다.

diff --git a/_posts/2019-2-23-KCD_2019_Workshop_Keras_Magic_Show.md b/_posts/2019-2-23-KCD_2019_Workshop_Keras_Magic_Show.md
new file mode 100644
index 00000000..a40db956
--- /dev/null
+++ b/_posts/2019-2-23-KCD_2019_Workshop_Keras_Magic_Show.md
@@ -0,0 +1,115 @@
+---
+layout: post
+title: "KCD 2019 워크숍 - 케라스 마술쇼"
+author: 김태영
+date: 2019-02-23 00:00:00
+categories: etc
+comments: true
+image: http://tykimos.github.io/warehouse/2019-2-23-KCD_2019_Workshop_Keras_Magic_Show_title_1.png
+---
+2019년 2월 23일(토) 대한민국 최대 규모의 커뮤니티 소통의 장인 KCD(Korea Community Day) 2019 워크숍에서 케라스 마술쇼를 선보이게 되었습니다.
+
+
+
+---
+### 프로그램
+
+|시간|주제|
+|-|-|
+|15:40 - 15:50|케라스 코리아와 함께하기(운영진)|
+|15:50 - 16:15|카드 문양 바꾸기 마술(김태영)|
+|16:15 - 16:40|이상한 폰트나라으로 뛰어들기 마술(황준원)|
+|16:40 - 17:05|폰으로 손 글씨 알아 맞추기 마술(전미정)|
+|17:05 - 17:30|한글 띄워쓰기 고쳐주는 마술(정연준)|
+|17:30 - 17:55|캐글 보물상자 열기(이유한)|
+
+---
+### 케라스 코리아와 함께하기(운영진)
+
+#### 연사소개
+* 김태영님 : 케라스 코리아 커뮤니티 총괄입니다.
+* 전미정님 : 케라스 코리아에서 블로그 운영 및 컨트리뷰팅 관리를 담당하고 있습니다.
+* 황준원님 : 케라스 코리아 단톡방 운영을 담당하고 있습니다.
+* 정연준님 : 케라스 코리아에서 케라스 공식 문서 한글화 관리를 담당하고 있습니다.
+* 이유한님 : 캐글 코리아 운영자이시며 특별히 모셨습니다.
+
+#### 발표소개
+케라스 코리아와 함께 케라스를 즐기기 위해서 오픈 커뮤니티, 블로그, 페이스북, 단톡방 등을 이용하는 방법에 대해서 알아봅니다.
+
+#### 참고
+* [발표자료](https://docs.google.com/presentation/d/1YcpkJJGe9s7Y1vzAQeGP7gqHGb4W0hNa1etfUIY8uzU)
+
+---
+### 카드 문양 바꾸기 마술(김태영)
+
+#### 연사소개
+비전공자분들이 직관적이고 간결한 딥러닝 라이브러리인 케라스를 이용해 딥러닝 입문을 쉽게 할 수 있도록 '블록과 함께하는 파이썬 딥러닝 케라스'의 집필과 '김태영의 케라스 블로그', '케라스 코리아', '캐글 코리아'를 운영하고 있습니다. 또한 (주)인스페이스에서는 기술이사로서 “태양에서 세포까지 딥러닝”, “게임에서 우주까지 강화학습”의 모토로 여러분야 인공지능을 적용하고자 활발히 연구개발하고 있습니다. [페북 프로필](https://web.facebook.com/tykimo)
+
+#### 발표소개
+센싱 데이터나 이미지를 다루는 분야에서 실제적으로 많이 활용할 수 있는 이미지 변환 모델에 대해서 알아봅니다. 이를 위해 딥러닝 모델, 학습 과정 등 기초적인 것부터 CNN 및 GAN, Conditional GAN, Pix2Pix까지 블록 및 레고사람을 비유하여 손쉽게 개념을 익히고 간결한 케라스 코드를 보면서 어떻게 구현되었는 지 살펴봅니다. 이 모델을 기반으로 카드 문양 마술로 프로토타이핑을 한 것과 인류가 지금 껏 보지 못했던 태양 후면의 자기장 영상을 생성하는데 실제 적용한 사례까지 살펴보겠습니다. 시계열 고해상도 이미지에 최적화된 Vid2Vid 모델도 간단히 살펴보겠습니다.
+
+#### 참고
+* [발표자료](https://docs.google.com/presentation/d/11Nw_eGQpDWSNXZ6z5OzyQ9MjU_1n_ScWDIWNGi7ZDKs)
+
+---
+### 이상한 폰트나라으로 뛰어들기 마술(황준원)
+
+#### 연사소개
+성균관대학교 소프트웨어학과에 재학 중인 학부생이며, 컴퓨터비전을 주로 배워왔고 딥러닝 분야를 전반적으로 공부하고 있습니다. 주로 인턴과 페이스북 그룹 활동으로 다른 연구자 및 개발자 분들과 교류하고 있으며 케라스 코리아 카카오톡 오픈채팅을 관리하고 있습니다.
+
+#### 발표소개
+발표 주제는 “이상한 폰트 세계로 뛰어들기 마술” 입니다. 제가 인턴을 하며 진행했던 프로젝트가 폰트를 생성하는 문제를 다뤘고, 이에 제가 프로젝트를 진행하며 주로 사용했던 기술과 오픈소스 프로젝트들을 소개하는 자리를 가지려고 합니다. 가장 먼저 폰트, 서체의 간단한 설명과 왜 서체 제작이 어렵고 노력이 많이 드는지를 알아본 후에, Word2Vec과 비슷한 방식의 Font2Vec과 그 원리를 설명하려 합니다. 이후 Autoencoder를 활용한 Embedding 기법과 그 결과를 시각화하는 방법을 소개하고, 끝으로 폰트를 생성하는 프로젝트에서 제가 많이 참고했고, 또 기술적으로나 결과로나 멋진 “zi2zi” 프로젝트를 소개하려 합니다. 컴퓨터비전 분야의 발표로 무엇을 할까 고민을 많이 했지만, 제가 직접 해봤던 내용을 보여드리는 게 좋을 것 같아 Autoencoder 내용 위주로 구성하게 되었습니다. 참여한 여러분들이 Autoencoder의 놀라움과 그 능력을 경험하고 가셨으면 좋겠습니다.
+
+#### 참고
+* [발표자료](https://docs.google.com/presentation/d/1qdFDWWAa69Zlb7sYJmmk7RTKAzbuF3xe1N-N6msB_2w)
+
+### 폰으로 손글씨 알아 맞추기 마술(전미정)
+
+#### 연사소개
+안녕하세요, iOS 개발자 미정입니다. 언제 어디서나 나와 함께하는 모바일 기기에 딥러닝 모델을 심어보고 싶어 케라스를 시작했습니다. 결코 AI 전문가는 아니지만, 급속히 발전하는 인공지능과 머신러닝 기술에 흥미를 느껴 혼자 공부하고 구현해보는 걸 즐깁니다. 공부하면서 알게 된 딥러닝의 재미와 경험을 많은 사람들과 공유하고 싶습니다 🤗
+
+#### 발표소개
+이번 발표 주제는 우리 생활과 아주 밀접한 두 가지인 '모바일 기기'와 '한글'입니다. 머신러닝 공부를 시작한 이후, 숫자 손 글씨 인식과 알파벳 손글씨 인식 모델이 활발히 연구되는 걸 보면서 '한글 손글씨 인식 모델을 만들어보고 싶다'는 생각을 했었습니다. 그동안 실현하기 위한 여러 가지 방법을 모색하다 드디어 첫 발걸음을 내딛게 된 이야기를 들려드리려합니다. 한글 손글씨 이미지 데이터를 생성하고, 케라스로 CNN 모델을 만들어 학습시킨 뒤, CoreML을 활용해 iOS 기기에서 사용할 수 있는 애플리케이션을 만드는 과정을 소개합니다. 한글과 모바일을 사랑하는 딥러닝 비전문가의 좌충우돌 이야기를 들으며 여러분들도 딥러닝을 자신의 분야에 적용할 수 있다는 희망과 가능성을 느끼면 좋겠습니다 🕊
+
+#### 참고
+* 발표자료
+
+---
+### 한글 띄워쓰기 고쳐주는 마술(정연준)
+
+#### 연사소개
+셀바스AI에서 전문연구요원으로 복무중이며, 인공지능, 특히 컴퓨터 비전과 관련된 연구 및 업무를 주로 하고 있습니다. 최근 가장 큰 관심사는 케라스와 오픈소스이며, 케라스 코리아 슬랙 관리와 케라스 공식 문서 한글화 프로젝트 진행을 맡고 있습니다.
+
+#### 발표소개
+이번 발표 주제는 많은 사람들이 어려움을 겪고있는 “띄어쓰기”입니다. 최근 문서 번역 프로젝트를 진행하면서 띄어쓰기에 대한 가이드라인을 제시할 방법이 필요하다는 것을 느껴, 이를 딥러닝으로 해결해보고자 하는 과정을 소개해드리려 합니다. 데이터 전처리부터 모델 설계와 구현, 학습까지의 과정을 코드와 함께 살펴보며 케라스와 함께라면 누구나 쉽게 아이디어를 현실로 만들 수 있다는 것을 느낄 수 있는 자리가 되면 좋겠습니다🙂
+
+#### 참고
+* [발표자료](https://docs.google.com/presentation/d/1UZI158rtQXE778aukKo3Cno7i_RHDaMDfTpKiCjJ1dk/edit?usp=sharing)
+
+---
+### 캐글 보물상자 열기(이유한)
+
+#### 연사소개
+캐글 코리아 운영자, 카이스트 박사과정이며 캐글을 취미로 하는 대학원생입니다. 화학공학의 여러 문제를 머신러닝으로 풀려고 노력하고 있습니다. 데이터 사이언스, 머신러닝, 딥러닝을 캐글에서 연마하였습니다. 캐글 속 공유 정신에 감명받아, 데이터 사이언스가 취미가 되는, “모두의 데이터사이언스”를 꿈꾸며 “캐글 코리아”를 운영하고 있습니다. [페북 프로필](https://web.facebook.com/youhan.lee.33o)
+
+#### 발표소개
+캐글을 소개하고 오픈 커뮤니티인 캐글 코리아의 블로그, 페이스북, 단톡방 이용하는 방법과 전국적으로 이뤄지고 있는 스터디 및 대회에 대해 소개합니다.
+
+#### 참고
+* [발표자료](https://drive.google.com/open?id=1hUpqatYVmpUJ2q1_l-xGBQ9-lRQUNRT-AhULt9RqhyE)
+
+---
+### 신청
+KCD 2019에서는 케라스 코리아 커뮤니티 말고도 국내에서 활발하게 활동하고 있는 여러 커뮤니티와의 소통할 수 있는 장이 마련되어 있습니다. 아래 링크에서 신청해주세요~
+
+* [신청하기](https://kcd2019.festa.io/)
+
+---
+### 같이 보기
+
+* [케라스 코리아 페북](https://www.facebook.com/groups/KerasKorea/)
+* [케라스 코리아 슬랙 초대](https://join.slack.com/t/keraskorea/shared_invite/enQtNTUzMTUxMzIyMzg4LWQ3YmQ1YTdmNTYxOTAwZTExNmFmOGM3M2QyMjIyNzYwYTY2YTY2ZjBlNDNlZDdmMTU0NGVjYzFkMWYxNzE0ZDA)
+* [케라스 코리아 단톡방](https://open.kakao.com/o/g93MSBV)
+* [케라스 코리아 블로그](http://keraskorea.github.io)
+* [케라스 공식 문서 한글번역 참여방법](https://tykimos.github.io/2019/02/06/Contribution_of_Keras_Document_to_Korean_Translation/)
+* [케라스 기초 강좌](https://tykimos.github.io/lecture/)
diff --git a/_posts/2019-2-6-Contribution_of_Keras_Document_to_Korean_Translation.md b/_posts/2019-2-6-Contribution_of_Keras_Document_to_Korean_Translation.md
new file mode 100644
index 00000000..13e96c87
--- /dev/null
+++ b/_posts/2019-2-6-Contribution_of_Keras_Document_to_Korean_Translation.md
@@ -0,0 +1,48 @@
+---
+layout: post
+title: "케라스 공식 문서 한글번역 참여방법"
+author: 정연준, 김태영
+date: 2019-02-06 00:00:00
+categories: etc
+comments: true
+image: http://tykimos.github.io/warehouse/2019-2-6-Contribution_of_Keras_Document_to_Korean_Translation_title.png
+---
+케라스 사용자라면 케라스 공식 문서 사이트([https://keras.io/](https://keras.io) 를 한 번 쯤은 방문하셨을 겁니다. 이 사이트에 들어가면 가장 반가운 글귀가 있죠. 바로... "You have just found Keras." 입니다.
+
+
+
+늘 들어갈 때마다 만약 한글 문서가 있다면 정말 좋겠다는 생각이 있었는데, 이번에 프랑소와 쏠례님께 부탁하여 한국어 번역을 위한 리포지터리를 하나 만들었습니다.
+
+* [한국어 번역 리포지터리](https://github.com/keras-team/keras-docs-ko/)
+
+현재 한글화가 필요한 모든 문서들은 위 리포지터리의 sources폴더 안에 원문으로 저장되어 있으며, 작업은 Github의 Pull Request단위로 이루어질 예정입니다. 작업은 수시로 진행 예정이며, 정해진 기간은 없으나 많은 분들이 참여해 주신다면 수개월 내로 끝낼 수 있지 않을까 생각합니다. 위 문서들을 번역한 후 해당 내용을 PR로 만들어 올려주시면, 케라스 코리아의 정연준님과 김태영님이 리뷰 및 필요하다면 수정 후 반영할 예정입니다.
+
+[](https://youtu.be/FB3aU__zFfU)
+
+번역에 많이 참여하신 분들은 아래와 같이 기여 정도를 확인할 수 있습니다.
+
+
+
+---
+### 기여를 많이 해주시는 분께
+2월에서 4월까지 석달간 기여도가 높은 세 분을 선정해서 구글 코리아에서 제공하는 텐서플로우 공식 티셔츠를 선물로 드리겠습니다. 단 이전 달에 이미 받으신 분은 추가로 받지 못하고 다음 순위의 분께 드리도록 하겠습니다.
+
+ `본 프로그램의 구글 코리아의 후원을 받고 있습니다.
+
+---
+### 작성 참고사항
+
+하나의 PR에 해당하는 작업 분량은 정해진 것이 없습니다. 한 문장 혹은 파일 전체를 번역한 것일 수도, 아니면 단순히 오타를 수정한 것일 수도 있지만, 분량이 많을 수록 리뷰 기간이 길어질 수 있습니다. PR과 리뷰 과정의 예시는 앞서 진행된 일본/중국어 번역 작업들을 참조하시면 좋을 것 같습니다.
+
+* [일본어 번역](https://github.com/keras-team/keras-docs-ja/pulls?q=is%3Apr+is%3Aclosed)
+* [중국어 번역](https://github.com/keras-team/keras-docs-zh/pulls?q=is%3Apr+is%3Aclosed)
+
+많은 분들과 함께해 모두 컨트리뷰터가 된다면 좋을 것 같습니다. 케라스 공식 문서 한글 번역 컨트리뷰션 운영은 정연준님이 할 예정입니다. 관련 문의가 있으신 분은 연락주세요~
+
+* [정연준님 프로필보기](https://www.facebook.com/younjoon.chung)
+
+---
+### 같이 보기
+
+* [케라스 기초 강좌](https://tykimos.github.io/lecture/)
+* [케라스 코리아](https://www.facebook.com/groups/KerasKorea/)
diff --git a/_posts/2019-2-9-Keras_and_Kaggle_National_Concert.md b/_posts/2019-2-9-Keras_and_Kaggle_National_Concert.md
new file mode 100644
index 00000000..23531b6f
--- /dev/null
+++ b/_posts/2019-2-9-Keras_and_Kaggle_National_Concert.md
@@ -0,0 +1,141 @@
+---
+layout: post
+title: "케라스 & 캐글 전국콘서트"
+author: 김태영
+date: 2019-02-09 00:00:00
+categories: etc
+comments: true
+image: http://tykimos.github.io/warehouse/2019-2-9-Keras_and_Kaggle_National_Concert_title_5.png
+---
+요즘 인공지능 기술이 여러분야에서 각광받고 있는 가운데, 머신러닝/딥러닝 모델 개발 및 데이터 분석 기술의 중요성이 커지고 있습니다. 관심은 있지만 아직 시작하시지 않았거나 이제 막 입문하시는 분들에게 딥러닝 모델과 데이터 분석 기술을 손에 쥐어드릴 수 있도록 케라스 코리아와 캐글 코리아 운영자가 직접 케라스 및 캐글을 전국적으로 소개하고자 합니다.
+
+
+
+#### 케라스란?
+
+딥러닝의 놀라운 성과로 많은 분들이 관심을 가지고 있습니다. 그와 더불어 비전공자들이 쉽게 딥러닝 모델을 개발할 수 있도록 공개 라이브러리들도 많이 있습니다. 그 중 하나인 케라스는 아이디어를 빨리 구현하고 실험하기 위한 목적에 포커스가 맞춰진 만큼 굉장히 간결하고 쉽게 사용할 수 있도록 파이썬으로 구현된 상위 레벨의 라이브러리입니다. 이 라이브러리를 통해 쉽게 컨볼루션 신경망, 순환 신경망 또는 이를 조합한 신경망은 물론 다중 입력 또는 다중 출력 등 다양한 연결 구성을 할 수 있으며, 생성모델(GAN)이나 강화학습 모델도 만들 수 있습니다.
+
+#### 캐글이란?
+
+캐글은 예측모델 및 분석 대회 플랫폼입니다. 기업 및 단체에서 데이터와 해결과제를 등록하면, 데이터 과학자들이 이를 해결하는 모델을 개발하고 경쟁합니다. 다양한 실무 데이터셋을 검토하고, 대회에 참가하면서 서로 공유하는 커널(소스코드)를 통해서 함께 데이터 분석 역량을 키울 수 있기에 좋습니다.
+
+---
+### 프로그램
+
+#### 시간표
+
+|주제|내용|
+|-|-|
+|케라스 및 캐글 소개(20분)|프로그램 소개 및 캐라스와 캐글이 무엇인지 알아봅니다.|
+|케라스 시작하기(40분)|딥러닝 개념과 케라스 코드를 살펴보고, 간단한 MLP, CNN, GAN를 시연해봅니다.|
+|10분 휴식|스트레칭|
+|캐글 시작하기(40분)|데이터 분석 방법, 캐글 사용법, 여러가지 팁에 대해서 알아봅니다.|
+|10분 휴식|명상하기|
+|케라스를 함께 즐기는 법(15분)|오픈 커뮤니티, 블로그, 페이스북, 단톡방 등을 이용해서 함께 케라스를 즐기는 법을 알아봅니다.|
+|캐글을 함께 즐기는 법(15분)|오픈 커뮤니티, 블로그, 페이스북, 단톡방 등을 이용해서 캐글을 즐기고 진행 중인 대회에 참여하는 법도 알아봅니다.|
+|함께 소통하기(30분)|케라스와 캐글에 대한 FAQ에 대해 살펴보고 참가자분들과 질의응답하면서 소통시간을 가집니다.|
+
+#### 진행자
+
+|구분|소개|
+|-|-|
+||김태영, 케라스 코리아 운영자, (주)인스페이스
비전공자분들이 직관적이고 간결한 딥러닝 라이브러리인 케라스를 이용해 딥러닝 입문을 쉽게 할 수 있도록 '블록과 함께하는 파이썬 딥러닝 케라스'의 집필과 '김태영의 케라스 블로그', '케라스 코리아', '캐글 코리아'를 운영하고 있습니다. 또한 (주)인스페이스에서는 기술이사로서 “태양에서 세포까지 딥러닝”, “게임에서 우주까지 강화학습”의 모토로 여러분야 인공지능을 적용하고자 활발히 연구개발하고 있습니다.|
+||이유한, 캐글 코리아 운영자, 카이스트 박사과정
캐글을 취미로 하는 대학원생입니다. 화학공학의 여러 문제를 머신러닝으로 풀려고 노력하고 있습니다. 데이터 사이언스, 머신러닝, 딥러닝을 캐글에서 연마하였습니다. 캐글 속 공유 정신에 감명받아, 데이터 사이언스가 취미가 되는, “모두의 데이터사이언스”를 꿈꾸며 “캐글 코리아”를 운영하고 있습니다.|
+
+#### 발표자료
+
+* [케라스 이야기](https://drive.google.com/open?id=1sjtsRf0cYFb7-fj67TIjyCjDzbLj4vy-IeyOcT0vsgQ)
+* [딥러닝 이야기](https://drive.google.com/open?id=10L4PSBHrQLblbaPLTPnDTxBRJj_8y-KSyp6v8Ams5oY)
+* [레이어 이야기](https://drive.google.com/open?id=1TzHwAfEQlHDscYiOEO3EJ6dJBE6rrwkjFDYk3n0fRm0)
+* [생성 모델 이야기](https://drive.google.com/open?id=14poDITwyidWbwZQh08FAh2F5fsLWN1s8YRCZXp2FOoo)
+* [케라스 코리아 - 모두의 손에 딥러닝 툴을...](https://drive.google.com/open?id=1YcpkJJGe9s7Y1vzAQeGP7gqHGb4W0hNa1etfUIY8uzU)
+* [캐글 코리아 - 함께 공부해서 함께 나눕시다.](https://drive.google.com/open?id=1hUpqatYVmpUJ2q1_l-xGBQ9-lRQUNRT-AhULt9RqhyE)
+
+#### 주최/주관
+* 케라스 코리아
+* 캐글 코리아
+
+#### 후원
+* (주)인스페이스
+* 구글 코리아
+* 대전테크노파크
+
+---
+### 일정
+
+#### 1차 - 서울, 대전
+
+|지역|날짜|시간|장소|
+|-|-|-|-|
+|(마감)서울|2/14(목)|오후 6시 ~ 9시|구글 코리아(역삼동, 160명)|
+|(마감)대전|2/20(수)|오후 2시 ~ 5시|대전테크노파크(유성구, 110명)|
+
+* 서울 구글 코리아 상세 주소 : 서울 강남 테헤란로 152 강남파이낸스센터 22층 구글코리아 - 저녁시간이라 구글 코리아에서 간단한 간식(샌드위치 등)이 제공될 예정입니다.
+* 대전 대전테크노파크 상세 주소 : 대전광역시 유성구 용산동 테크노9로 35
+
+#### 2차 - 제주, 대구, 광주, 부산, 경기, 강원 등
+: 수요 및 장소 섭외에 따라 추진 예정
+
+---
+### 신청
+아래 링크에서 신청해주세요~ 장소별로 수용인원이 정해져 있어서 선착순 마감입니다.
+
+* 서울, 2/14(목) [마감]
+* 대전, 2/20(수) [마감]
+* [신청하기](https://goo.gl/forms/94Fla2TG2qO3Ctm33)
+
+---
+### 콘서트 관련 질답
+
+* Q: 노트북이 필요한가요? A: 실습이 필요한 부분은 발표자 시연으로 이뤄집니다. 따라서 별도의 노트북은 필요없습니다.
+
+---
+### 케라스 코리아 커뮤니티 함께하기
+* [케라스 코리아 페북](https://www.facebook.com/groups/KerasKorea/)
+* [케라스 코리아 슬랙 초대](https://join.slack.com/t/keraskorea/shared_invite/enQtNTUzMTUxMzIyMzg4LWQ3YmQ1YTdmNTYxOTAwZTExNmFmOGM3M2QyMjIyNzYwYTY2YTY2ZjBlNDNlZDdmMTU0NGVjYzFkMWYxNzE0ZDA)
+* [케라스 코리아 단톡방](https://open.kakao.com/o/g93MSBV)
+* [케라스 코리아 블로그](http://keraskorea.github.io)
+* [케라스 공식 문서 한글번역 참여방법](https://tykimos.github.io/2019/02/06/Contribution_of_Keras_Document_to_Korean_Translation/)
+* [김태영 페북 프로필](https://web.facebook.com/tykimo) - 케코와 함께하시고 싶은 분은 연락주세요.
+
+---
+### 캐글 코리아 커뮤니티 함께하기
+* [캐글 코리아 페북](https://www.facebook.com/groups/KaggleKoreaOpenGroup/)
+* [캐글 코리아 단톡방](https://open.kakao.com/o/gP24T89)
+* [캐글 코리아 블로그](https://kaggle-kr.tistory.com/)
+* [이유한 페북 프로필](https://web.facebook.com/youhan.lee.33o), [강천성 페북 프로필](https://web.facebook.com/profile.php?id=100007162502644) - 캐코와 함께하시고 싶은 분은 연락주세요.
+
+---
+### 후기
+
+#### 2/14 서울, 구글 코리아
+
+구글 코리아 본사에서 가장 큰 공간인 식당을 빌려서 행사를 진행했습니다. 구글 코리아 권순선님의 인사로 행사를 시작했습니다.
+
+
+
+제 강의에선 레고 블록 및 사람이 빠질 수 없죠. 요즘엔 딥러닝 모델의 학습 원리를 레고 사람에 비유를 많이 한답니다.
+
+
+
+이유한님의 캐글 소개를 시작합니다~ 이유한님의 팬들과 평소 캐글에 관심이 많은 분들과 함께 즐거운 소통을 했습니다.
+
+
+
+발렌타인 데이임에도 불구하고 많은 분들이 오셔서 즐겁게 콘서트를 즐기다 갔습니다. 내년에는 아예 발렌타인 이벤트로 진행을 해볼까도 생각이 드네요.
+
+
+
+#### 2/20 대전, 대전테크노파크
+
+케라스 코리아와 캐글 코리아의 운영자의 거주지가 대전인 만큼 대한민국의 "중앙"에서 두 번째 행사를 열었습니다. 캐글 코리아의 강천성님도 자리를 함께 해주셔서 커뮤니티 활동에 대해서 멋지게 발표해주셨습니다.
+
+
+
+대전 콘서트는 주중 오후 시간대임에도 불구하고 많은 분들이 오셔서 함께 즐거운 시간을 보냈습니다. 역시나 자리가 좀 부족해서 서서 들으시는 분들도 계셨습니다.
+
+
+
+콘서트를 마치고 현수막 앞에서 기념 촬영을 했습니다. 후원해주신 (주)인스페이스, 구글 코리아, 대전테크노파크 관계자분들께 감사하다는 말씀을 다시 드리고 싶습니다.
+
+
diff --git a/_posts/2019-3-17-Keras_Character.md b/_posts/2019-3-17-Keras_Character.md
new file mode 100644
index 00000000..a5f67a14
--- /dev/null
+++ b/_posts/2019-3-17-Keras_Character.md
@@ -0,0 +1,54 @@
+---
+layout: post
+title: "케라스 스티커"
+author: 김태영
+date: 2019-02-23 00:00:00
+categories: etc
+comments: true
+image: http://tykimos.github.io/warehouse/2019-3-17-Keras_Character_title.png
+---
+너무나 깜찍한 케라스 스티커가 나와서 공유드립니다. 프랑소와 쏠레님이 2019 TF dev summit에 배포하신다고 했으니, 행사에 참석하신 분들은 이 스티커를 보신 적 있으시겠죠?
+
+
+
+케라스는 그리스어로 뿔이라는 의미이고, 그 뿔의 주인을 "유니콘"으로 골랐다고 하시네요. 산양도 좋지만 유니콘도 더 신비하고 좋은 것 같아요.
+
+---
+### 실사
+
+제가 찍은 것과 프랑소와 쏠레님이 찍은 것 올려봅니다. 예쁘군요~
+
+
+
+---
+### 원본
+
+#### 케라스 코리아 로고 (with 캐글 코리아 로그)
+
+케라스 코리아 및 캐글 코리아 로고는 구글 프레젠테이션으로 바로 보실 수 있습니다.
+
+https://docs.google.com/presentation/d/1X2hB6BiudfeMgaOvAeOPtY-zwZMiJUleZyGyo5QjqYI/edit#slide=id.g5042a4b324_0_0
+
+#### 케라스 스티커
+
+아래는 해상도가 2633 × 2597인 고화질 이미지입니다. 프랑소와 쏠레님에게 이미지 저작권에 대해서 문의를 했는데, 마음 껏 사용하라고 하시네요~ 널리 애용되었으면 합니다.
+
+
+
+---
+### 같이 보기
+
+#### 케라스 코리아 커뮤니티
+
+* [케라스 코리아 페북](https://www.facebook.com/groups/KerasKorea/)
+* [케라스 코리아 슬랙 초대](https://join.slack.com/t/keraskorea/shared_invite/enQtNTUzMTUxMzIyMzg4LWQ3YmQ1YTdmNTYxOTAwZTExNmFmOGM3M2QyMjIyNzYwYTY2YTY2ZjBlNDNlZDdmMTU0NGVjYzFkMWYxNzE0ZDA)
+* [케라스 코리아 단톡방](https://open.kakao.com/o/g93MSBV)
+* [케라스 코리아 블로그](http://keraskorea.github.io)
+* [케라스 공식 문서 한글번역 참여방법](https://tykimos.github.io/2019/02/06/Contribution_of_Keras_Document_to_Korean_Translation/)
+* [케라스 기초 강좌](https://tykimos.github.io/lecture/)
+
+#### 캐글 코리아 커뮤니티
+
+* [캐글 코리아 페북](https://www.facebook.com/groups/KaggleKoreaOpenGroup/)
+* [캐글 코리아 단톡방](https://open.kakao.com/o/gP24T89)
+* [캐글 코리아 블로그](https://kaggle-kr.tistory.com/)
diff --git a/_posts/2019-3-26-NASA_FDL_Program.md b/_posts/2019-3-26-NASA_FDL_Program.md
new file mode 100644
index 00000000..322b2661
--- /dev/null
+++ b/_posts/2019-3-26-NASA_FDL_Program.md
@@ -0,0 +1,314 @@
+---
+layout: post
+title: "인공지능과 함께하는 우주를 향한 인류의 도전, NASA FDL - 2018"
+author: 김태영, 최명진, 양승범, 박천용, 구원회, 김재엽, 이광현, 임성민, 정대원, 박은수, 문용재
+date: 2019-03-26 00:00:00
+categories: etc
+comments: true
+image: http://tykimos.github.io/warehouse/2019-3-26-NASA_FDL_Program_title.png
+---
+최근 비약적으로 발전하고 있는 인공지능 기술은 핵심 알고리즘부터 어플리케이션까지 접목이 가능하며, 어떤 분야에서 좋은 성과를 내는 모델은 다른 분야에서도 활용할 수 있어 학제간(interdisciplinary) 접근에 용이합니다. 여러 분야에서 인공지능 기술 기반의 프로젝트가 생겨나고 있으며, 그 중 우주분야에서 국가기관과 학계 그리고 민간 기업에서 서로 협력하여 인공지능 기술을 접목한 프로젝트를 수행하는 프로그램인 NASA(National Aeronautics and Space Administration)의 Frontier Development Lab(이하 FDL)을 소개하고자 합니다.
+
+
+
+FDL은 전 세계의 선도적인 기관으로부터 지원한 다양한 연구 분야 및 배경을 가지고 있는 박사과정, 혹은 박사 후 과정 수준의 연구원, 멘토 및 민간 고문 등이 모여 팀을 구성하고, 문제 이해 및 다양한 방법을 통한 해결책을 구상합니다. 각 팀들은 할당된 프로젝트를 서로 경쟁하면서 수행하지만 동시에 기술 공유도 활발하게 이뤄질 수 있도록 연구 문화가 형성되어 있습니다. 또한 NASA가 구축한 데이터를 자유롭게 접근을 할 수 있고, 다양한 분야의 수석 연구원과 자유롭게 교류할 수 있으며, 최첨단 GPU 컴퓨팅 자원, 교육 및 멘토링 등 인공지능 기술 연구를 위한 최적의 환경을 제공합니다. 적대적 신경망(Generative Adversarial Network, GAN), 가변 오토인코더(Variation Auto-Encoders, VAE)와 같은 비지도 학습 알고리즘 등 최신 기술 접목을 위한 연구도 수행되지만 특성이 다양한 데이터를 다루기 때문에 베이지안 최적화와 같은 전통적인 기계학습 알고리즘을 혼합한 모델 연구도 수행됩니다. 이 FDL 프로그램의 위원회 구성은 다음과 같습니다. Ian Goodfellow님, Francois Chollet님, Yarin Gal님이 보이시네요.
+
+
+
+---
+### FDL 연구방법 및 연구활동
+
+#### 방법론
+
+FDL에서는 여섯 가지 방법론에 기초하여 연구가 수행됩니다. 첫째, 주어진 문제가 무엇인지 그리고 연구 목표가 무엇인지 정확하게 인식하는 것부터 시작합니다. 팀으로 연구하기 때문에 효과적인 연구를 위해서는 반드시 선행되어야 하는 부분입니다. 둘째, 단일 분야가 아닌 다양한 분야의 전문가들로 팀을 구성합니다. 단일 분야 전문가로 구성된 팀은 수월한 진행이 될 수는 있지만 문제를 다른 각도에서 볼 수 있는 시각과 새로운 발견이 필요한 연구에는 적합하지 않습니다. 오히려 대부분의 혁신적인 발견은 서로 다른 분야의 전문가들의 협업, 그리고 그들이 의견이 충돌하는 과정에서 일어난다고 합니다. 셋째, 지속적인 협력과 열린 토론이 일어날 수 있도록 공동 연구를 수행합니다. 어떤 문제가 있을 때, 그 문제를 해결하는 가장 좋은 방법은 팀들에게 동일한 문제를 주고 이 팀들을 경쟁시키는 것이라고 생각할 수 있습니다. 그러나 FDL은 이러한, 동일한 문제를 주고 서로의 자원을 공유하지 않은 채 경쟁시키기 보다는 서로의 작업을 지속적으로 발전시키는 협력 문화와 열린 토론 속에서 문제를 풀어나가기를 원합니다. 문제 해결을 위하여 서로 고민했던 시간들과 다양한 방법으로 시도했던 광범위한 기술의 집합이 본 연구의 최종 결과물입니다. 넷째, 빠른 반복을 통해 새로운 발견을 할 수 있도록 합니다. 어떠한 과제를 수행함에 있어서 반복하고, 실수하며 배우는 것은 새로운 발명을 이끌어냅니다. FDL은 숙련된 멘토와 코치들을 통하여 팀들이 많은 발견을 하고, 그것을 이루어낼 수 있도록 지원하고 있습니다. 다섯째, 간접적 영감이 일어날 수 있도록 소통 방법을 수행합니다. 간접적 영감이라 함은, 우리의 두뇌가 어떠한 대상으로부터 패턴을 보고 기억한 후에, 완전히 새로운 것을 발견하기 위하여 그것을 다른 상황에 적용하는 능력을 말합니다. 이것을 유사 영감이다고도 말하며, 생체 모방과 같은 방법론의 배경이 되기도 합니다. FDL에서는 여러 산업계의 인물들과 강연자를 초청하여 경험을 나누거나, 견학 등 다양한 방법을 마련하였고, 이를 통하여 참가자들이 영감을 얻을 수 있도록 8주 계획에 반영 및 계획합니다. 여섯째, 팀이라는 집단을 의식하며 이를 위한 연구 계획을 수립합니다. 한 팀으로서 새로운 발견을 향한 여정을 이어갈 때, 그 팀은 스스로 학습하고, 문제에 대하여 더 깊게 이해하게 됩니다. 이러한 더 깊은, 성숙한 이해는 어떤 문제의 해결책이 스스로 나타날 때 집단 인식이 가능하도록 합니다. 혁신은 한 천재의 고독한 행동이 아닌 팀이 함께 하는 강력한 생각의 한 조각, 즉 느린 직감의 형태로 도달하기 때문입니다.
+
+#### 협력
+
+FDL에서는 행성 방어, 우주 기상, 달 탐사 등의 분야에 인공지능을 도입하는 과정에서, 공공 분야와 민간 분야의 파트너십이 훌륭한 결과를 이끌어낼 수 있는 잠재력을 가지고 있음을 입증하였습니다. 지난 2년간, FDL은 연산 및 데이터 처리 뿐만 아니라 전문 지식, 멘토링, 홍보, 연속성, 교육 등을 제공해준 민간 부분 및 학술 파트너로부터 많은 지원과 혜택을 얻었습니다. 이러한 파트너들은 올 해에도 다시 FDL에 가입하여 지원을 줄 것을 확정하였으며, 팀에 합류할 더 많은 파트너들을 찾고 있습니다.
+
+
+[그림 1] 2017 FDL에서 강연을 하는 Francois Chollet 구글 소속의 개발자이며, 딥러닝 프레임워크 케라스(Keras)[1]의 개발자입니다.
+
+#### 데이터셋
+
+FDL에서는 연구 개발 활동을 위하여 NASA가 보유하고 있는 방대한 양의 데이터를 제공합니다. 각 도전과제별로 다양한 종류의 데이터를 제공하며, 그 내용은 다음과 같습니다.
+
+* Lunar Resources
+ * Lunar Reconnaissance Orbiter (LRO)의 Lunar Orbiter Laser Altimeter (LOLA) 관측기기 자료를 이용한 Digital Elevation Models (DEM)
+ * Lunar Reconnaissance Orbiter Camera (LROC)의 Narrow Angle Camera (NAC) 관측 영상
+* Long Period Comets
+ * Cameras for Allsky Meteor Surveillance (CAMS) 전천 카메라를 이용한 혜성 관측 영상
+* Asteroid Radar 3D Shape Modeling
+ * Arecibo 300m 전파망원경으로 관측한 레이더 영상
+ * Goldstone 전파망원경으로 관측한 레이더 영상
+ * 도플러 관측 영상과 관련 메타 데이터를 포함하는 합성 데이터
+* Solar Storm Prediction
+ * Solar Dynamics Observatory (SDO)/HMI 자기장 영상
+ * SDO/AIA 극자외선 영상
+ * GOES 위성으로부터 관측한 x-ray 플럭스
+* Solar Terrestrial Interaction
+ * ONMI 시계열 자료
+ * United Sates Geological Survey (USGS) 지상 관측 지자기 데이터
+ * National Oceanic and Atmospheric Administration (NOAA, 미 대기해양청) Kp 지수 자료
+ * SDO/AIA 극자외선 영상
+
+#### 학술활동
+
+FDL에서는 연구 활동과 결과를 토대로 적어도 하나 이상의 학술 발표를 하도록 장려하고 있습니다. 지금까지 FDL의 팀들은 다음과 같은 학술대회에서 발표하였습니다.
+
+* GPU Technology Conference, Washington DC, USA: Defending our Planet with AI by James Parr
+* 5th IAA Planetary Defense Conference, Tokyo, Japan: Application of Machine Learning for Planetary Defense by Frank Marchis
+* AAAI Futures Conference, San Francisco, California, USA: Defending our Planet with AI by James Parr
+* Digital DNA, Belfast, Northern Ireland: Defending our Planet with AI by James Parr
+* GPU Technology Conference, Munich, Germany: AI & Deep Learning by Susana Zoghbi
+* Lunar Exploration Analysis Group, Columbia, USA: AI & Space Sciences by Sara Jennings
+* NewSpace Europe, Luxembourg: Artificial Intelligence and Space by Sara Jennings & Jacek Czaja
+* Neural Information Processing Systems, Long Beach, USA: Deep Learning in the Physical Sciences by Susana Zoghbi, Sean McGregor
+* Women in Machine Learning workshop, Long Beach, USA: Planetary Defense: In Search of Long Period Comets with Deep Learning by Susana Zoghbi
+* AGU Fall Meeting, New Orleans, Louisiana, USA: Modeling Geomagnetic Variations using a Machine Learning Framework by Bala Poduval
+
+
+
+
+[그림 2] 각종 학회에서 결과를 발표하는 FDL팀[2]
+
+---
+### FDL 2017 연구내용
+
+#### LONG PERIOD COMETS
+LPC(Long Period Comets)는 최소 200년 이상의 주기를 갖는 혜성을 뜻하며, 만약 지구와 충돌할 경우 큰 피해가 발생합니다. 따라서 LPC의 관측 및 궤도를 추적하기 위하여 CAMS(Camera for Allsky Meteor)라 불리는 카메라 네트워크를 통하여 혜성을 관측하고 있으며 사람이 최종적으로 혜성의 유무를 분류합니다. 그림 3은 CAMS 카메라 네트워크가 촬영한 영상으로 왼쪽은 구름, 비행체, 새를 혜성이라고 잘 못 인식한 것을 나타낸 것이고 오른쪽은 혜성이 작게 혹은 밝게 관측되거나 구름에 가려 혜성 감지에 실패한 경우를 나타내었습니다[3]. 이는 현재 CAMS 네트워크가 혜성의 유무를 자동으로 분류하지 못하는 것을 뜻하며 따라서 현재의 워크플로우에서 사람의 개입이 필요한 상황입니다. 하지만 현재 CAMS 네트워크는 하루 밤사이에 약 8,000장의 사진을 촬영하며, 이에 대한 검토 및 분류하는 작업은 많은 인력과 시간이 필요로 하기 때문에 FDL은 딥러닝 기반 혜성 분류 모델 연구를 수행하였습니다.
+
+
+
+[그림 3] CAMS에 의하여 촬영된 영상
+
+혜성 감지를 위하여 사용한 딥러닝 모델은 영상처리 분야에서 주로 사용되는 CNN(Convolutional Neural Network) 모델과 순차데이터 혹은 시계열데이터를 처리할 때 주로 사용하는 모델인 LSTM(Long Short Term Memory)을 사용하였습니다. 또한 랜덤포레스트 기법을 통한 분류 성능을 베이스라인으로 하여 딥러닝 모델의 성능을 비교하고 분석하였습니다. 혜성 감지를 위한 CNN 네트워크는 AlexNet 아키텍처를 사용하였으며 카메라 촬영 영상을 입력하였다(그림 4). LSTM 모델은 혜성의 X, Y 좌표와 시간 그리고 빛의 강도를 입력받아 혜성의 유무를 판별하였다.
+
+
+
+[그림 4] 혜성 분류를 위한 CNN 네트워크(AlexNet 아키텍처)
+
+표 1은 본 연구에 사용된 3가지 모델의 정밀도(Precision), 재현율(Recall), F1 스코어를 나타내었습니다. F1 스코어는 정밀도와 재현율을 조합하여 모델의 성능을 나타내는 지표로, F1 스코어를 살펴보았을 때 LSTM와 CNN의 성능은 모두 랜덤포레스트에 비하여 좋은 성능을 보였고 두 모델의 성능 간에는 큰 차이를 보이지 않았습니다. FDL은 두가지 딥러닝 모델을 이용하여 혜성 분류 작업을 자동화할 수 있었다고 NIPS 학회에서 발표하였습니다[3].
+
+[표 1] 3가지 모델의 성능[3]
+
+|Method|Input|Precision|Recall|F1|
+|-|-|-|-|-|
+|CNN|Images|88.3|90.3|89.5|
+|Random Forest|Tracklets|90.0|80.6|84.9|
+|LSTM|Tracklets|90.0|89.1|89.6|
+
+#### RADAR 3D SHAPE MODELING
+
+2016년 1월, NASA에서 개설한 PDCO(Planetary Defense Coordination Office)는 지구와 소행성의 충돌을 대비하여 충돌 가능성 조기 탐지를 목표로 광범위의 소행성 관측 네트워크를 구축하기 위해 노력하고 있다[4]. 그림 5은 NASA가 2015년까지 레이더를 이용하여 탐지했던 지구와 충돌 위험성을 보이는 소행성의 개수를 나타낸 것이다[5]. 지구와 소행성의 충돌을 예측하기 위해서는 소행성의 정밀한 궤도 결정이 필수 요소이며 궤도 위의 물체는 움직이고 있기 때문에, 적외선이나 광학 장비를 이용하는 것보다 지상 기반 레이더를 이용한 궤도 결정이 더 적절합니다. 정밀한 궤도 결정을 위해서는 레이더로 관측한 물체의 크기, 형상, 천체 동역학 등을 모두 고려해야 하며 우주 물체 크기 및 형상을 추정하기 위해서 레이더를 이용한 3차원 복원 방법이 일반적입니다. 그림 6는 실제 소행성으로부터 반사된 레이더 주파수 정보를 기반으로 생성한 도플러 영상입니다.
+
+
+
+[그림 5] 1970년부터 NASA가 탐지한 지구 근처 소행성의 개수 현황
+
+
+
+[그림 6] 레이더 실측 도플러 데이터로 생성한 소행성 2015 TB145의 2차원 레이더 영상[6]
+
+
+
+[그림 7] SHAPE로 생성한 소행성의 2차원 영상[2]
+
+
+
+[그림 8] SHAPE로 생성한 소행성의 3차원 영상[2]
+
+기존의 방법으로는 데이터 전처리 과정과 도플러 관측 데이터를 입력하여 소행성의 3차원 영상을 생성하기까지 약 4주가 소요되었다[7]. FDL 2017의 Sean Marshall 외 3명으로 구성된 팀은 소행성의 3차원 영상 생성 시간을 단축하기 위해, 데이터 전처리 및 영상 형성에 딥러닝을 적용하였고, 4~6시간 만에 레이더 도플러 영상을 입력하여 소행성의 3차원 레이더 영상을 형성하는 모델을 개발하였습니다. 해당 팀은 딥러닝 모델을 학습시킬만큼 충분한 레이더 도플러 이미지가 없었기 때문에 NASA에서 개발한 SHAPE 소프트웨어를 이용하여 동일한 소행성의 다양한 상태의 운동 자세를 모델링한 후에, 이 형상을 바탕으로 도플러 이미지를 생성했습니다. 그림 7과 그림 8은 SHAPE로 생성한 2차원 및 3차원 영상의 예시입니다. 소행성 형상을 생성하기 위해 사용한 딥러닝 구조는 심층 생성 모델 중 하나인 GAN(Generative Adversarial Network)이다[8]. GAN은 생성자(Generator)와 판별자(Discriminator)로 구성된 네트워크인데, 생성자와 판별자 간 적대적 학습 (adversarial training)을 통해 생성자에 임의의 입력이 있을 때, 원하는 이미지를 자연스럽게 생성하도록 유도됩니다. 학습을 통해 2차원 도플러 영상을 입력받아 3차원 소행성을 묘사할 수 있는 생성자가 학습되면, 2차원 도플러 이미지만 입력되더라도 자연스러운 3차원 소행성 형상을 생성할 수 있습니다. 그림 9에서 2차원 도플러 영상이 입력되어 3차원의 소행성 영상이 생성되는 전반적인 과정을 나타내었습니다.
+
+
+
+[그림 9] GAN을 이용하여 도플러 이미지를 입력으로 받아 3차원 소행성 영상을 생성하는 과정
+
+#### LUNAR WATER & VOLATILES
+
+우주 탐사에 있어서 연료생산에 필요한 물과 휘발성 물질은 중요한 자원입니다. 달 탐사와 행성 탐사 등의 우주 임무를 수행하기 위해서는 많은 연료, 생명 유지 등이 요구되는데 만약 우주에서 물을 획득할 수 있다면 우주 임무 비용을 줄일 수 있을 것입니다. 2008년의 Chandrayaan-1 임무와 2009년의 LCROSS 임무에서 달 극지역의 분화구 중심에서 물이 발견되었습니다. 달의 남극과 북극 분화구 바닥은 태양을 보지 못하는 영구음영지역입니다. 이곳의 온도는 약 40K(-233.15°C)이며 물 뿐 아니라 휘발성 물질도 동결됩니다. 따라서 미래의 우주 탐사를 위해서는 이러한 물과 휘발성 물질이 달에 얼마나 있는지, 분포가 어떠한지를 정확히 파악할 필요가 있으며, 이를 위해 로버를 이용하고 있습니다.
+로버가 달 탐사 임무를 원활하게 수행하려면 달 표면의 분화구에 대한 정확한 정보가 필요합니다. 이를 위해 Lunar Reconnaissance Orbiter(LRO)는 달 표면 전체를 0.5m의 광학 해상도와 20m의 레이저 고도계를 사용하여 촬영하였습니다. 하지만 여러 번의 궤도 주행을 하며 얻은 이미지들을 결합할 때 합성 인공물(synthetic artefacts)이 나타났습니다. 이러한 합성 인공물은 사진으로는 긴 교차선으로 나타나며 로버에게 이것은 20ft의 벽이나 골자기로 여겨져 달 횡단에 큰 문제를 야기합니다. 이미지에서 이러한 합성 인공물을 제거하기 위해서는 다수의 이미지 소스를 함께 비교하여 공통된 이미지만 남기는 방식을 사용하지만 달에는 GPS가 없기 때문에 겹칠 이미지의 지리적 위치가 정확하지 않습니다. 따라서 달의 가장 보편적이고 많이 존재하고 있는 분화구를 기준으로 가장 적합한 이미지를 찾아 매칭하여 오버레이하는 방법을 사용합니다.
+
+
+
+[그림 10] Deep Learning based Classifier
+
+이러한 작업을 수행하기 위해서는 이미지에서 분화구를 추출할 필요가 있습니다. 이에 FDL 2017팀은 0.5m 광학 해상도 이미지와 20m해상도의 DEM(Digital Elevation Model)을 데이터 셋으로 하는 Deep Neural Network를 사용하였습니다. 32x32 픽셀 크기의 타일 40,000개를 모아 ‘분화구’와 ‘분화구가 아닌’ 이미지로 구분하여 데이터셋을 구축하였습니다.
+
+|GROUP|Vijayan et al.|Di et al.|Emani et al.|FDL|
+|-|-|-|-|-|
+|YEAR|2013|2014|2015|2017|
+|METHOD|PATTERN RECOGNITION|PATTERN RECOGNITION|CNN|CNN|
+|PRECISION|91%|87%|86%|98%|
+|ERROR RATE|9%|13%|14%|2%|
+
+|GROUP|HUMAN|SINGLE-LAYER|CNN|
+|-|-|-|-|
+|ACCURACY|-|POOR|98.4%|
+|TIME (1k IMAGES)|1-3 HOURS|10 HOURS|1 MINUTE|
+
+[표 2] Mapping Poles Results
+
+Classifier를 사용한 분화구 탐지의 결과는 표 2와 같습니다. 1,000개의 데이터 셋을 1-3분안에 처리했습니다. FDL 2017 기간 동안에 이미지를 오버레이하여 합성 인공물을 제거하는 단계까지는 도달하지 못했으나 이 연구는 우주 산업에 현대 시스템의 적용 가능성과 유용성을 증명하는 사례라는 데에 큰 의미가 있습니다.
+
+#### SOLAR STORM PREDICTION
+
+태양에서 발생하는 현상 중 가장 폭발적으로 일어나는 현상으로 태양 플레어(Flare)가 있습니다. 태양 표면에는 자기장이 존재하는데, 자기장이 불안정하여 자기 재결합(Magnetic Reconnection)이 일어날 때 플레어가 발생합니다. 이 때 발생한 플레어로 인하여 태양의 물질들의 가속이 일어나 고에너지 입자들이 방출되고, 다양한 파장대에서의 복사 방출, 특히 X-ray에서의 방사가 일어납니다.
+방출된 입자와 X-ray는 지구에 직접적으로 영향을 줄 수 있습니다. 예를 들어, 우주 공간에서 활동하는 인공위성의 CCD, 태양광 패널, 반도체 등 주요 부품의 고장의 원인이 되기도 하고, 지구의 대기를 교란시켜 장거리 통신에 영향을 주기도 하며, 우주 비행사 혹은 극항로를 운항하는 비행 승무원 및 승객이 받는 방사능 피폭량에도 영향을 줍니다. 다시 말하자면, 태양 플레어는 이제는 전 세계적으로 보편화되어 있는 우주 산업과 항공 산업에 매우 큰 영향을 줄 수 있으므로 마치 비를 예보하거나 태풍 경보를 내리듯이 태양 플레어에 대한 예보 또는 경보가 필요하지만 그것이 쉽지는 않습니다.
+태양 플레어를 통하여 방사되는 X-ray는 폭발이 일어나는 순간 지구까지 빛의 속도로 8분 30초만에 도달한다, 태양에서 발생하는 다른 폭발 현상인 Coronal Mass Ejection(CME, 코로나 질량 방출)이나 Solar Energetic Particle(SEP, 태양 고에너지입자)과 같은 현상들은 폭발 후 지구에 도달하기까지 적게는 수 시간에서, 많게는 수일이 걸리는 것과는 대조됩니다. 다시 말해, 태양 플레어는 지구에서 관측함과 동시에 지구에 영향을 주기 시작하는 것을 의미하며, 사실상의 경보는 불가능하다는 것을 말합니다.
+이러한 이유로 다수의 태양 폭발 예보모델들이 개발되어 왔으며, 태양 폭발과 우주기상과의 상관관계에 대한 이해를 바탕으로한 수치 혹은 경험적 모델, 통계적 모델 또는 기계학습(Machine Learning)을 통한 모델 등이 있습니다. 가장 잘 알려진 통계 모델은 태양 흑점의 분류를 통한 통계적 모델입니다. Patrick McIntosh는 태양의 크기나 형태 등 3가지 기준을 통하여 분류하는 McIntosh Sunspot Class를 만들었으며, 많은 학자들이 이 McIntosh Sunspot Class의 각 흑점군별로 태양 플레어의 발생 확률을 통계적으로 정리하여 태양 플레어를 예보하는 모델을 개발하였습니다.
+
+
+
+[그림 11] McIntosh Sunspot Class[9], McIntosh Sunspot Class는 크게 3가지 기준을 통하여 태양 흑점을 분류합니다.
+
+2017년 FDL의 Solar Storm Prediction 팀은 태양 플레어 예보 모델 개발에 Solar Dynamics Observatory (SDO) 위성의 탑재체인 Atmospheric Imaging Assembly (AIA)를 이용하여 관측한 극자외선 (Extreme UltraViolet ,EUV) 영상 중 8개의 채널 이미지를 입력인자로, 미대기해양청의 지구관측 정지궤도위성인 Geostationary Operational Environment Satellite (GOES) 위성에서 관측한 X-ray 플럭스를 출력인자로 사용하였습니다. 또한 모델의 구조로는 합성곱 신경망(Convolutional Neural Network, CNN)을 사용하여 8채널 영상의 크기를 줄이고, 특징맵을 추출하여 최후에 11개의 출력 인자를 산출해내는 모델을 구성하였습니다.
+
+
+
+[그림 12] Solar Dynamics Observatory (SDO) Channel Images[10], SDO 위성에서 관측하고 있는 여러 파장대의 이미지
+
+
+
+[그림 13] CNN을 이용한 X-ray 플럭스 예측 결과
+
+
+
+[그림 14] CNN모델에 입력한 영상과, 입력 영상에 컨볼루션을 적용한 영상
+
+그 결과, 훈련된 모델은 2014년 6월에 발생한 X-class의 태양 플레어 폭발을 예측하는데 성공하였습니다. 그리고 훈련된 모델을 분석한 결과, CNN모델에 태양 채널 영상만을 입력해 주었음에도 불구하고, 태양의 활성 영역 (Active Region, AR)에 가중치를 두어 계산을 수행하도록 모델이 훈련되었음을 확인하였습니다. FDL의 연구팀은 인공지능을 활용한 태양 활동 분석 및 예측이 기존 모델들의 예측 신뢰성과 정확성을 향상시킬 수 있었다고 하였습니다.
+
+#### SOLAR-TERRESTRIAL INTERACTIONS
+
+태양활동으로 인해 태양 입자들이 분출되어 우주환경에 영향을 미치게 됩니다. 이러한 입자들은 빠르면 수 분에서 수 일에 이르기까지 지구에 영향을 미치게 됩니다. 극지방에 오로라가 발생하고 지자기 폭풍으로 인해 위성, 발전소 들은 무용지물이 될 수 있으며 항공기는 방사선에 노출되어 항로를 변경해야 하고, 통신 시스템에 장애를 발생시킵니다. 태양 활동에 대한 연구를 위하여 지자기 데이터 및 태양풍 데이터를 이용하여 모델링 하고 이를 예보에 활용하고 있습니다. 오픈 소스 기계학습 프레임워크 위에 STING(Solar Terrestrial Interactions Neural Network Generator) 이라는 지식 검색 모듈을 구축하여 연구자들로 하여금 복잡한 데이터에 대한 탐색을 수행할 수행할 수 있도록 하였습니다. Open Access Science Data 와 AI(Artificial Intelligence), ML(Machine Learning)을 통해 과학적 통찰과 더 나은 예측을 위한 발전을 추구하고 있습니다.
+
+
+
+[그림 15] FDL 2017 SOLAR-TERRESTRIAL INTERACTIONS 프로젝트
+
+Kp 지수는 매일 3시간 간격으로 측정한 지자기의 범위를 말하며 는 지자기 데이터와 태양풍 데이터를 이용하여 예측을 수행하기 위해 2가지의 프로젝트를 진행하였습니다.
+
+
+
+[그림 16] LSTM을 이용한 태양풍 예측 모델 구성 예시
+
+첫번째 프로젝트는 LSTM 기법을 적용한 딥러닝 모델로 시계열 특성을 지닌 데이터에 대한 예측 시 많이 활용되고 있는 모델로써 Geomag 데이터와 태양풍 속도를 이용하여 지구의 남북방향의 지자기 강도를 예측 하기 위한 시도 및 남북방향의 지자기 강도를 이용하여 태양풍의 속도를 예측하도록 관리되었다
+
+
+
+[그림 17] LSTM을 이용한 지자기 및 태양풍 속도 예측 결과
+
+그림 17의 좌측은 태양풍의 속도 변화에 대한 예측결과이며 우측은 LSTM 예측 모델과 기존에 연구했던 수치 모델의 오차를 비교한 그래프입니다. 이를 통해 LSTM 모델이 패턴 및 경향성이 더 잘 맞는 것을 확인 할 수 있습니다.
+두 번째 프로젝트로 Gradient Boosting 모델로써 각 트리는 문제에 대한 솔루션의 추정치이며 각 취약한 트리가 강력한 솔루션에 기여할 수 있습니다. 훈련이 반복 될때마다 가중치를 재 구성 하며 손실함수가 최소화되는 트리 앙상블을 찾는 것이 최종 목표입니다. 실험을 위해 10개월치의 데이터를 사용하였으며 실제 Kp 지수와 Gradient Boosting Regressor 모델을 이용하여 예측한 결과를 비교하였습니다. 그림 18에서 검정색 실선은 실제 Kp 지수를, 파란색 점은 Gradient Boosting Regressor 모델이 예측한 결과를 나타납니다.
+
+
+
+[그림 18] Kp 지수 예측 (3 Hour)
+
+그림 19은 관찰 된 Kp 지수와 다양한 모델에서 예측 된 Kp 지수 사이의 평균 제곱 오차를 나타납니다. Gradient Boosting Regressor는 기존의 모델보다 뛰어난 성능을 보였습니다.
+
+
+
+[그림 19] Kp 지수 예측 정확도 비교
+
+---
+### FDL 2018 도전과제
+
+#### SPACE RESOURCES
+
+FDL은 2018년 우주 자원 부문 인공지능 적용 도전 과제로 다개체 시스템을 적용한 자율 경로 계획 소프트웨어 플랫폼, 우주 자원 산업 생태계 초기 50년 모델링, 행성 표면 실시간 지도 작성을 위한 카메라 로컬라이제이션(localization) 3가지를 정했습니다.
+
+##### 자율 경로 계획 소프트웨어 플랫폼에 다개체 시스템 적용
+FDL은 무인 탐사 임무에 다개체 시스템(multi-agent system, MAS)을 적용하면, 기존에 사용되던 하나의 매개체(agent)로 구성된 시스템으로 문제를 해결하는 방식보다 탐사선의 임무 수행 능력을 향상할 것으로 판단했습니다. 다개체 시스템이란, 주어진 목적을 이루기 위해 2대 이상의 매개체를 팀으로 운영하는 시스템을 의미한다[11]. Mevludin Glavic은 자신의 기술 보고서[12]에서 센서를 통해 주변 환경을 인지하는 것으로 간주 될 수 있는 모든 존재들을 매개체라고 정의합니다. 다개체 시스템은 이러한 매개체가 네트워크를 구성하여, 개체 간 단순 업무 분담뿐만 아니라 개체 간 정보교환을 통해 임무를 수행하기 위한 판단을 내릴 수 있습니다. 1980년 MIT에서 개최한 분산식 인공지능 워크숍을 시작으로 세계적인 연구분야가 되었고, NASA에서는 2002년 로봇 간 작업 보정을 위한 FIRE(Federation of Intelligent Robotic Explorers) 프로젝트를 수행하기도 했습니다. 그림 20은 FIRE 프로젝트의 화성 탐사 시뮬레이션 예시이다[13]. FDL은 이러한 다개체 시스템을 자율 경로 계획 소프트웨어 플랫폼에 적용하면 선행 정보가 없는 환경이나 예기치 못한 상황에 임무를 수행하는 무인 탐사선의 강인성 및 적응성을 높이고 단일 매개체의 제한된 기능을 다개체 시스템을 통해 보다 다양하게 향상할 것으로 기대하면서, 자율 경로 계획 소프트웨어 플랫폼에 인공지능 기술 접목하는 것을 우주 자원 부문 첫번째 과제로 선정했습니다.
+
+
+
+[그림 20] FIRE 프로젝트 화성 탐사 시뮬레이션 예시 화면 [13]
+
+##### 초기 50년 간 우주 자원 산업 생태계 최적 모델링
+인류를 우주라는 무대에서 영원한 존재로 유지하기 위해서는 자원이 한정된 지구를 벗어나 지속적인 우주 자원의 확보가 필수적입니다. 지난 10년 간 우주 자원을 확보하려는 목적으로, DSI(Deep Space Industries), Planetary Resources 등의 신생 기업이 설립되었습니다. 룩셈부르크에서는 2017년 7월에 민간 기업에 우주 자원을 채굴할 권리를 부여하는 법안이 의회에서 통과했고[14], 중국은 우주 자원 채굴을 위한 양해각서를 룩셈부르크와 체결하기도 했지만[15], 여전히 우주 자원 산업은 초기 단계에 있습니다. FDL은 이러한 우주 자원 산업 생태계를 향후 50년간 최적의 상태로 도출하려는 목적으로, 특정 사업에 투자할 것인지, 특정 기업을 인수할 것인지 등의 전략에 따른 위험을 사전에 예측하고 의사 결정하는 인공지능 모델 연구를 두 번째 과제로 선정했습니다.
+
+##### 행성 표면 실시간 지도 작성을 위한 카메라 로컬라이제이션
+달이나 행성 표면을 탐사할 때 직면하는 어려움 중 하나는 탐사선으로부터 얻은 영상을 그림 21처럼 위성 영상의 시각으로 변환하는 것입니다. NASA는 달이나 행성 표면 탐사 임무에서 관찰 영상의 시각을 조정할 때, 과학자나 기술자의 전문지식에 의존하였다. 이러한 방식의 한계를 극복하기 위해서, FDL이 선정한 우주 자원 부문 2018년 세번째 도전 과제는 촬영 영상으로부터 탐사선이나 우주 비행사의 카메라 위치를 예측하고, 카메라 로컬라이제이션 하는 인공지능 모델을 개발하는 것입니다.
+
+
+
+[그림 21] 화성 표면 지도[16]
+
+#### EXOPLANETS
+EXOPLANET은 외계행성으로 불리며, 태양계 밖의 행성으로, 태양이 아닌 항성 주위를 공전하는 행성이다[17]. 지금까지는 케플러우주망원경 사용하여 수천개의 외계행성을 찾았지만 임무 종료가 수개월 밖에 남지 않았습니다. NASA는 TESS(Transiting Exoplanet Survey Satellite)을 발사하여 태양계 외부의 항성계 시스템을 찾는 게 임무를 계속 수행하고자 합니다.
+첫번째 도전과제는 2018년 4월 18일에 발사한 Transiting Exoplanet Survey Satellite(TESS)를 사용하여 외계행성 탐지 효율과 발견량을 증가시키는 것입니다. 케플러 우주 망원경으로 찾아낸 외계행성 후보는 5100개에 달하며 아직도 분석이 끝나지 않은 만큼 데이터 양이 매우 많습니다. 게다가 TESS는 우주 전체를 26개의 서로 다른 영역으로 나누어 24~96도의 범위로 2년간 탐색하는데 그 범위가 케플러의 400배에 달합니다. TESS를 통해 얻는 기존보다 더 많은 데이터는사람이 일일이 처리하기에는 너무 많은 양이기 때문에 AI를 적용하여 이러한 문제를 해결하고 더 많은 결과를 얻을 수 있을 것이라 기대합니다.
+실제로 2017년 Google AI의 Chris Shallue는 신경망을 사용하여 케플러 우주망원경의 기록 테이터를 분석하여 2개의 알려지지 않은 외계행성을 발견하였다. 외계행성을 찾을 때 주로 횡단법(Transits)을 사용하는데, 이것은 외계행성이 관찰자와 항성 사이를 지나갈 경우 항성 표면에 검은 원반이 지나가는 것 처럼 보이는데 그때의 항성의 밝기가 어두워지는 정도를 통해 행성의 존재여부와 크기를 확인하는 방식입니다. 이러한 관측을 항성 전체에 대한 binary 이미지와 원반이 포함된 부분에 대한 이미지를 데이터셋으로하여 CNN을 사용하는 Classifier 모델을 학습하였고 이 모델을 사용하여 외계행성을 발견하였다.
+
+
+
+[그림 22] 횡단법을 사용하여 생성한 이진 이미지 데이터 생성
+
+두번째 도전 과제는 TESS가 첫번째 과제에서 찾은 외계행성 중에서 암반행성을 더 잘 식별할 수 있도록 AI 기반의 외계행성 발견 및 분류 과정을 체계화하는 것입니다. 행성은 행성을 구성하는 물질에 따라 암반행성, 가스행성 그리고 얼음행성으로 구분되고 지구와 같은 행성이 암반행성에 속합니다. 이러한 암반행성의 발견은 외계 생명체의 존재 여부와 더 나아가 먼 미래에 인류가 거주할 제 2 지구의 가능성을 열어 줄 수 있을 것입니다.
+
+#### SPACE WEATHER
+우주환경 영역에서는 총 4개의 과제가 발표되었다. 첫번째 과제는 태양의 활동이 태양계에 미치는 새로운 영향을 찾는 것입니다. FDL 2017의 “Solar-Terrestrial Interactions” 팀은 태양풍 데이터를 활용하여 Kp 지수를 예보하도록 훈련된 모델을 발표하였다. 이번 과제에서는 이러한 단계에서 더 발전하여 SOHO와 같은 L1 포인트에 있는 위성 데이터를 활용한 태양과 전 세계의 기상 패턴, 번개, 지진 전조 현상과 같은 전 지구적 현상과의 관계를 찾는 것이 목표임을 제시하였다.
+두번째 과제는 내일의 태양 영상 및 활동을 예측하는 것입니다. 이 과제의 목표는 축적되어 있는 수 테라바이트(TB)의 Solar Dynamics Observatory (SDO)/ Atmospheric Imaging Assembly (AIA) 영상 자료를 활용하여 향후 24시간의 태양 활동을 예측하는 모델을 훈련하는 것입니다. 개발될 모델은 시계열 형태의 과거의 AIA 영상들을 활용하여 향후 24시간 이내의 태양 이미지를 출력하는 것을 목표로 훈련될 것입니다.
+세번 째 과제는 SDO/AIA 영상을 활용하여 태양에서 방출되는 에너지의 양을 파장대별로 예측하는 것입니다. 태양으로부터 방출되는 전자기파는 지구 상층 대기에 영향을 주는 중요한 요소입니다. 태양 플레어 폭발과 코로나 질량 방출(Coronal Mass Ejection, CME)와 같은 단기간에 발생하는 태양 폭발 현상은 지구 상층 대기에 큰 소란을 끼칠 수 있고, 대기를 가열시켜 인공위성이 대기와의 마찰로 인해 지구 방면으로 끌려오는 현상의 원인이 될 수 있다. 이 과제의 목표는 SDO/AIA 영상을 활용하여 태양으로부터 방출되는 극자외선(Extreme Ultraviolet, EUV)과 soft X-ray의 방사량을 예측하는 모델을 훈련시키는 것입니다. 극자외선과 soft X-ray의 지구 입사량은 위성 궤도에서 위성 끌림 현상과 지구 대기의 장기적 진화 등을 예측하는 지구 대기 모델의 중요한 입력 인자이기 때문에 훈련된 모델의 결과가 활용될 수 있을 것으로 예측됩니다.
+마지막 네번째 과제는 Global Positioning System (GPS) 및 Global Navigation Satellite System (GNSS) 관측 자료를 이용한 전리권 모델의 개선입니다. 이 과제는 과거에 수집되었던 방대한 양의 Global Positioning System (GPS) 및 Global Navigation Satellite System (GNSS) 관측 자료와 그 신호들이 지구 대기를 통과하는 과정에서 발생한 산란에 대한 관측을 토대로 전리층의 상태를 분석하고 전리층과 우주기상 간의 상관관계를 분석할 수 있는 모델을 개발하는 것입니다.
+
+#### SPACE TRAFFIC MANAGEMENT / ORBITAL DEBRIS
+2018년도에 새롭게 준비된 파트로 두 가지 과제를 담고 있습니다. 첫번째 과제로는 우주 대기모델을 예측하는 것으로 광범위한 우주환경, Resident Space Objects(RSOs) 추적데이터, 궤도 예측 모델의 Resource Description Framework(RDF) 등에 적용하여 우주비행체의 위험에 대한 조기 경보 등 정보제공에 정확도 등의 성능을 높이고자 합니다. 인공지능 기술은 RDF와 같은 정보에서 우주비행체의 동적 패턴을 학습하고 추출하는 방식으로 RSO와 관계된 우주환경과 전반적인 저궤도 RSO분포에 대한 궤도 운동의 예측 정확도를 향상시킬 것으로 기대됩니다.
+두번째 과제로는 양자기술을 이용한 효과적인 우주 교통관리(Space traffic management)와 장기적 궤도 안정성을 위한 충돌 불확실성을 줄이는 것입니다. 다양한 우주임무를 수행하기 위해 많은 인공물체들이 근지구궤도에 올라가게 되며 이로인한 우주환경은 계속적으로 악화될 것이며, 우주 규제당국의 장기 궤도 안정성 확보는 점점 더 어려워지는 상황입니다. 이에 본 과제에서는 충돌상황에서의 불확실한 모델을 양자컴퓨팅알고리즘(quantum computing algorithm)을 적용하고자 합니다. 충돌상황 계산은 방대한 계산이 요구되며, 우주공간 특성상 오차발생이 큰데, 고전적인 시뮬레이션에서는 궤도공간의 곡선 오류 볼륨(curvilinear error volume)으로 인해 계산 정확도가 낮습니다. 양자기반 컴퓨팅 기술은 이를 극복하고 장기 임무에 보증을 위한 중요한 최적화 추정을 위한 툴이 될 것으로 기대됩니다.
+그림 23은 우주물체의 충돌상황을 나타낸 것이며, 타원체는 위치공분산으로 각 우주물체의 위치불확실성을 표시한 것입니다. Primary의 경우, 궤도정보를 많이 갖고 있기 때문에 위치불확실성이 낮으나 다른나라 소유이거나 우주쓰레기인 Secondary는 궤도정보의 정확도가 다소 떨어집니다. 본 과제에서는 인공지능과 양자컴퓨팅 알고리즘을 통해 보다 정확한 우주 대기 모델을 생성하여, 장기적 궤도 안정성을 높이고자 합니다.
+
+
+
+[그림 23] 우주물체 충돌상황
+
+#### EARTH OBSERVATION
+센티넬(Sentinel) 2호와 같은 원격탐사 위성이 발사한 이래, 자연 현상을 보다 높은 수준으로 이해할 수 있게 되었습니다. 하지만 아직 새로운 위성 데이터 처리나, 데이터 처리 시간의 지연, 그리고 지상의 데이터와 위성 관측 데이터와의 결합의 문제 등은 위성 데이터 활용 극대화에 걸림돌이 되고 있습니다. 따라서 이러한 문제를 해결하기 위해 인공지능 기술 기반의 대용량 데이터 처리나, 자연현상 감지 등의 작업을 자동화하는 연구를 기획하였고, 최종적으로 지구 환경 모니터링 및 시간적인 지구 변화 감지, 다양한 타입의 데이터 관측 및 검증, 실시간 데이터 품질 관리 등에서 효율성 향상을 도모하고자 합니다. 또한 향상된 위성 데이터 처리 기법을 통하여 최종적으로 지구 환경 변화나 지진 등의 재난을 예측하여 피해예상지역에 대한 경고나 대피 인력 배치 등과 같은 재난 대응에 활용할 예정입니다.
+
+---
+### FDL 지원방법
+
+FDL은 NASA FDL 홈페이지(http://www.frontierdevelopmentlab.org) 지원 가능합니다. 지원 시에는 소속, 학위 내용 등의 간단한 인적사항 기재와 지원 동기 및 목표, 그리고 이력서 또는 지원서 업로드를 요구합니다. 지원 분야는 크게 두 가지로, 첫 번째는 우주 탐사(Space Exploration), 그리고 인공 지능(Artificial Intelligence) 입니다. 두 분야에 종사하는 박사과정 또는 박사후과정을 밝고 있는 연구원들이 지원 가능합니다. 인공 지능 분야의 지원자의 경우, 기계학습(Machine Learning) 또는 딥러닝(Deep Learning)의 경험이 필요하고, TensorFlow, Keras, Torch 등의 딥러닝 프레임워크(Framework) 프로그래밍 경험을 요구하며, 있는 경우 GitHub 프로필을 기재해야 합니다. 박사후과정 지원자의 경우, J-1 비자를 발급받아야 하기 때문에 이를 위한 준비 과정도 필수입니다.
+
+---
+### 결론
+
+국가기관과 학계 그리고 민간 기업에서 서로 협력하여 우주분야에 인공지능 기술은 연구하는 프로그램인 FDL에 대해서 알아보았습니다. FDL는 효율적이고 혁신적인 연구를 위해 여섯 가지 방법론에 기초하여 연구 문화를 형성하였고, 공공 분야와 민간 분야의 파트너쉽을 통해 연구 수행을 위해 많은 자원과 혜택을 얻었습니다. NASA에서는 FDL의 도전 과제별로 보유하고 있는 방대한 자료를 제공합니다. 2017년도에 이뤄졌던 연구의 문제 정의, 데이터셋, 적용 모델, 결과를 살펴보고 2018년에는 분야별로 어떤 도전 과제가 있는 지 알아보았다. 2018년 FDL은 올해 여름에 진행될 예정이니 어떠한 연구 성과가 나올 지 기대됩니다.
+항공우주분야의 인공지능 기술 접목을 위해서는 연구주제와 데이터셋을 산학연이 공유하여 공동 연구하는 것이 중요하다는 것을 다시 한번 알게되는 계기가 되었으며, 우리나라에서도 FDL과 같이 여러 전문기관이 모여 항공우주분야의 문제들을 함께 고민하고 연구하는 프로그램이 생겼으면 하는 바램입니다.
+
+---
+### 결론
+* (1) http://keras.io
+* (2) http://www.frontierdevelopmentlab.org/images/proceedings_brochure.pdf
+* (3) Susana Zoghbi et al., “Searching for Long-Period Comets with Deep Learning Tools”, Deep Learning for Physical Science, Neural Information Processing Systems, 2017
+* (4) https://www.nasa.gov/planetarydefense
+* (5) https://adamcobb.github.io/journal/3D-Shape-Modelling-of-Asteroids.html
+* (6) https://www.jpl.nasa.gov/spaceimages/details.php?id=PIA20043
+* (7) https://www.slideshare.net/LeonardSilverberg/fdl-2017-3d-shape-modeling?qid=67980c69-fbc1-4a2b-9551-777f3b612b2f&v=&b=&from_search=1
+* (8) Goodfellow, Ian, et al. "Generative adversarial nets." Advances in neural information processing systems.
+* (9) http://www.pozorovanislunce.eu/vykladovy-slovnicek/mcintoshova-klasifikace-slunecnich-skvrn.html
+* (10) https://www.nasa.gov/content/goddard/how-sdo-sees-the-sun
+* (11) 최정식, 이범희, 이제훈, 윤영환. (2010). 다개체 로봇의 협업기술과 응용. 전기의세계, 59(11), 16-26.
+* (12) Mevludin Glavic,2006, Agents and Mutli-Agent Systems: A short Introduction for Power Engineers, Belgium University
+* (13) http://www.cs.cmu.edu/~./FIRE/index.html
+* (14) http://spacenews.com/luxembourg-adopts-space-resources-law/
+* (15) http://www.spaceresources.public.lu/en/actualites/2018/Luxembourg-cooperates-with-China-in-the-exploration-and-use-of-outer-space-for-peaceful-purpose.hml
+* (16) http://planetary-science.org/mars-research/mars-cartography/
+* (17) https://en.wikipedia.org/wiki/Exoplanet
+
+---
+### 같이 보기
+
+#### 케라스 코리아 커뮤니티
+
+* [케라스 코리아 페북](https://www.facebook.com/groups/KerasKorea/)
+* [케라스 코리아 슬랙 초대](https://join.slack.com/t/keraskorea/shared_invite/enQtNTUzMTUxMzIyMzg4LWQ3YmQ1YTdmNTYxOTAwZTExNmFmOGM3M2QyMjIyNzYwYTY2YTY2ZjBlNDNlZDdmMTU0NGVjYzFkMWYxNzE0ZDA)
+* [케라스 코리아 단톡방](https://open.kakao.com/o/g93MSBV)
+* [케라스 코리아 블로그](http://keraskorea.github.io)
+* [케라스 공식 문서 한글번역 참여방법](https://tykimos.github.io/2019/02/06/Contribution_of_Keras_Document_to_Korean_Translation/)
+* [케라스 기초 강좌](https://tykimos.github.io/lecture/)
+
+#### 캐글 코리아 커뮤니티
+
+* [캐글 코리아 페북](https://www.facebook.com/groups/KaggleKoreaOpenGroup/)
+* [캐글 코리아 단톡방](https://open.kakao.com/o/gP24T89)
+* [캐글 코리아 블로그](https://kaggle-kr.tistory.com/)
diff --git a/_posts/2019-3-27-Keras_Kaggle_RL_National_Concert.md b/_posts/2019-3-27-Keras_Kaggle_RL_National_Concert.md
new file mode 100644
index 00000000..e81acb95
--- /dev/null
+++ b/_posts/2019-3-27-Keras_Kaggle_RL_National_Concert.md
@@ -0,0 +1,185 @@
+---
+layout: post
+title: "케라스 & 캐글 & 강화학습 전국콘서트"
+author: 김태영
+date: 2019-03-27 00:00:00
+categories: etc
+comments: true
+image: http://tykimos.github.io/warehouse/2019-3-27-Keras_Kaggle_RL_National_Concert_title_3.png
+---
+요즘 인공지능 기술이 여러분야에서 각광받고 있는 가운데, 머신러닝/딥러닝 모델 개발 및 데이터 분석 기술의 중요성이 커지고 있습니다. 관심은 있지만 아직 시작하시지 않았거나 이제 막 입문하시는 분들에게 딥러닝 모델, 데이터 분석, 강화학습 기술을 손에 쥐어드릴 수 있도록 케라스 코리아, 캐글 코리아, 강화학습 코리아 운영자가 전국적으로 소개하고자 합니다.
+
+
+
+---
+#### 케라스란?
+
+딥러닝의 놀라운 성과로 많은 분들이 관심을 가지고 있습니다. 그와 더불어 비전공자들이 쉽게 딥러닝 모델을 개발할 수 있도록 공개 라이브러리들도 많이 있습니다. 그 중 하나인 케라스는 아이디어를 빨리 구현하고 실험하기 위한 목적에 포커스가 맞춰진 만큼 굉장히 간결하고 쉽게 사용할 수 있도록 파이썬으로 구현된 상위 레벨의 라이브러리입니다. 이 라이브러리를 통해 쉽게 컨볼루션 신경망, 순환 신경망 또는 이를 조합한 신경망은 물론 다중 입력 또는 다중 출력 등 다양한 연결 구성을 할 수 있으며, 생성모델(GAN)이나 강화학습 모델도 만들 수 있습니다.
+
+#### 캐글이란?
+
+캐글은 예측모델 및 분석 대회 플랫폼입니다. 기업 및 단체에서 데이터와 해결과제를 등록하면, 데이터 과학자들이 이를 해결하는 모델을 개발하고 경쟁합니다. 다양한 실무 데이터셋을 검토하고, 대회에 참가하면서 서로 공유하는 커널(소스코드)를 통해서 함께 데이터 분석 역량을 키울 수 있기에 좋습니다.
+
+#### 강화학습이란?
+
+강화학습은 현재의 상태(State)에서 어떤 행동(Action)을 취하는 것이 최적인지를 학습하는 것입니다. 행동을 취할 때마다 외부 환경에서 보상(Reward)이 주어지는데, 이러한 보상을 최대화 하는 방향으로 학습이 진행됩니다.
+
+---
+#### 주최/주관
+
+* 케라스 코리아
+* 캐글 코리아
+* 강화학습 코리아
+
+#### 후원
+
+* (주)인스페이스
+* 구글 코리아
+* 대전테크노파크
+* 부산창조경제혁신센터
+* GDG 광주
+
+---
+### 프로그램
+
+#### 4차 - 광주 (4월 17일 수)
+
+* GDG Gwangju에서 준비해주신 간단한 식사(샌드위치)는 18:00부터 나눠드립니다.
+
+|주제|시간|내용|발표자|
+|-|-|-|-|
+|등록|18:00-18:30|인사 및 간단한 식사(샌드위치)|-|
+|소개|18:30-18:40|GDG Gwangju 소개|이종훈, 이용이|
+|케라스|18:40-19:40|딥러닝 개념과 케라스 코드를 살펴보고, 간단한 MLP, CNN, GAN를 시연해봅니다. 그리고 케라스 커뮤니티를 통해서 함께 즐기는 법에 대해서 알아봅니다.|김태영|
+|소통|19:40-19:50|질문 및 휴식|-|
+|캐글|19:50-20:50|데이터 분석 방법, 캐글 사용법, 여러가지 팁에 대해서 알아봅니다. 그리고 캐글 커뮤니티를 통해서 함께 즐기고 대회에 참여하는 방법에 대해서 알아봅니다.|이유한, 강천성|
+|소통|20:50-21:00|질문 및 휴식|-|
+|강화학습|21:00-22:00|강화학습 개념과 간단한 코드를 살펴봅니다. 그리고 강화학습 코리아에서 이뤄지고 있는 프로젝트에 대해서 알아보고 함께 즐기는 법에 대해서 알아봅니다.|유지원|
+
+* 광주과학기술원 상세 주소 : 광주광역시 북구 첨단과기로 123(오룡동) 광주과학기술원 전기전자컴퓨터공학 B동 (C2건물) 1층 해림홀
+
+
+
+#### 3차 - 부산 (4월 11일 목)
+
+|주제|시간|내용|발표자|
+|-|-|-|-|
+|등록|18:00-18:30|인사|-|
+|소개|18:30-18:40|운영진 소개|-|
+|케라스|18:40-19:40|딥러닝 개념과 케라스 코드를 살펴보고, 간단한 MLP, CNN, GAN를 시연해봅니다. 그리고 케라스 커뮤니티를 통해서 함께 즐기는 법에 대해서 알아봅니다.|김태영, 전미정|
+|소통|19:40-19:50|질문 및 휴식|-|
+|캐글|19:50-20:50|데이터 분석 방법, 캐글 사용법, 여러가지 팁에 대해서 알아봅니다. 그리고 캐글 커뮤니티를 통해서 함께 즐기고 대회에 참여하는 방법에 대해서 알아봅니다.|이유한, 강천성|
+|소통|20:50-21:00|질문 및 휴식|-|
+|강화학습|21:00-22:00|강화학습 개념과 간단한 코드를 살펴봅니다. 그리고 강화학습 코리아에서 이뤄지고 있는 프로젝트에 대해서 알아보고 함께 즐기는 법에 대해서 알아봅니다.|이현호|
+
+* 부산창조경제혁신센터 상세 주소 : 부산시 해운대구 센텀중앙로 78 센텀그린타워 4층 컨퍼런스홀
+
+#### 2차 - 대전 (2월 20일 수)
+
+|주제|시간|내용|발표자|
+|-|-|-|-|
+|케라스 및 캐글 소개|14:00-14:20|프로그램 소개 및 캐라스와 캐글이 무엇인지 알아봅니다.|운영진|
+|케라스 시작하기|14:20-15:00|딥러닝 개념과 케라스 코드를 살펴보고, 간단한 MLP, CNN, GAN를 시연해봅니다.|김태영|
+|소통|15:00-15:10|휴식 및 스트레칭|-|
+|캐글 시작하기|15:10-15:50|데이터 분석 방법, 캐글 사용법, 여러가지 팁에 대해서 알아봅니다.|이유한|
+|소통|15:50-16:00|휴식 및 명상하기|-|
+|케라스를 함께 즐기는 법|16:00-16:15|오픈 커뮤니티, 블로그, 페이스북, 단톡방 등을 이용해서 함께 케라스를 즐기는 법을 알아봅니다.|김태영|
+|캐글을 함께 즐기는 법|16:15-16:30|오픈 커뮤니티, 블로그, 페이스북, 단톡방 등을 이용해서 캐글을 즐기고 진행 중인 대회에 참여하는 법도 알아봅니다.|강천성|
+|함께 소통하기|16:30-17:00|케라스와 캐글에 대한 FAQ에 대해 살펴보고 참가자분들과 질의응답하면서 소통시간을 가집니다.|-|
+
+* 대전 대전테크노파크 상세 주소 : 대전광역시 유성구 용산동 테크노9로 35
+
+#### 1차 - 서울 (2월 14일 목)
+
+|주제|시간|내용|발표자|
+|-|-|-|-|
+|케라스 및 캐글 소개|18:00-18:20|프로그램 소개 및 캐라스와 캐글이 무엇인지 알아봅니다.|운영진|
+|케라스 시작하기|18:20-19:00|딥러닝 개념과 케라스 코드를 살펴보고, 간단한 MLP, CNN, GAN를 시연해봅니다.|김태영|
+|소통|19:00-19:10|휴식 및 스트레칭|-|
+|캐글 시작하기|19:10-19:50|데이터 분석 방법, 캐글 사용법, 여러가지 팁에 대해서 알아봅니다.|이유한|
+|소통|19:50-20:00|휴식 및 명상하기|-|
+|케라스를 함께 즐기는 법|20:00-20:15|오픈 커뮤니티, 블로그, 페이스북, 단톡방 등을 이용해서 함께 케라스를 즐기는 법을 알아봅니다.|김태영|
+|캐글을 함께 즐기는 법|20:15-20:30|오픈 커뮤니티, 블로그, 페이스북, 단톡방 등을 이용해서 캐글을 즐기고 진행 중인 대회에 참여하는 법도 알아봅니다.|이유한|
+|함께 소통하기|20:30-21:00|케라스와 캐글에 대한 FAQ에 대해 살펴보고 참가자분들과 질의응답하면서 소통시간을 가집니다.|-|
+
+* 서울 구글 코리아 상세 주소 : 서울 강남 테헤란로 152 강남파이낸스센터 22층 구글코리아 - 저녁시간이라 구글 코리아에서 간단한 간식(샌드위치 등)이 제공될 예정입니다.
+
+---
+### 일정 및 신청
+
+## [신청하기](https://goo.gl/forms/94Fla2TG2qO3Ctm33)
+
+|지역|날짜|시간|장소|발표|
+|-|-|-|-|-|-|
+|(신청중)부산|4/11(목)|오후 6시반 ~ 10시|부산창조경제혁신센터(해운대, 100명)|김태영, 전미정, 이유한, 강천성, 이현호|
+|(마감)광주|4/17(수)|오후 6시반 ~ 10시|광주과학기술원(오룡동, 100명)|김태영, 이유한, 강천성, 유지원|
+|(종료)서울|2/14(목)|오후 6시 ~ 9시|구글 코리아(역삼동, 160명)|김태영, 이유한|
+|(종료)대전|2/20(수)|오후 2시 ~ 5시|대전테크노파크(유성구, 110명)|김태영, 이유한, 강천성|
+|(예정)제주|-|-|-|
+|(예정)대구|-|-|-|
+|(예정)경기|-|-|-|
+|(예정)강원|-|-|-|
+
+---
+### 진행자
+
+|구분|소개|
+|-|-|
+||[김태영](https://web.facebook.com/tykimo), 케라스 코리아 운영자, (주)인스페이스
비전공자분들이 직관적이고 간결한 딥러닝 라이브러리인 케라스를 이용해 딥러닝 입문을 쉽게 할 수 있도록 '블록과 함께하는 파이썬 딥러닝 케라스'의 집필과 '김태영의 케라스 블로그', '케라스 코리아', '캐글 코리아'를 운영하고 있습니다. 또한 (주)인스페이스에서는 기술이사로서 “태양에서 세포까지 딥러닝”, “게임에서 우주까지 강화학습”의 모토로 여러분야 인공지능을 적용하고자 활발히 연구개발하고 있습니다.|
+| |[전미정](https://github.com/MijeongJeon), 케라스 코리아 운영자, iOS 개발자
김태영님의 세미나에서 풍문으로만 듣던 딥러닝을 케라스라는 툴을 이용해 쉽게 만들고, 적용하는 걸 보고 무릎을 탁!하고 쳤습니다. '케라스라면 나도 할 수 있지 않을까?'라는 용기를 가지고 모바일에 딥러닝 모델 심기를 시작했습니다. 메인 분야는 iOS이지만 머신러닝을 취미삼아 즐겁게 공부하고있습니다. 머신러닝에 관심 많은 많은 사람들과 기술을 공유하며 이야기를 나누고 싶습니다. 🕊 |
+||[이유한](https://web.facebook.com/youhan.lee.33o), 캐글 코리아 운영자, 카이스트 박사과정
캐글을 취미로 하는 대학원생입니다. 화학공학의 여러 문제를 머신러닝으로 풀려고 노력하고 있습니다. 데이터 사이언스, 머신러닝, 딥러닝을 캐글에서 연마하였습니다. 캐글 속 공유 정신에 감명받아, 데이터 사이언스가 취미가 되는, “모두의 데이터사이언스”를 꿈꾸며 “캐글 코리아”를 운영하고 있습니다.|
+||[강천성](https://web.facebook.com/profile.php?id=100007162502644), 캐글 코리아 운영자, 충남대 컴퓨터공학
개발자의 꿈을 꾸다 데이터의 매력에 빠져 데이터 분석가의 길을 걷고 있는 학부생입니다. 충남대학교 데이터 사이언스 연구실에서 학부 인턴을 하고 있습니다. 캐글 스터디 관리와 여러가지 활동을 통해 데이터 사이언스의 대중화를 목표로 캐글 코리아를 운영하고 있습니다.|
+||[이현호](https://web.facebook.com/profile.php?id=100003470945315), (주)인스페이스 인공지능연구실
응용수학과 컴퓨터공학을 복수전공하고 이를 활용하기 위해 인공지능 공부를 시작하였습니다. 현재 (주)인스페이스 인공지능 연구실에서 AI 연구원으로서 실생활 문제들에 인공지능을 적용하고자 노력하고 있습니다. 또 Unity 로 강화학습 환경을 제작하고 학습하는 것에 흥미가 있어, RL Korea의 Unity ML-Agents 팀원으로도 활동하고 있습니다.|
+||[유지원](https://web.facebook.com/JiwonAshleyRyu), 강화학습 운영자
강화학습을 좋아하는 평범한사람입니다. 전자과를 졸업해 임베디드SW를 다뤘지만, 강화학습에 매료되어 '강화학습 코리아'에서 재미있는 연구를 하고 있습니다. 특히, 로보틱스의 여러 문제를 강화학습으로 풀기위해 노력하고 있습니다. 이외에도 주식, 추천 서비스 등 다양한 분야에 강화학습이 적용되어 '모두의 알파고'를 가질수 있길 꿈꾸며 강화학습 코리아를 운영하고 있습니다. ‘RL Korea 블로그’를 통해 입문자에게 바른 길잡이를 제시하고자 노력하고 있습니다.|
+
+---
+### 발표자료
+
+* [케라스 이야기](https://drive.google.com/open?id=1sjtsRf0cYFb7-fj67TIjyCjDzbLj4vy-IeyOcT0vsgQ)
+* [딥러닝 이야기](https://drive.google.com/open?id=10L4PSBHrQLblbaPLTPnDTxBRJj_8y-KSyp6v8Ams5oY)
+* [레이어 이야기](https://drive.google.com/open?id=1TzHwAfEQlHDscYiOEO3EJ6dJBE6rrwkjFDYk3n0fRm0)
+* [생성 모델 이야기](https://drive.google.com/open?id=14poDITwyidWbwZQh08FAh2F5fsLWN1s8YRCZXp2FOoo)
+* [케라스 코리아 - 모두의 손에 딥러닝 툴을...](https://drive.google.com/open?id=1YcpkJJGe9s7Y1vzAQeGP7gqHGb4W0hNa1etfUIY8uzU)
+* [캐글 코리아 - 함께 공부해서 함께 나눕시다.](https://drive.google.com/open?id=1hUpqatYVmpUJ2q1_l-xGBQ9-lRQUNRT-AhULt9RqhyE)
+
+---
+### 강화학습 코리아 커뮤니티 함께하기
+* [강화학습 코리아 페북](https://www.facebook.com/groups/KaggleKoreaOpenGroup/)
+
+---
+### 콘서트 관련 질답
+
+* Q: 노트북이 필요한가요? A: 실습이 필요한 부분은 발표자 시연으로 이뤄집니다. 따라서 별도의 노트북은 필요없습니다.
+
+---
+### 후기
+
+#### 2/14 서울, 구글 코리아
+
+구글 코리아 본사에서 가장 큰 공간인 식당을 빌려서 행사를 진행했습니다. 구글 코리아 권순선님의 인사로 행사를 시작했습니다.
+
+
+
+제 강의에선 레고 블록 및 사람이 빠질 수 없죠. 요즘엔 딥러닝 모델의 학습 원리를 레고 사람에 비유를 많이 한답니다.
+
+
+
+이유한님의 캐글 소개를 시작합니다~ 이유한님의 팬들과 평소 캐글에 관심이 많은 분들과 함께 즐거운 소통을 했습니다.
+
+
+
+발렌타인 데이임에도 불구하고 많은 분들이 오셔서 즐겁게 콘서트를 즐기다 갔습니다. 내년에는 아예 발렌타인 이벤트로 진행을 해볼까도 생각이 드네요.
+
+
+
+#### 2/20 대전, 대전테크노파크
+
+케라스 코리아와 캐글 코리아의 운영자의 거주지가 대전인 만큼 대한민국의 "중앙"에서 두 번째 행사를 열었습니다. 캐글 코리아의 강천성님도 자리를 함께 해주셔서 커뮤니티 활동에 대해서 멋지게 발표해주셨습니다.
+
+
+
+대전 콘서트는 주중 오후 시간대임에도 불구하고 많은 분들이 오셔서 함께 즐거운 시간을 보냈습니다. 역시나 자리가 좀 부족해서 서서 들으시는 분들도 계셨습니다.
+
+
+
+후원해주신 (주)인스페이스, 구글 코리아, 대전테크노파크 관계자분들께 감사하다는 말씀을 다시 드리고 싶습니다.
diff --git a/_posts/2019-4-1-SolarMagGAN.md b/_posts/2019-4-1-SolarMagGAN.md
new file mode 100644
index 00000000..b7091312
--- /dev/null
+++ b/_posts/2019-4-1-SolarMagGAN.md
@@ -0,0 +1,210 @@
+---
+layout: post
+title: "공개된 딥러닝 모델로 네이처 자매지 등재하기"
+author: 김태영
+date: 2019-04-01 00:00:00
+categories: etc
+comments: true
+image: http://tykimos.github.io/warehouse/2019-4-1-SolarMagGAN_title.png
+---
+요즘 인공지능 기술이 여러분야에서 각광받고 있는 가운데, 머신러닝/딥러닝 모델 개발 및 데이터 분석 기술의 중요성이 커지고 있습니다. 관심은 있지만 아직 시작하시지 않았거나 이제 막 입문하시는 분들에게 딥러닝 모델, 데이터 분석, 강화학습 기술을 손에 쥐어드릴 수 있도록 케라스 코리아, 캐글 코리아, 강화학습 코리아 운영자가 전국적으로 소개하고자 합니다.
+
+
+
+관련기사
+* ["인스페이스, 산학연 공동연구로 AI기반 태양 측면 자기장 영상 복원 성공"](http://www.etnews.com/20190305000214)
+* [사이테크 플러스] ("태양 뒷면·측면 자기장영상, 인공지능으로 복원"] https://www.yna.co.kr/view/AKR20190304157400017
+
+ 태양을 관측하는 위성이 태양의 전면과 태양의 측면이 있습니다.
+- 태양 전면을 관측하는 위성은 크로버 센서(AIA)와 하트 센서(HMI)가 있습니다.
+- 태양 측면을 관측하는 위성은 크로버 센서(EUVI)만 있습니다.
+- 두 위성의 크로버 센서는 비슷한 특성을 가진 센서(AIA-EUVI) 입니다.
+- 하트 센서(HMI)는 마그네토그램으로 우주날씨를 예보하는 데 중요한 정보를 제공합니다.
+- 하지만 이 하트 센서는 태양 전면을 관측하는 위성에만 있습니다.
+- 만약 태양 측면을 관측하는 위성에 하트 센서가 있다면 예보 시에 더욱더 도움이 될 것입니다.
+① 그래서 태양 전면을 관측하는 위성의 크로버 센서와 하트 센서 쌍을 인공지능 모델(pix2pix)로 학습시킵니다.
+- 모델명이 pix2pix인 이유는 픽셀에서 픽셀로 바꾼다는 의미를 가지고 있습니다.
+② 이 pix2pix은 쌍을 학습시켰으므로 태양 측면의 크로버 센서 영상을 입력하면, ③ 태양 측면의 하트 센서 영상을 생성할 수 있습니다.
+- 제대로 생성했는 지 확인하기 위해 태양흑점을 추적해봤습니다. (오른쪽 하단 그림에서 노란색 화살표)
+- 태양 전면의 하트센서에서 보였던 흑점이 태양 측면의 하트센서에서도 나오고 있음을 확인할 수 있습니다.
+- 이제 인공지능의 도움으로 태양 측면의 하트센서 영상을 볼 수 있으므로 우주날씨를 예보하는 데 더 도움이 될 것입니다.
+
+
+
+
+
+
+
+
+
+
+
+
+
+---
+#### 케라스란?
+
+딥러닝의 놀라운 성과로 많은 분들이 관심을 가지고 있습니다. 그와 더불어 비전공자들이 쉽게 딥러닝 모델을 개발할 수 있도록 공개 라이브러리들도 많이 있습니다. 그 중 하나인 케라스는 아이디어를 빨리 구현하고 실험하기 위한 목적에 포커스가 맞춰진 만큼 굉장히 간결하고 쉽게 사용할 수 있도록 파이썬으로 구현된 상위 레벨의 라이브러리입니다. 이 라이브러리를 통해 쉽게 컨볼루션 신경망, 순환 신경망 또는 이를 조합한 신경망은 물론 다중 입력 또는 다중 출력 등 다양한 연결 구성을 할 수 있으며, 생성모델(GAN)이나 강화학습 모델도 만들 수 있습니다.
+
+#### 캐글이란?
+
+캐글은 예측모델 및 분석 대회 플랫폼입니다. 기업 및 단체에서 데이터와 해결과제를 등록하면, 데이터 과학자들이 이를 해결하는 모델을 개발하고 경쟁합니다. 다양한 실무 데이터셋을 검토하고, 대회에 참가하면서 서로 공유하는 커널(소스코드)를 통해서 함께 데이터 분석 역량을 키울 수 있기에 좋습니다.
+
+#### 강화학습이란?
+
+강화학습은 현재의 상태(State)에서 어떤 행동(Action)을 취하는 것이 최적인지를 학습하는 것입니다. 행동을 취할 때마다 외부 환경에서 보상(Reward)이 주어지는데, 이러한 보상을 최대화 하는 방향으로 학습이 진행됩니다.
+
+---
+#### 주최/주관
+
+* 케라스 코리아
+* 캐글 코리아
+* 강화학습 코리아
+
+#### 후원
+
+* (주)인스페이스
+* 구글 코리아
+* 대전테크노파크
+* 부산창조경제혁신센터
+* GDG 광주
+
+---
+### 프로그램
+
+#### 4차 - 광주 (4월 17일 수)
+
+* GDG Gwangju에서 준비해주신 간단한 식사(샌드위치)는 18:00부터 나눠드립니다.
+
+|주제|시간|내용|발표자|
+|-|-|-|-|
+|등록|18:00-18:30|인사 및 간단한 식사(샌드위치)|-|
+|소개|18:30-18:40|GDG Gwangju 소개|이종훈, 이용이|
+|케라스|18:40-19:40|딥러닝 개념과 케라스 코드를 살펴보고, 간단한 MLP, CNN, GAN를 시연해봅니다. 그리고 케라스 커뮤니티를 통해서 함께 즐기는 법에 대해서 알아봅니다.|김태영, 전미정|
+|소통|19:40-19:50|질문 및 휴식|-|
+|캐글|19:50-20:50|데이터 분석 방법, 캐글 사용법, 여러가지 팁에 대해서 알아봅니다. 그리고 캐글 커뮤니티를 통해서 함께 즐기고 대회에 참여하는 방법에 대해서 알아봅니다.|이유한, 강천성|
+|소통|20:50-21:00|질문 및 휴식|-|
+|강화학습|21:00-22:00|강화학습 개념과 간단한 코드를 살펴봅니다. 그리고 강화학습 코리아에서 이뤄지고 있는 프로젝트에 대해서 알아보고 함께 즐기는 법에 대해서 알아봅니다.|유지원|
+
+#### 3차 - 부산 (4월 11일 목)
+
+|주제|시간|내용|발표자|
+|-|-|-|-|
+|등록|18:00-18:30|인사|-|
+|소개|18:30-18:40|운영진 소개|-|
+|케라스|18:40-19:40|딥러닝 개념과 케라스 코드를 살펴보고, 간단한 MLP, CNN, GAN를 시연해봅니다. 그리고 케라스 커뮤니티를 통해서 함께 즐기는 법에 대해서 알아봅니다.|김태영, 전미정|
+|소통|19:40-19:50|질문 및 휴식|-|
+|캐글|19:50-20:50|데이터 분석 방법, 캐글 사용법, 여러가지 팁에 대해서 알아봅니다. 그리고 캐글 커뮤니티를 통해서 함께 즐기고 대회에 참여하는 방법에 대해서 알아봅니다.|이유한, 강천성|
+|소통|20:50-21:00|질문 및 휴식|-|
+|강화학습|21:00-22:00|강화학습 개념과 간단한 코드를 살펴봅니다. 그리고 강화학습 코리아에서 이뤄지고 있는 프로젝트에 대해서 알아보고 함께 즐기는 법에 대해서 알아봅니다.|이현호|
+
+#### 2차 - 대전 (2월 20일 수)
+
+|주제|시간|내용|발표자|
+|-|-|-|-|
+|케라스 및 캐글 소개|14:00-14:20|프로그램 소개 및 캐라스와 캐글이 무엇인지 알아봅니다.|운영진|
+|케라스 시작하기|14:20-15:00|딥러닝 개념과 케라스 코드를 살펴보고, 간단한 MLP, CNN, GAN를 시연해봅니다.|김태영|
+|소통|15:00-15:10|휴식 및 스트레칭|-|
+|캐글 시작하기|15:10-15:50|데이터 분석 방법, 캐글 사용법, 여러가지 팁에 대해서 알아봅니다.|이유한|
+|소통|15:50-16:00|휴식 및 명상하기|-|
+|케라스를 함께 즐기는 법|16:00-16:15|오픈 커뮤니티, 블로그, 페이스북, 단톡방 등을 이용해서 함께 케라스를 즐기는 법을 알아봅니다.|김태영|
+|캐글을 함께 즐기는 법|16:15-16:30|오픈 커뮤니티, 블로그, 페이스북, 단톡방 등을 이용해서 캐글을 즐기고 진행 중인 대회에 참여하는 법도 알아봅니다.|강천성|
+|함께 소통하기|16:30-17:00|케라스와 캐글에 대한 FAQ에 대해 살펴보고 참가자분들과 질의응답하면서 소통시간을 가집니다.|-|
+
+#### 1차 - 서울 (2월 14일 목)
+
+|주제|시간|내용|발표자|
+|-|-|-|-|
+|케라스 및 캐글 소개|18:00-18:20|프로그램 소개 및 캐라스와 캐글이 무엇인지 알아봅니다.|운영진|
+|케라스 시작하기|18:20-19:00|딥러닝 개념과 케라스 코드를 살펴보고, 간단한 MLP, CNN, GAN를 시연해봅니다.|김태영|
+|소통|19:00-19:10|휴식 및 스트레칭|-|
+|캐글 시작하기|19:10-19:50|데이터 분석 방법, 캐글 사용법, 여러가지 팁에 대해서 알아봅니다.|이유한|
+|소통|19:50-20:00|휴식 및 명상하기|-|
+|케라스를 함께 즐기는 법|20:00-20:15|오픈 커뮤니티, 블로그, 페이스북, 단톡방 등을 이용해서 함께 케라스를 즐기는 법을 알아봅니다.|김태영|
+|캐글을 함께 즐기는 법|20:15-20:30|오픈 커뮤니티, 블로그, 페이스북, 단톡방 등을 이용해서 캐글을 즐기고 진행 중인 대회에 참여하는 법도 알아봅니다.|이유한|
+|함께 소통하기|20:30-21:00|케라스와 캐글에 대한 FAQ에 대해 살펴보고 참가자분들과 질의응답하면서 소통시간을 가집니다.|-|
+
+---
+### 일정 및 신청
+
+## [신청하기](https://goo.gl/forms/94Fla2TG2qO3Ctm33)
+
+|지역|날짜|시간|장소|발표|
+|-|-|-|-|-|-|
+|(신청중)부산|4/11(목)|오후 6시반 ~ 10시|부산창조경제혁신센터(해운대, 100명)|김태영, 전미정, 이유한, 강천성, 이현호|
+|(신청중)광주|4/17(수)|오후 6시반 ~ 10시|광주과학기술원(오룡동, 100명)|김태영, 이유한, 강천성, 유지원|
+|(종료)서울|2/14(목)|오후 6시 ~ 9시|구글 코리아(역삼동, 160명)|김태영, 이유한|
+|(종료)대전|2/20(수)|오후 2시 ~ 5시|대전테크노파크(유성구, 110명)|김태영, 이유한, 강천성|
+|(예정)제주|-|-|-|
+|(예정)대구|-|-|-|
+|(예정)경기|-|-|-|
+|(예정)강원|-|-|-|
+
+* 부산창조경제혁신센터 상세 주소 : 부산시 해운대구 센텀중앙로 78 센텀그린타워 3층
+* 광주과학기술원 상세 주소 : 광주광역시 북구 첨단과기로 123(오룡동) 광주과학기술원 전기전자컴퓨터공학 B동 (C2건물) 1층 해림홀
+* 대전 대전테크노파크 상세 주소 : 대전광역시 유성구 용산동 테크노9로 35
+* 서울 구글 코리아 상세 주소 : 서울 강남 테헤란로 152 강남파이낸스센터 22층 구글코리아 - 저녁시간이라 구글 코리아에서 간단한 간식(샌드위치 등)이 제공될 예정입니다.
+
+---
+### 진행자
+
+|구분|소개|
+|-|-|
+||[김태영](https://web.facebook.com/tykimo), 케라스 코리아 운영자, (주)인스페이스
비전공자분들이 직관적이고 간결한 딥러닝 라이브러리인 케라스를 이용해 딥러닝 입문을 쉽게 할 수 있도록 '블록과 함께하는 파이썬 딥러닝 케라스'의 집필과 '김태영의 케라스 블로그', '케라스 코리아', '캐글 코리아'를 운영하고 있습니다. 또한 (주)인스페이스에서는 기술이사로서 “태양에서 세포까지 딥러닝”, “게임에서 우주까지 강화학습”의 모토로 여러분야 인공지능을 적용하고자 활발히 연구개발하고 있습니다.|
+| |[전미정](https://github.com/MijeongJeon), 케라스 코리아 운영자, iOS 개발자
김태영님의 세미나에서 풍문으로만 듣던 딥러닝을 케라스라는 툴을 이용해 쉽게 만들고, 적용하는 걸 보고 무릎을 탁!하고 쳤습니다. '케라스라면 나도 할 수 있지 않을까?'라는 용기를 가지고 모바일에 딥러닝 모델 심기를 시작했습니다. 메인 분야는 iOS이지만 머신러닝을 취미삼아 즐겁게 공부하고있습니다. 머신러닝에 관심 많은 많은 사람들과 기술을 공유하며 이야기를 나누고 싶습니다. 🕊 |
+||[이유한](https://web.facebook.com/youhan.lee.33o), 캐글 코리아 운영자, 카이스트 박사과정
캐글을 취미로 하는 대학원생입니다. 화학공학의 여러 문제를 머신러닝으로 풀려고 노력하고 있습니다. 데이터 사이언스, 머신러닝, 딥러닝을 캐글에서 연마하였습니다. 캐글 속 공유 정신에 감명받아, 데이터 사이언스가 취미가 되는, “모두의 데이터사이언스”를 꿈꾸며 “캐글 코리아”를 운영하고 있습니다.|
+||[강천성](https://web.facebook.com/profile.php?id=100007162502644), 캐글 코리아 운영자, 충남대 컴퓨터공학
개발자의 꿈을 꾸다 데이터의 매력에 빠져 데이터 분석가의 길을 걷고 있는 학부생입니다. 충남대학교 데이터 사이언스 연구실에서 학부 인턴을 하고 있습니다. 캐글 스터디 관리와 여러가지 활동을 통해 데이터 사이언스의 대중화를 목표로 캐글 코리아를 운영하고 있습니다.|
+||[이현호](https://web.facebook.com/profile.php?id=100003470945315), (주)인스페이스 인공지능연구실
응용수학과 컴퓨터공학을 복수전공하고 이를 활용하기 위해 인공지능 공부를 시작하였습니다. 현재 (주)인스페이스 인공지능 연구실에서 AI 연구원으로서 실생활 문제들에 인공지능을 적용하고자 노력하고 있습니다. 또 Unity 로 강화학습 환경을 제작하고 학습하는 것에 흥미가 있어, RL Korea의 Unity ML-Agents 팀원으로도 활동하고 있습니다.|
+||[유지원](https://web.facebook.com/JiwonAshleyRyu), 강화학습 운영자
강화학습을 좋아하는 평범한사람입니다. 전자과를 졸업해 임베디드SW를 다뤘지만, 강화학습에 매료되어 '강화학습 코리아'에서 재미있는 연구를 하고 있습니다. 특히, 로보틱스의 여러 문제를 강화학습으로 풀기위해 노력하고 있습니다. 이외에도 주식, 추천 서비스 등 다양한 분야에 강화학습이 적용되어 '모두의 알파고'를 가질수 있길 꿈꾸며 강화학습 코리아를 운영하고 있습니다. ‘RL Korea 블로그’를 통해 입문자에게 바른 길잡이를 제시하고자 노력하고 있습니다.|
+
+---
+### 발표자료
+
+* [케라스 이야기](https://drive.google.com/open?id=1sjtsRf0cYFb7-fj67TIjyCjDzbLj4vy-IeyOcT0vsgQ)
+* [딥러닝 이야기](https://drive.google.com/open?id=10L4PSBHrQLblbaPLTPnDTxBRJj_8y-KSyp6v8Ams5oY)
+* [레이어 이야기](https://drive.google.com/open?id=1TzHwAfEQlHDscYiOEO3EJ6dJBE6rrwkjFDYk3n0fRm0)
+* [생성 모델 이야기](https://drive.google.com/open?id=14poDITwyidWbwZQh08FAh2F5fsLWN1s8YRCZXp2FOoo)
+* [케라스 코리아 - 모두의 손에 딥러닝 툴을...](https://drive.google.com/open?id=1YcpkJJGe9s7Y1vzAQeGP7gqHGb4W0hNa1etfUIY8uzU)
+* [캐글 코리아 - 함께 공부해서 함께 나눕시다.](https://drive.google.com/open?id=1hUpqatYVmpUJ2q1_l-xGBQ9-lRQUNRT-AhULt9RqhyE)
+
+---
+### 강화학습 코리아 커뮤니티 함께하기
+* [강화학습 코리아 페북](https://www.facebook.com/groups/KaggleKoreaOpenGroup/)
+
+---
+### 콘서트 관련 질답
+
+* Q: 노트북이 필요한가요? A: 실습이 필요한 부분은 발표자 시연으로 이뤄집니다. 따라서 별도의 노트북은 필요없습니다.
+
+---
+### 후기
+
+#### 2/14 서울, 구글 코리아
+
+구글 코리아 본사에서 가장 큰 공간인 식당을 빌려서 행사를 진행했습니다. 구글 코리아 권순선님의 인사로 행사를 시작했습니다.
+
+
+
+제 강의에선 레고 블록 및 사람이 빠질 수 없죠. 요즘엔 딥러닝 모델의 학습 원리를 레고 사람에 비유를 많이 한답니다.
+
+
+
+이유한님의 캐글 소개를 시작합니다~ 이유한님의 팬들과 평소 캐글에 관심이 많은 분들과 함께 즐거운 소통을 했습니다.
+
+
+
+발렌타인 데이임에도 불구하고 많은 분들이 오셔서 즐겁게 콘서트를 즐기다 갔습니다. 내년에는 아예 발렌타인 이벤트로 진행을 해볼까도 생각이 드네요.
+
+
+
+#### 2/20 대전, 대전테크노파크
+
+케라스 코리아와 캐글 코리아의 운영자의 거주지가 대전인 만큼 대한민국의 "중앙"에서 두 번째 행사를 열었습니다. 캐글 코리아의 강천성님도 자리를 함께 해주셔서 커뮤니티 활동에 대해서 멋지게 발표해주셨습니다.
+
+
+
+대전 콘서트는 주중 오후 시간대임에도 불구하고 많은 분들이 오셔서 함께 즐거운 시간을 보냈습니다. 역시나 자리가 좀 부족해서 서서 들으시는 분들도 계셨습니다.
+
+
+
+후원해주신 (주)인스페이스, 구글 코리아, 대전테크노파크 관계자분들께 감사하다는 말씀을 다시 드리고 싶습니다.
\ No newline at end of file
diff --git a/_posts/2019-5-10-KerasTuner.md b/_posts/2019-5-10-KerasTuner.md
new file mode 100644
index 00000000..e7cde4e3
--- /dev/null
+++ b/_posts/2019-5-10-KerasTuner.md
@@ -0,0 +1,167 @@
+---
+layout: post
+title: "하이퍼튜닝을 손쉽게 - 케라스 튜너"
+author: 김태영
+date: 2019-05-10 00:00:00
+categories: etc
+comments: true
+image: http://tykimos.github.io/warehouse/2019-5-10-KerasTuner_title.png
+---
+딥러닝에 입문하여 어느정도 모델을 구성할 수 있다면, 그 다음 고민은 어떻게 이 모델을 튜닝해서 성능을 높일까?입니다. 이 과정을 하이퍼파라미터 튜닝이라고 하는데, 모델을 구성하는 여러 요소 중에 최적의 요소 값을 찾아내는 과정을 말합니다. 케라스 모델을 쉽게 튜닝하는 프레임워크를 구글에서 개발했다고 하니 살펴보도록 하겠습니다.
+
+
+
+* 소개 페이지 - [https://elie.net/talk/](https://elie.net/talk/cutting-edge-tensorflow-keras-tuner-hypertuning-for-humans/)
+* 발표자료 - [PDF](https://elie.net/static/files/cutting-edge-tensorflow-keras-tuner-hypertuning-for-humans/cutting-edge-tensorflow-keras-tuner-hypertuning-for-humans-slides.pdf) [구글슬라이드](https://docs.google.com/presentation/d/e/2PACX-1vT7Tc0KiUW7HX36Dck4YxKc1M8bX701PsVFUDiVK7ZN220efFGmukg0N1UJowBVnOR6Awsx_SFL9cxd/embed?slide=id.g5746e5591c_0_92)
+
+Google I/O'19에서 발표된 세미나 "Cutting Edge TensorFlow: New Techniques"에서 소개 되었네요.
+
+[](https://www.youtube.com/watch?v=Un0JDL3i5Hg)
+
+---
+### 하이퍼파라미터 살펴보기
+
+먼저 간단한 컨볼루션 신경망 모델을 살펴보겠습니다. 숫자 손글씨(MNIST)를 분류하는 케라스의 시퀀스 모델로 구성된 간단한 신경망입니다.
+
+```python
+model = Sequential()
+model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(28,
+28, 1)))
+model.add(Conv2D(64, kernel_size=(3, 3), activation='relu'))
+model.add(Flatten())
+model.add(Dense(20, activation='relu'))
+model.add(Dropout(0.2))
+model.add(Dense(10, activation='softmax'))
+model.compile(loss='categorical_crossentropy', optimizer=Adam(0.001))
+model.summary()
+```
+
+레이어의 설정 및 레이어의 층 구조에 따라서 모델의 성능이 달라지는 데, 변경해볼 수 있는 요소를 하이퍼파라미터라고 하고, 이를 하이퍼파라미터 튜닝이라고 합니다. 그럼 먼저 하이퍼파라미터를 살펴보겠습니다.
+
+```python
+model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(28,
+28, 1)))
+```
+
+컨볼루션 레이어인 Conv2D에서는 필터의 수 "32"와 필터의 사이즈 "(3,3)"가 성능에 영향을 미칩니다.
+
+```python
+model.add(Dense(20, activation='relu'))
+model.add(Dropout(0.2))
+```
+
+Dense 레이어의 출력 뉴런 수인 "20"과 Dropout 레이어의 드랍비율인 "0.2"가 하이퍼파라미터가 되겠네요. 그리고 이 조합의 은닉층을 여러 번 쌓을 수도 있기에 몇 번 반복하느냐도 모델 구성에도 중요합니다.
+
+```python
+model.add(Dense(10, activation='softmax'))
+```
+
+참고로 마지막 출력층은 하이퍼파라미터가 없습니다. 분류의 수인 "10"과 출력층의 활성화함수(activation function)은 풀고자하는 문제에 따라 정의되는 것입니다.
+
+```python
+model.compile(loss='categorical_crossentropy', optimizer=Adam(0.001))
+```
+
+마지막으로 구성한 네트워크에 학습목표(objective function)과 최적화기(optimizer)를 달아주는데, 최적화기에도 여러 설정을 할 수 있습니다. 여기서는 Adam을 사용했고, 학습율(learning rate)인 "0.001"이 학습 성능에 영향을 미칩니다.
+
+주요 하이퍼파라미터에게 별칭을 붙혀보겠습니다.
+
+* 첫번째 Conv2D의 필터 수 : L1_NUM_FILTERS
+* 두번째 Conv2D의 필터 수 : L2_NUM_FILTERS
+* Dense - Dropout 은닉층의 반복횟수 : NUM_LAYERS
+* Dense 레이어의 출력뉴런 수 : NUM_DIMS
+* Dropout 레이어의 드랍율 : DROPOUT_RATE
+* 최적화기의 학습률 : LR
+
+---
+### 하이퍼파라미터 별칭 사용하기
+
+하이퍼파라미터들을 우리가 붙힌 별칭으로 교체하겠습니다.
+
+```python
+model = Sequential()
+model.add(Conv2D(L1_NUM_FILTERS, kernel_size=(3, 3), activation='relu'))
+model.add(Conv2D(L2_NUM_FILTERS, kernel_size=(3, 3), activation='relu'))
+model.add(Flatten())
+for _ in range(NUM_LAYERS):
+ model.add(Dense(NUM_DIMS, activation='relu'))
+ model.add(Dropout(DROPOUT_RATE))
+model.add(Dense(10, activation='softmax'))
+model.compile(loss='categorical_crossentropy', optimizer=Adam(LR))
+model.summary()
+```
+
+---
+### 하이퍼파라미터 탐색 범위 지정하기
+
+각 하이퍼파라미터마다 탐색 범위를 지정합니다.
+
+```python
+LR = Choice('learning_rate', [0.001, 0.0005, 0.0001], group='optimizer')
+DROPOUT_RATE = Linear('dropout_rate', 0.0, 0.5, 5, group='dense')
+NUM_DIMS = Range('num_dims', 8, 32, 8, group='dense')
+NUM_LAYERS = Range('num_layers', 1, 3, group='dense')
+L2_NUM_FILTERS = Range('l2_num_filters', 8, 64, 8, group='cnn')
+L1_NUM_FILTERS = Range('l1_num_filters', 8, 64, 8, group='cnn')
+```
+
+---
+### 하이퍼파라미터 튜닝하기
+
+먼저 하이퍼파라미터 탐색 범위를 지정한 코드와 별칭을 사용한 모델을 "model_fn()"이란 함수로 만듭니다.
+
+```python
+def model_fn():
+
+ LR = Choice('learning_rate', [0.001, 0.0005, 0.0001], group='optimizer')
+ DROPOUT_RATE = Linear('dropout_rate', 0.0, 0.5, 5, group='dense')
+ NUM_DIMS = Range('num_dims', 8, 32, 8, group='dense')
+ NUM_LAYERS = Range('num_layers', 1, 3, group='dense')
+ L2_NUM_FILTERS = Range('l2_num_filters', 8, 64, 8, group='cnn')
+ L1_NUM_FILTERS = Range('l1_num_filters', 8, 64, 8, group='cnn')
+
+ model = Sequential()
+ model.add(Conv2D(L1_NUM_FILTERS, kernel_size=(3, 3), activation='relu'))
+ model.add(Conv2D(L2_NUM_FILTERS, kernel_size=(3, 3), activation='relu'))
+ model.add(Flatten())
+ for _ in range(NUM_LAYERS):
+ model.add(Dense(NUM_DIMS, activation='relu'))
+ model.add(Dropout(DROPOUT_RATE))
+ model.add(Dense(10, activation='softmax'))
+ model.compile(loss='categorical_crossentropy', optimizer=Adam(LR))
+
+ return model
+```
+
+실제 튜닝은 Tuner를 사용합니다. Tuner를 생성할 때, 위에서 정의한 "model_fn()"을 사용합니다.
+
+```python
+tuner = Tuner(model_fn, 'val_accuracy' epoch_budget=500, max_epochs=5)
+tuner.search(train_data,validation_data=validation_data)
+```
+
+---
+### 신청하기
+
+이 멋진 기능을 체험하고 싶다면 아래 양식을 작성하여 구글팀에 보내세요~
+
+* [keras-tuner 신청하기](https://services.google.com/fb/forms/kerastuner/)
+
+---
+### 같이 보기
+
+* [케라스 기초 강좌](https://tykimos.github.io/lecture/)
+
+#### 케라스 코리아 커뮤니티
+
+* [케라스 코리아 페북](https://www.facebook.com/groups/KerasKorea/)
+* [케라스 코리아 슬랙 초대](https://join.slack.com/t/keraskorea/shared_invite/enQtNTUzMTUxMzIyMzg4LWQ3YmQ1YTdmNTYxOTAwZTExNmFmOGM3M2QyMjIyNzYwYTY2YTY2ZjBlNDNlZDdmMTU0NGVjYzFkMWYxNzE0ZDA)
+* [케라스 코리아 단톡방](https://open.kakao.com/o/g93MSBV)
+* [케라스 코리아 블로그](http://keraskorea.github.io)
+* [케라스 공식 문서 한글번역 참여방법](https://tykimos.github.io/2019/02/06/Contribution_of_Keras_Document_to_Korean_Translation/)
+
+#### 캐글 코리아 커뮤니티
+
+* [캐글 코리아 페북](https://www.facebook.com/groups/KaggleKoreaOpenGroup/)
+* [캐글 코리아 단톡방](https://open.kakao.com/o/gP24T89)
+* [캐글 코리아 블로그](https://kaggle-kr.tistory.com/)
diff --git a/_posts/2019-5-4-FastCampusComer.md b/_posts/2019-5-4-FastCampusComer.md
new file mode 100644
index 00000000..02ece1de
--- /dev/null
+++ b/_posts/2019-5-4-FastCampusComer.md
@@ -0,0 +1,155 @@
+---
+layout: post
+title: "데이터 사이언스에 관심있는 사람 모두 - 패스트캠퍼스 커머"
+author: 김태영
+date: 2019-05-04 00:00:00
+categories: etc
+comments: true
+image: http://tykimos.github.io/warehouse/2019-5-4-FastCampusComer_1.png
+---
+'데이터 사이언스 거품인가? 미래인가?'한 주제로 패스트캠퍼스의 제1호 매거진인 '커머'가 출간되었네요. 인공지능 및 데이터 사이언스 분야에서 활약하고 있는 집필진의 글이라 중요한 문장에 밑줄을 치라면 페이지 번호를 제외한 모든 문장에 밑줄을 쳐야할 정도로 그냥 흘러서 볼 수 없는 매거진이기에 소개드립니다. 구매를 해야하는 책이지만 출판사에 동의를 구해서 각 컬럼을 탐독하며 마음에 와닿는 글귀 한 두 문장을 옮겨봤습니다.
+
+
+
+---
+### 패스트캠퍼스 매거진 - 커머
+
+'커머'는 ‘관심 있는 사람 모두’ 라는 의미를 담고 있습니다. 데이터 사이언스 분야의 칼럼, 전문가 인터뷰, 실무 이야기 그리고 최근 이슈들을 중심으로 내용이 구성되어 있습니다.
+
+* 더 자세히 보기 - [https://www.fastcampus.co.kr/data_mag_comer/](https://www.fastcampus.co.kr/data_mag_comer/)
+
+* Contents Director 이샘: 데이터 사이언스 코스 교육 기획자
+* Editor 안혜민: 데이터 사이언스 콘텐츠를 즐기며 담아내는 에디터
+* Designer 서정화, 강하렴: 데이터 사이언스 본질을 표현하는 디자이너
+
+---
+### Column 전문가의 생각
+
+#### 뷰노 정규환 - 인공지능의 현재와 전문가의 미래
+
+... 인공지능의 한계를 극복하는 방법은 해당 분야 전문가들과 인공지능의 조화로운 역할 분담과 협업이며, 이를 효율적으로 하기 위해 사용자 환경 구축이 필요합니다 ...
+
+* 뷰노의 공동 창업자이자 CTO - [https://www.vuno.co/](https://www.vuno.co/)
+* 의료영상 기반 진단 보조 솔루션 개발
+
+#### ARTLab 엄태웅 - 딥러닝의 환상을 파는 사람들께 고함
+
+... 딥러닝을 이용한다는 것이 중요한 것이 아니라 각 문제 요소를 어떤 도구로 해결할 것인지 명확한 문제 정의와 구체적인 접근 방법으로 현실 문제를 대해야 합니다 ...
+
+* 캐나다 워털루대학 전기컴퓨터 공학부 박사과정
+* 테리의 딥러닝 토크 - [https://www.facebook.com/deeplearningtalk](https://www.facebook.com/deeplearningtalk)
+* AI and Robotics Tech (ART) Lab - [ARTLab.ai](https://www.facebook.com/artlabai/)
+
+#### ETRI 이정원 - 인간 지성의 최후의 보루
+
+... 우리는 인간의 뇌가 어떻게 모호함을 견디고, 경계가 모호한 회색지대에 놓은 현상들을 어떻게 분류하는 지 또한 모릅니다. 그 모호함 속에서 어떻게 확신을 가지는 지, 그리고 그러한 착각이 만들어지는 모릅니다 ...
+
+* 대덕넷, 대전일보 - '이정원의 문화산책' 컬럼 연재
+* ETRI 연구원 - 게임이론연구회 만듬
+* KBS 스페셜 '인공지능, 인간을 이기다'에 출연
+
+#### SK텔레콤 강병호 - 데이터 사이언스 기술은 지금 어디쯤 와 있을까?
+
+... 블랙박스로 여겨지는 인공지능 모델을 해석하는 알고리즘은 판단결과가 입력 데이터의 어떤 값에서 영향을 받았는지는 찾아주지만, 왜 그러한 판단을 했는지에 대한 인과관계를 얘기하는 것이 아닙니다 ...
+
+* SK텔레콤 DT센터
+* '머신 러닝을 활용한 컴퓨터 보안' 번역
+* '딥러닝 데이터 전처리 입문' 번역
+
+---
+### Application 기술발전과 변화
+
+#### 코멘트 이재성 - AI로 자기소개서 분석 모델 개발 과정
+
+... 현직자 멘토링 서비스를 통해 구직서류와 사람이 직접 평가한 데이터 셋을 활용해 구직자의 강점과 성향을 예측하는 학습 모델을 개발한 과정과 과정별로 어떤 고민들을 했는 공유합니다 ...
+
+* 코멘트 CEO
+* 구직자들의 취업 고민을 해결하는 취업 멘토링 서비스, AI 자기소개서 분석, AI 자동지원 서비스 등을 운영 중
+
+#### 인스페이스 김태영 - 일상에서 우주까지, 딥러닝의 활용
+
+... 딥러닝을 실무에 적용하기 위해서는 명확한 문제 정의, 검증 체계 구축, 데이터셋 전산화 정도 파악, 학습 및 구동 환경 등을 고려해야 합니다. 또한 실무에서는 딥러닝 모델의 창의성보다 해당 도메인 문제에 얼마나 기여할 수 있는가에 대한 딥러닝 적용 기대효과에 목표 관리가 필요합니다 ...
+
+* (주)인스페이스 CTO
+* '블록과 함께하는 파이썬 딥러닝 케라스' 집필
+* 김태영의 케라스 블로그 운영
+* 케라스 코리아, 캐글 코리아, 대딥사 운영
+* 강화학습 코리아 알파오목팀
+* 인공지능 기반 모델로 네이처 천문학 (Nature Astronomy) 게재
+
+---
+### Focus 그래서 우리는,
+
+#### 가천대 최성철 - 데이터 과학과 대학교육의 진화
+
+... 양질의 동영상 제공, 숙제 채점을 자동화하는 Autograding 시스템, GCP나 AWS등 클라우드 적극 활용, 뛰어난 교수와 많은 TA로 구성된 수업의 대형화 등으로 데이터 과학 교육 방식의 혁신이 이뤄지고 있습니다 ...
+
+* 가천대학교 산업경영공학과 조교수
+* 가천대학교 데이터 과학 연구센터 TEAMLAB 리더
+* 인프런 '데이터 과학을 위한 파이썬 입문'
+* 인프런 '밑바닥부터 시작하는 머신러닝 입문'
+
+#### 디지털 헬스케어 연구 최윤섭 - 인공지능은 의료를 어떻게 혁신하는가?
+
+... 의료 분야에서 인공지능 기술이 활발하게 적용되고 있는데, 복잡한 의료 데이터 분석을 통해 의학적인 통찰을 얻거나 의료 영상 데이터를 판독하거나 연속적인 생체 데이터를 분석하여 위험 징후를 조기에 예측합니다 ...
+
+* '최윤섭 디지털 헬스케어 연구소' 설립
+* '디지털 헬스케어 파트너스' 공동창업자
+* 디지털 헬스케어 분야 전문가
+* 성균관대학교 디지털헬스학과 초빙교수 재직
+
+---
+### Interview 데이터사이언스 이야기
+
+#### SK 박준용 - 21세기 가장 섹시한 직업, 데이터 사이언티스트
+
+... 데이터 사이언티스트는 통계 지식을 바탕으로 데이터를 분석하는 것은 물론 기계학습 기법을 다양한 환경에서도 적용할 수 있어야 하고 필요에 따라 데이터 형태를 자유자재로 변환할 수 있는 슈퍼맨을 말합니다 ...
+
+* 통신 분야 빅데이터 엔지니어링
+* 제조업 기반의 데이터 분석 업무
+* SK 주식회사 C&C 위원
+
+#### 마키나락스 김기현 - 데이터 사이언티스트로의 시작
+
+... 인공지능 분야 인재상이 되기 위해서는 직접 모델을 개발하지 않고 공개된 코드를 활용했다고 하더라도 왜 그렇게 구현되었는지, 수식의 의미와 유도 과정, 모델 적용에 기여한 점, 개선점, 성능 향상을 의해 고려할 사항에 대해서 말할 수 있어야 합니다. 그리고 올라운드 플레이어가 되어야 합니다 ...
+
+* 스타트업 <마키나락스>
+* 패스트캠퍼스 강사
+* 자연어 처리 도서 출간 준비 중
+
+---
+### Issue 새로운 이슈
+
+#### EPFL 김승룡 - 딥러닝 기반 의미론적 영상 정합 연구 동향 및 적용
+
+... 같은 물체 범주에 속해있지만 서로 다른 사물 영상들 간의 정합점을 찾아내는 것이 의미론적 영상 정합이라 합니다. 이 기법을 통해 질의영상과 참조영상간의 키포인트를 전파하거나 비지도학습으로 의미론적 분할 정보나 마스크 정보, 물체 검출 정보를 전파시키는 등 기존의 컴퓨터 비전 적용 분야의 한계를 뛰어넘을 수 있게 되었습니다.
+
+* 스위스 로잔 (EPFL) Postdoctoral Researcher
+* 2018 춘강학술상 수상
+* 인간 수준의 Computer Vision 및 Deep Learning 기술 개발이 목표
+
+#### 셀바스AI 박태훈 - 말하는 인공지능-음성합성 기술의 미래
+
+... 텍스트를 사람의 음성으로 변환하는 것을 음성합성이라 하며, 1세대 기술은 은닉 마르코프 모델을 심층 신경망으로 교체, 2세대 기술은 LSTM-RNN 기반으로 음성 파라미터 자체를 예측, 3세대 기술은 입력부터 출력이 하나로 된 모델로 구글의 타코트론 모델이 시작입니다 ...
+
+* 셀바스AI AI연구실 음성합성팀 팀장
+* 인공지능 기반의 감성표현 음성합성기 개발 중
+
+---
+### 같이 보기
+
+* [케라스 기초 강좌](https://tykimos.github.io/lecture/)
+
+#### 케라스 코리아 커뮤니티
+
+* [케라스 코리아 페북](https://www.facebook.com/groups/KerasKorea/)
+* [케라스 코리아 슬랙 초대](https://join.slack.com/t/keraskorea/shared_invite/enQtNTUzMTUxMzIyMzg4LWQ3YmQ1YTdmNTYxOTAwZTExNmFmOGM3M2QyMjIyNzYwYTY2YTY2ZjBlNDNlZDdmMTU0NGVjYzFkMWYxNzE0ZDA)
+* [케라스 코리아 단톡방](https://open.kakao.com/o/g93MSBV)
+* [케라스 코리아 블로그](http://keraskorea.github.io)
+* [케라스 공식 문서 한글번역 참여방법](https://tykimos.github.io/2019/02/06/Contribution_of_Keras_Document_to_Korean_Translation/)
+
+#### 캐글 코리아 커뮤니티
+
+* [캐글 코리아 페북](https://www.facebook.com/groups/KaggleKoreaOpenGroup/)
+* [캐글 코리아 단톡방](https://open.kakao.com/o/gP24T89)
+* [캐글 코리아 블로그](https://kaggle-kr.tistory.com/)
diff --git a/_posts/2019-7-4-ISS_2nd_Deep_Learning_Conference_All_Together.md b/_posts/2019-7-4-ISS_2nd_Deep_Learning_Conference_All_Together.md
new file mode 100644
index 00000000..36f75709
--- /dev/null
+++ b/_posts/2019-7-4-ISS_2nd_Deep_Learning_Conference_All_Together.md
@@ -0,0 +1,509 @@
+---
+layout: post
+title: "2nd 함께하는 딥러닝 컨퍼런스(2nd DLCAT)"
+author: 김태영
+date: 2019-07-04 10:00:00
+categories: seminar
+comments: true
+image: http://tykimos.github.io/warehouse/2019-7-4-ISS_2nd_Deep_Learning_Conference_All_Together_title4.png
+---
+작년 6월 말 대전에서 ["1st 함께하는 딥러닝 컨퍼런스"](https://tykimos.github.io/2018/06/28/ISS_1st_Deep_Learning_Conference_All_Together/)에 400명 넘게 모여 즐겁게 인공지능 및 딥러닝 관한 다양한 주제로 톡을 나누었습니다. 그간 매일 논문만 읽어도 못 따라갈 만큼 새로운 연구가 쏟아지고 있고, 그 활용 사례 및 관심 또한 각 분야에 퍼져가고 있습니다. 대전은 전국 각지에서 오시기에 접근성이 용이하고, 정부출연연구원 및 정부청사, 우수한 대학교, 대기업의 기술 연구소, 최첨단 기술 중심의 벤처회사들이 밀집된 지역인 만큼 지식공유의 즐거움을 나누고자 합니다.
+
+ 별도의 참가비는 없습니다. 연사분들도 여러분과 즐기게 위해 재능기부합니다. 주차공간이 협소하므로 대중교통을 이용해주세요.
+
+
+
+신청은 아래 링크에서 해주세요~
+
+#### >> [신청하기](https://forms.gle/DFYtGWS7aDj1Bmow8) <<
+
+* 일시: 2019년 7월 4일 (10시~18시)
+* 장소: 대전광역시 유성구 가정로 217
+ * 과학기술연합대학원대학교 - 대전광역시 유성구 가정로 217
+ * ETRI 융합기술연구생산센터 - 대전광역시 유성구 가정로 218
+* 주관: 대딥사, 케라스 코리아, 캐글 코리아, RL 코리아
+* 주최: (주)인스페이스
+* 후원: UST 과학기술연합대학원대학교, ETRI 융합기술연구생산센터
+* 대상: 인공지능 및 딥러닝에 관심있거나 관련 연구를 수행하시는 분들 (약 700명)
+ * 트랙 A: UST 강당 300명
+ * 트랙 B: UST 사이언스홀 65명
+ * 트랙 C: UST 대회의실 35명
+ * 트랙 D: ETRI 융합기술연구생산센터 212호 대회의실 180명
+ * 트랙 E: ETRI 융합기술연구생산센터 224호 중회의실 50명
+ * 트랙 F: ETRI 융합기술연구생산센터 219호 중회의실3 20명
+
+
+
+### 프로그램
+---
+
+|시간|A-USTaudi|B-USTsci|C-USTmeet|D-ETRI212|E-ETRI224|F-ETRI219|
+|-|-|-|-|-|-|-|
+|10시|조수현
3분 강화학습 순한맛 SAC|이수진
AI시대의 예술작품 - AI Atelier를 이용하여|박해선
케라스 in 텐서플로우2.0|유용균
딥러닝과 최적설계|이현호
(실습)유니티 기반 드론 강화학습 (1)|(모집중)|
+|11시|안수빈
알아두면 쓸데있는 신비한 딥러닝|김준태
나도 너도 모르는 Graph Neural Network의 힘|(모집중)|이유한
I'm Kaggler - Why need kaggle?|이현호
(실습)유니티 기반 드론 강화학습 (2)|(모집중)|
+|13시|남기현
(이론)딥러닝으로 오디오 만나보기|김유민
딥러닝 모델 엑기스 추출(Knowlege Distillation)|홍원의
(실습)한페이지 논문잡기:찾고+읽고+쓰고+정리하기|(모집중)|신경인
(실습)파이토치로 갈아타기 (1)|전미정
(실습)MS Azure ML Service와 함께 케라스 학습부터 배포까지 (1)|
+|14시|황준원
(실습)딥러닝으로 오디오 만나보기|김영하
AutomatedML 동향|홍원의
(실습)한페이지 논문잡기:찾고+읽고+쓰고+정리하기|송규예
Deeplema, 딥러닝 서비스상용화의 딜레마|신경인
(실습)파이토치로 갈아타기 (2)|전미정
(실습)MS Azure ML Service와 함께 케라스 학습부터 배포까지 (2)|
+|15시|민규식
강화학습 환경 제작, Unity ML-agents와 함께하세요|김태진
구글 코랩 TPU 알아보기|김보섭
(실습)영화평점 데이터로 자연어처리 논문구현 입문 with PyTorch, TF 2.0 (1)|이진원
Efficient CNN 톺아보기|김경환,박진우
(실습)Rainbow로 달착륙부터 Atari까지 (1)|대전AI거버넌스
AI 거버넌스 구성|
+|16시|김태영
휴먼 인 더 루프 with 케라스|김형섭
GAN 동향|김보섭
(실습)영화평점 데이터로 자연어처리 논문구현 입문 with PyTorch, TF 2.0 (2)|차금강
강화학습|김경환,박진우
(실습)Rainbow로 달착륙부터 Atari까지 (2)|대전AI거버넌스
AI 적용 가속화 방안|
+|17시|(모집중)|(모집중)|(모집중)|(모집중)|(모집중)|대전AI거버넌스
한계 및 목표치 설정|
+
+* 점심시간은 12시 ~ 13시입니다.
+* 각 세션은 45분 발표, 5분 질의응답, 10분 휴식 및 이동입니다.
+* UST과 ETRI사이는 도보로 10분이내 거리에 있습니다. 따라서 쉬는 시간을 이용해서 이동하시면 됩니다.
+
+신청은 아래 링크에서 해주세요~
+
+#### >> [신청하기](https://forms.gle/DFYtGWS7aDj1Bmow8) <<
+
+## 10시
+
+---
+### 조수현 - 3분 강화학습 순한맛 SAC(Soft Actor Critic) feat. AC(Actor Critic)
+
+#### 연사소개
+디아이티 연구원, 관심 분야는 강화학습, 서버프로그래밍입니다.
+
+* 깃헙: https://github.com/humblem2
+* 이메일: seanbrowncho@gmail.com
+
+#### 발표소개
+TBD
+
+#### 발표자료
+TBD
+
+#### 참고자료
+TBD
+
+---
+### 이수진 - AI시대의 예술작품 - AI Atelier를 이용하여
+
+#### 연사소개
+TBd
+
+#### 발표소개
+TBD
+
+#### 발표자료
+TBD
+
+#### 참고자료
+TBD
+
+---
+### 박해선 - 케라스 in 텐서플로우2.0
+
+#### 연사소개
+ML GDE(Machine Learning Google Developer Expert)입니다. 기계공학을 전공했지만 졸업 후엔 코드를 읽고 쓰는 일을 했습니다. 텐서플로 문서 번역에 기여하면서 소프트웨어와 과학의 경계를 흥미롭게 탐험하고 있습니다. "머신 러닝 교과서 with 파이썬, 사이킷런, 텐서플로", "케라스 창시자에게 배우는 딥러닝"(이상 길벗), "(개정판)파이썬 라이브러리를 활용한 머신러닝", "핸즈온 머신러닝", "텐서플로 첫걸음"(이상 한빛미디어)을 번역했습니다.
+
+* 블로그: https://tensorflow.blog
+* 깃헙: https://github.com/rickiepark
+* 이메일: haesunrpark@gmail.com
+
+#### 발표소개
+텐서플로 2.0에서 변화된 내용을 소개하고 텐서플로 2.0에서 케라스가 어떤 역할을 담당하게 되었는지 소개합니다. 기본적인 케라스 사용법외에 텐서플로에서 케라스를 이용한 사용자 정의 모델을 어떻게 구현하는지도 알아보겠습니다.
+
+#### 발표자료
+TBD
+
+#### 참고자료
+TBD
+
+---
+### 유용균 - 딥러닝과 최적설계
+
+#### 연사소개
+한국원자력연구원
+
+#### 발표소개
+TBD
+
+#### 발표자료
+TBD
+
+#### 참고자료
+TBD
+
+---
+### 이현호 - (실습)유니티 기반 드론 강화학습
+
+#### 연사소개
+(주)인스페이스
+
+#### 발표소개
+TBD
+
+#### 발표자료
+TBD
+
+#### 참고자료
+TBD
+
+## 11시
+
+---
+### 안수빈 - 알아두면 쓸데있는 신비한 딥러닝
+
+#### 연사소개
+TBD
+
+#### 발표소개
+TBD
+
+#### 발표자료
+TBD
+
+#### 참고자료
+TBD
+
+---
+### 김준태 - 나도 너도 모르는 Graph Neural Network의 힘
+
+#### 연사소개
+안녕하세요 현재 고려대학교에서 석사과정 중이고 작년에 1st DLCAT에서 "GTA5로 자율주행 자동차 만들기" 발표를 진행한 김준태라고 합니다. 관심분야로는 주로 Time Series, 강화학습, 딥러닝이고, 새로운 Research Area로 GNN을 이용한 VQA에서의 relation 연구를 시작했습니다.
+
+* CV: https://sites.google.com/s/1o2nR2sFY7c4VUrosW1Fivbt_4mhKiQAX/p/1h52r1XhKqPvElCInPU717DjCwFNsrr7r/edit
+* 깃헙: https://github.com/OPAYA
+* 이메일: kjt7889@naver.com
+
+#### 발표소개
+"나도 너도 모르는 GNN의 힘" 발표는 Graph Neural Network 공부를 시작한 지 1주일 된 초보자가 초보자에게
+Graph Neural Network의 기본적인 개념을 알려주는 발표이니 부담감 없이 들으시면 됩니다.
+발표는 2019 ICLR에서 발표한 "How Powerful are Graph Neural Networks?"를 기반으로 진행됩니다.
+
+#### 참고자료
+* 논문
+ * K.Xu,W.Hu,J.Leskovec,and S.Jegelka,"How powerful are graph neural networks"
+
+---
+### 이유한 - I'm Kaggler - Why need kaggle?
+
+#### 연사소개
+TBD
+
+#### 발표소개
+TBD
+
+#### 발표자료
+TBD
+
+#### 참고자료
+TBD
+
+---
+### 안수빈 - 알아두면 쓸데있는 신비한 딥러닝
+
+#### 연사소개
+TBD
+
+#### 발표소개
+TBD
+
+#### 발표자료
+TBD
+
+#### 참고자료
+TBD
+
+## 13시
+
+---
+### 남기현 - (이론)딥러닝으로 오디오 만나보기
+
+#### 연사소개
+TBD
+
+#### 발표소개
+TBD
+
+#### 발표자료
+TBD
+
+#### 참고자료
+TBD
+
+---
+### 김유민 - 딥러닝 모델 엑기스 추출(Knowlege Distillation)
+
+#### 연사소개
+TBD
+
+#### 발표소개
+TBD
+
+#### 발표자료
+TBD
+
+#### 참고자료
+TBD
+
+---
+### 홍원의 - (실습)한페이지 논문잡기:찾고+읽고+쓰고+정리하기
+
+#### 연사소개
+카이스트 지식서비스공학 대학원을 석사 졸업하고 [디플러스](http://www.dplus.company)에서 데이터분석 강사로 활동하다 현재는 홍콩 과학기술대학교 (HKUST)에서 [머신러닝](https://sites.google.com/view/dyyeung/)을 전공하는 박사과정 학생입니다. 여름방학중 잠시 귀국해서 강의합니다.
+
+* 홈페이지 : https://sites.google.com/view/woneuihong
+* 깃헙 : https://github.com/laftworld
+* 이메일 : [wehong@cse.ust.hk](mailto:wehong@cse.ust.hk)
+
+#### 발표소개
+연구란 무엇이고 어떤 절차로 수행하는지, 매일같이 쏟아지는 머신러닝 분야의 논문을 어떻게 읽고 정리하며 공부할지 함께 고민하는 시간을 마련했습니다. 국내 및 해외 연구실 생활에 대한 주관적인 경험도 공유합니다. 대학원 초년생이나 진학 예정자를 비롯해 연구에 대해 궁금한 분을 대상으로 합니다.
+
+#### 발표자료
+* [발표자료](https://docs.google.com/presentation/d/1tQp_i-fshzUjdVnHXvTikf-DGYv0acehSryg7SRFU1A/edit?usp=sharing)
+
+#### 참고자료
+* [한페이지 머신러닝 (온라인))](https://opentutorials.org/module/3653)
+* [한페이지 머신러닝 - 여름방학편 (오프라인 세미나)](https://timetodev.co.kr/event/13)
+* [One Page Learning (영문)](https://laftworld.github.io/)
+
+---
+### 신경인 - (실습)파이토치로 갈아타기
+
+#### 연사소개
+TBD
+
+#### 발표소개
+TBD
+
+#### 발표자료
+TBD
+
+#### 참고자료
+TBD
+
+---
+### 전미정 - 실습)MS Azure ML Service와 함께 케라스 학습부터 배포까지
+
+#### 연사소개
+TBD
+
+#### 발표소개
+TBD
+
+#### 발표자료
+TBD
+
+#### 참고자료
+TBD
+
+## 14시
+
+---
+### 황준원 - (실습)딥러닝으로 오디오 만나보기
+
+#### 연사소개
+케라스 코리아 운영자 및 케라스 코리아 오픈채팅 방장입니다.
+
+#### 발표소개
+음성 데이터의 특징과 전처리 방법 소개, 데이터 증강 방법 및 GPU에서 음성 전처리하기 등을 다룰 생각입니다.
+
+#### 발표자료
+TBD
+
+#### 참고자료
+TBD
+
+---
+### 김영하 - AutomatedML 동향
+
+#### 연사소개
+TBD
+
+#### 발표소개
+TBD
+
+#### 발표자료
+TBD
+
+#### 참고자료
+TBD
+
+---
+### 송규예 - Deeplema, 딥러닝 서비스상용화의 딜레마
+
+#### 연사소개
+ML GDE(Machine Learning Google Developer Expert)입니다. 기계공학을 전공했지만 졸업 후엔 코드를 읽고 쓰는 일을 했습니다. 텐서플로 문서 번역에 기여하면서 소프트웨어와 과학의 경계를 흥미롭게 탐험하고 있습니다. "머신 러닝 교과서 with 파이썬, 사이킷런, 텐서플로", "케라스 창시자에게 배우는 딥러닝"(이상 길벗), "(개정판)파이썬 라이브러리를 활용한 머신러닝", "핸즈온 머신러닝", "텐서플로 첫걸음"(이상 한빛미디어)을 번역했습니다.
+
+#### 발표소개
+비즈니스 관점에서의 딥러닝에 대한 톡입니다. 실제 비즈니스 상에서 기술에 대한 오해나 상용화에 대해 접근방법이 아쉬운적이 많았고 여기에 대한 의견을 나누고자 합니다.
+
+#### 발표자료
+TBD
+
+#### 참고자료
+TBD
+
+## 15시
+
+---
+### 민규식 - 강화학습 환경 제작, Unity ML-agents와 함께하세요
+
+#### 연사소개
+TBD
+
+#### 발표소개
+TBD
+
+#### 발표자료
+TBD
+
+#### 참고자료
+TBD
+
+---
+### 김태진 - 구글 코랩 TPU 알아보기
+
+#### 연사소개
+TBD
+
+#### 발표소개
+TBD
+
+#### 발표자료
+TBD
+
+#### 참고자료
+TBD
+
+---
+### 김보섭 - (실습)영화평점 데이터로 자연어처리 논문구현 입문 with PyTorch, TF 2.0
+
+#### 연사소개
+TBD
+
+#### 발표소개
+TBD
+
+#### 발표자료
+TBD
+
+#### 참고자료
+TBD
+
+---
+### 이진원 - Efficient CNN 톺아보기
+
+#### 연사소개
+현재 삼성전자에서 Staff Engineer로 일하고 있습니다. Deep Learning Hardware Accelerator와 모델 경량화를 연구하였습니다. PR12 논문 읽기 모임을 3년째 참여하고 있고, Facebook TensroFlow Korea group에서 운영진으로도 활동하고 있습니다.
+
+* 깃헙 : https://github.com/jwlee-ml
+* 이메일: jwlee.ml25@gmail.com
+
+#### 발표소개
+ImageNet에서 ResNet이 human performance를 뛰어넘은 이후 efficiency를 중요시하는 CNN들이 계속 연구되어 왔는데 최근까지의 흐름을 쭉 정리해보고자 합니다.
+
+#### 발표자료
+TBD
+
+#### 참고자료
+* 논문: TBA
+
+---
+### 김경환,박진우 - (실습)Rainbow로 달착륙부터 Atari까지
+
+#### 연사소개
+현재 Medipixel에서 research engineer로 재직중이며, 강화학습을 통해 심혈관 중재시술(PCI) 일부 과정을 자동화하는 연구를 진행하고 있습니다. 심혈관 중재시술의 핵심은 혈관 내에서 병변부위까지 무사히 도달할 수 있도록 wire를 제어하는 기술입니다. 특히 wire 제어는 굉장히 풀기 어려운 non-linear system으로 악명이 높은데, 저희는 그 동안의 성과물을 통해 강화학습에 의한 wire 제어의 가능성을 조금씩 세상에 보여주고 있습니다.
+
+* 블로그: https://mrsyee.github.io / https://curt-park.github.io/
+* 깃헙: https://github.com/MrSyee / https://github.com/Curt-Park
+* 이메일: khsyee@gmail.com / www.jwpark.co.kr@gmail.com
+
+#### 발표소개
+Atari 환경에서 아주 좋은 성능을 보여주는 강화학습 알고리즘인 Rainbow를 공부하고 실습해봅니다. Rainbow를 구성하는 DQN, PER, Double-Q, Dueling Network, NoisyNet, C51, N-Step 및 expert demonstration을 이용한 추가적인 성능 향상 기법(DQfD)을 구현해봅니다.
+
+#### 발표자료
+TBD
+
+#### 참고자료
+* 논문
+ * V. Mnih et al., "Human-level control through deep reinforcement learning." Nature, 518 (7540):529–533, 2015.
+ * T. Schaul et al., "Prioritized Experience Replay." arXiv preprint arXiv:1511.05952, 2015.
+ * van Hasselt et al., "Deep Reinforcement Learning with Double Q-learning." arXiv preprint arXiv:1509.06461, 2015.
+ * Z. Wang et al., "Dueling Network Architectures for Deep Reinforcement Learning." arXiv preprint arXiv:1511.06581, 2015.
+ * T. Hester et al., "Deep Q-learning from Demonstrations." arXiv preprint arXiv:1704.03732, 2017.
+ * M. G. Bellemare et al., "A Distributional Perspective on Reinforcement Learning." arXiv preprint arXiv:1707.06887, 2017.
+ * M. Fortunato et al., "Noisy Networks for Exploration." arXiv preprint arXiv:1706.10295, 2017.
+ * M. Hessel et al., "Rainbow: Combining Improvements in Deep Reinforcement Learning." arXiv preprint arXiv:1710.02298, 2017.
+
+* 깃헙
+ * https://github.com/medipixel/rl_algorithms
+ * https://github.com/Kaixhin/Rainbow
+
+## 16시
+
+---
+### 김태영 - 휴먼 인 더 루프(Human in the loop) with 케라스
+
+#### 연사소개
+(주)인스페이스 기술이사, 케라스 코리아, 캐글 코리아 운영진
+
+#### 발표소개
+TBD
+
+#### 발표자료
+TBD
+
+#### 참고자료
+TBD
+
+---
+### 김형섭 - GAN 동향
+
+#### 연사소개
+TBD
+
+#### 발표소개
+TBD
+
+#### 발표자료
+TBD
+
+#### 참고자료
+TBD
+
+---
+### 차금강 - 강화학습
+
+#### 연사소개
+(주)인스페이스 기술이사, 케라스 코리아, 캐글 코리아 운영진
+
+#### 발표소개
+TBD
+
+#### 발표자료
+TBD
+
+#### 참고자료
+TBD
+
+## 17시
+
+---
+### 대전 AI 거버넌스
+
+#### 연사소개
+TBD
+
+#### 발표소개
+TBD
+
+#### 발표자료
+TBD
+
+#### 참고자료
+TBD
+
+---
+### 같이 보기
+
+* [1st DLCAT](https://tykimos.github.io/2018/06/28/ISS_1st_Deep_Learning_Conference_All_Together/)
+
+
+
+* [케라스 기초 강좌](https://tykimos.github.io/lecture/)
+* [대딥사](https://www.facebook.com/groups/ddeeps/?ref=bookmarks)
+* [케라스 코리아](https://www.facebook.com/groups/KerasKorea/)
+* [캐글 코리아](https://www.facebook.com/groups/KaggleKoreaOpenGroup/)
+* [Reinforcement Learning KR](https://www.facebook.com/groups/ReinforcementLearningKR/)
diff --git a/_projects/lunar_rover.py b/_projects/lunar_rover.py
new file mode 100644
index 00000000..86b5b9eb
--- /dev/null
+++ b/_projects/lunar_rover.py
@@ -0,0 +1,454 @@
+import curses
+import time
+import sys
+import numpy as np
+from random import randint
+import random
+from enum import Enum, IntEnum
+
+from keras.layers.convolutional import Conv2D
+from keras.layers import Dense, Flatten
+from keras.optimizers import RMSprop
+from keras.models import Sequential
+from skimage.transform import resize
+from skimage.color import rgb2gray
+from collections import deque
+from keras import backend as K
+import tensorflow as tf
+import numpy as np
+import random
+
+MAP_WIDTH = 16
+MAP_HEIGHT = 16
+ROVER_MAX_ENERGY = 40
+MAX_EPISODE = 500000
+
+class MapBlock(IntEnum):
+ AIR = 0
+ VISIT = 1
+ GROUND = 2
+ CRATERS = 3
+ HELIUM3 = 4
+ ROVER = 5
+
+MAP_BLOCKS_ICONS = {
+ 0: '..',
+ 1: ' ',
+ 2: '▓▓',
+ 3: '░░',
+ 4: '◆.',
+ 5: '▞▚',
+}
+
+class Observation:
+
+ def __init__(self):
+ #self.rover_current_energy = 0
+ #self.rover_current_x = 0
+ #self.rover_current_y = 0
+ #self.rover_direction = 0
+ self.map = None
+
+class Environment:
+ def __init__(self, screen):
+
+ self.screen = screen
+
+ self.screen.timeout(0)
+ self.map = None
+ self.action_size = 2
+
+ self.reset()
+
+ def reset(self):
+
+ self.map = np.zeros((MAP_HEIGHT, MAP_WIDTH))
+ self.map[MAP_HEIGHT-1][:] = MapBlock.GROUND
+ self.map[MAP_HEIGHT-2][:] = MapBlock.HELIUM3
+
+ self.rover_current_energy = 5
+ self.rover_current_x = int(MAP_WIDTH / 2)
+ self.rover_current_y = MAP_HEIGHT - 2
+ self.map_current_x = 0
+ self.moving_distance = 0
+ self.mineral_sampling = 0
+
+ self.map[self.rover_current_y][self.rover_current_x - self.map_current_x] = MapBlock.ROVER
+
+ observation = self.get_observation()
+
+ return observation
+
+ def get_observation(self):
+
+ observation = Observation()
+ observation.rover_current_energy = self.rover_current_energy
+ observation.rover_current_x = self.rover_current_x
+ observation.rover_current_y = self.rover_current_y
+ observation.map = self.map
+
+ return observation
+
+ def step(self, action):
+
+ reward = 0
+ info = {'lives': False}
+ done = False
+ dead = False
+
+ self.map[self.rover_current_y][self.rover_current_x - self.map_current_x] = MapBlock.VISIT
+
+ if action == 1:
+ if self.rover_current_energy > 0:
+ self.rover_current_energy -= 1
+ self.rover_current_y -= 1
+ else :
+ if self.rover_current_y < MAP_HEIGHT - 2:
+ self.rover_current_y += 1
+
+ else:
+ if self.rover_current_y < MAP_HEIGHT - 2:
+ self.rover_current_y += 1
+
+ self.rover_current_x += 1
+
+ current_block = self.map[self.rover_current_y][self.rover_current_x - self.map_current_x]
+
+ new_block = MapBlock.ROVER
+
+ is_get_helium3 = False
+
+ if current_block == MapBlock.AIR:
+ new_block = MapBlock.ROVER
+ elif current_block == MapBlock.CRATERS:
+ new_block = MapBlock.AIR
+ done = True
+ dead = True
+ elif current_block == MapBlock.HELIUM3:
+ new_block = MapBlock.ROVER
+ self.mineral_sampling += 1
+ self.rover_current_energy += 1
+ is_get_helium3 = True
+
+ self.map[self.rover_current_y][self.rover_current_x - self.map_current_x] = new_block
+
+ new_wall_height = random.randrange(1, 6) # 1부터 6미만 숫자. 1, 2, 3, 4, 5
+
+ for row in range(MAP_HEIGHT):
+ for col in range(MAP_WIDTH-1):
+ self.map[row][col] = self.map[row][col+1]
+
+ for row in range(MAP_HEIGHT):
+ if row < (MAP_HEIGHT - new_wall_height - 1):
+ self.map[row][MAP_WIDTH-1] = MapBlock.AIR
+ elif row == (MAP_HEIGHT - new_wall_height - 1):
+ self.map[row][MAP_WIDTH-1] = MapBlock.HELIUM3
+ elif row < MAP_HEIGHT - 1:
+ self.map[row][MAP_WIDTH-1] = MapBlock.CRATERS
+ else:
+ self.map[row][MAP_WIDTH-1] = MapBlock.GROUND
+
+ self.map_current_x += 1
+
+ observation = self.get_observation()
+
+ self.moving_distance = max(self.moving_distance, abs(self.map_current_x))
+
+ if done == True:
+ reward = -1
+ else:
+ if is_get_helium3 == True:
+ reward = 1 #self.moving_distance + self.mineral_sampling
+ else:
+ reward = 0
+
+ return observation, reward, done, info
+
+ def render(self):
+
+ for row in range(MAP_HEIGHT):
+ row_string = ''
+ for col in range(MAP_WIDTH):
+ row_string += MAP_BLOCKS_ICONS[self.map[row][col]]
+ self.screen.addstr(row, 0, row_string)
+
+ self.screen.addstr(0, 0, '%4d♥' % self.rover_current_energy)
+ self.screen.addstr(0, 5, '%4dm' % self.moving_distance)
+ self.screen.addstr(0, 10, '%4d◆' % self.mineral_sampling)
+ self.screen.addstr(16, 0, '')
+ self.screen.refresh()
+
+ #time.sleep(0.1)
+ #time.sleep(0.3)
+ #time.sleep(1.0)
+
+class HumanAgent:
+ def __init__(self, screen):
+ self.screen = screen
+
+ def write_summary(self, episode, score, global_step, step):
+ pass
+
+ def update_avg_q_max(self, history):
+ pass
+
+ def train(self, history, action, reward, next_history, dead, global_step):
+ pass
+
+ def get_action(self, observation):
+
+ ret = 0
+ key = self.screen.getch()
+ if key == curses.KEY_RIGHT:
+ ret = 1
+
+ return ret
+
+ def save_model(self, ep):
+ pass
+
+class DQNAgent:
+ def __init__(self, state_height, state_width, action_size):
+ self.render = False
+ self.load_model = False
+ # 상태와 행동의 크기 정의
+ self.state_size = (state_height, state_width, 1)
+ self.action_size = action_size
+ # DQN 하이퍼파라미터
+ #self.epsilon = 0#0.5
+ #self.epsilon_start, self.epsilon_end = 0, 0 #0.5, 0.1
+
+ self.epsilon = 0.5
+ self.epsilon_start = 0.5
+ self.epsilon_end = 0.1
+
+ self.exploration_steps = 100000. #1000000.
+ self.epsilon_decay_step = (self.epsilon_start - self.epsilon_end) \
+ / self.exploration_steps
+ self.batch_size = 32
+ self.train_start = 5000 #50000 메모리가 이만큼 쌓이면 학습 시작
+ self.update_target_rate = 10000
+ self.discount_factor = 0.99
+ # 리플레이 메모리, 최대 크기 400000
+ self.memory = deque(maxlen=400000)
+ self.no_op_steps = 30
+ # 모델과 타겟모델을 생성하고 타겟모델 초기화
+ self.model = self.build_model()
+ self.target_model = self.build_model()
+ self.update_target_model()
+
+ self.optimizer = self.optimizer()
+
+ # 텐서보드 설정
+ self.sess = tf.InteractiveSession()
+ K.set_session(self.sess)
+
+ self.avg_q_max, self.avg_loss = 0, 0
+ self.summary_placeholders, self.update_ops, self.summary_op = \
+ self.setup_summary()
+ self.summary_writer = tf.summary.FileWriter(
+ 'lunar_rover_dqn', self.sess.graph)
+ self.sess.run(tf.global_variables_initializer())
+
+ if self.load_model:
+ self.model.load_weights("./lunar_rover_dqn.h5")
+
+ # Huber Loss를 이용하기 위해 최적화 함수를 직접 정의
+ def optimizer(self):
+ a = K.placeholder(shape=(None,), dtype='int32')
+ y = K.placeholder(shape=(None,), dtype='float32')
+
+ prediction = self.model.output
+
+ a_one_hot = K.one_hot(a, self.action_size)
+ q_value = K.sum(prediction * a_one_hot, axis=1)
+ error = K.abs(y - q_value)
+
+ quadratic_part = K.clip(error, 0.0, 1.0)
+ linear_part = error - quadratic_part
+ loss = K.mean(0.5 * K.square(quadratic_part) + linear_part)
+
+ optimizer = RMSprop(lr=0.00025, epsilon=0.01)
+ updates = optimizer.get_updates(self.model.trainable_weights, [], loss)
+ train = K.function([self.model.input, a, y], [loss], updates=updates)
+
+ return train
+
+ def train(self, history, action, reward, next_history, dead, global_step):
+
+ # 샘플 을 리플레이 메모리에 저장 후 학습
+ self.memory.append((history, action, reward, next_history, dead))
+
+ if len(self.memory) >= self.train_start:
+ self.train_model()
+
+ # 일정 시간마다 타겟모델을 모델의 가중치로 업데이트
+ if global_step % self.update_target_rate == 0:
+ self.update_target_model()
+
+
+ # 상태가 입력, 큐함수가 출력인 인공신경망 생성
+ def build_model(self):
+ model = Sequential()
+ model.add(Conv2D(64, (8, 8), strides=(1, 1), activation='relu', input_shape=self.state_size))
+ model.add(Conv2D(64, (4, 4), strides=(1, 1), activation='relu'))
+ #model.add(Conv2D(64, (3, 3), strides=(1, 1), activation='relu'))
+ model.add(Flatten())
+ model.add(Dense(512, activation='relu'))
+ model.add(Dense(self.action_size))
+ model.summary()
+ return model
+
+ def update_avg_q_max(self, history):
+ self.avg_q_max += np.amax(self.model.predict(np.float32(history / 5.))[0])
+
+ # 타겟 모델을 모델의 가중치로 업데이트
+ def update_target_model(self):
+ self.target_model.set_weights(self.model.get_weights())
+
+ # 입실론 탐욕 정책으로 행동 선택
+ def get_action(self, history):
+ history = np.float32(history / 5.0)
+ if np.random.rand() <= self.epsilon:
+ return random.randrange(self.action_size)
+ else:
+ q_value = self.model.predict(history)
+ return np.argmax(q_value[0])
+
+
+ # 리플레이 메모리에서 무작위로 추출한 배치로 모델 학습
+ def train_model(self):
+ if self.epsilon > self.epsilon_end:
+ self.epsilon -= self.epsilon_decay_step
+
+ mini_batch = random.sample(self.memory, self.batch_size)
+
+ history = np.zeros((self.batch_size, self.state_size[0],
+ self.state_size[1], self.state_size[2]))
+ next_history = np.zeros((self.batch_size, self.state_size[0],
+ self.state_size[1], self.state_size[2]))
+ target = np.zeros((self.batch_size,))
+ action, reward, dead = [], [], []
+
+ for i in range(self.batch_size):
+ history[i] = np.float32(mini_batch[i][0] / 5.)
+ next_history[i] = np.float32(mini_batch[i][3] / 5.)
+ action.append(mini_batch[i][1])
+ reward.append(mini_batch[i][2])
+ dead.append(mini_batch[i][4])
+
+ target_value = self.target_model.predict(next_history)
+
+ for i in range(self.batch_size):
+ if dead[i]:
+ target[i] = reward[i]
+ else:
+ target[i] = reward[i] + self.discount_factor * \
+ np.amax(target_value[i])
+
+ loss = self.optimizer([history, action, target])
+ self.avg_loss += loss[0]
+
+ def write_summary(self, episode, score, global_step, step):
+
+ # 각 에피소드 당 학습 정보를 기록
+ if global_step > self.train_start:
+ stats = [score, self.avg_q_max / float(step), step,
+ self.avg_loss / float(step)]
+ for i in range(len(stats)):
+ self.sess.run(self.update_ops[i], feed_dict={self.summary_placeholders[i]: float(stats[i])})
+ summary_str = self.sess.run(self.summary_op)
+ self.summary_writer.add_summary(summary_str, episode + 1)
+
+ print("ep:%5d scr:%5d mem:%5d eps:%6.4f step:%5d q:%6.4f loss:%6.4f" %
+ (episode, score, len(self.memory), self.epsilon, global_step, self.avg_q_max / float(step), self.avg_loss / float(step)))
+
+ self.avg_q_max = 0
+ self.avg_loss = 0
+
+
+ # 각 에피소드 당 학습 정보를 기록
+ def setup_summary(self):
+ episode_total_reward = tf.Variable(0.)
+ episode_avg_max_q = tf.Variable(0.)
+ episode_duration = tf.Variable(0.)
+ episode_avg_loss = tf.Variable(0.)
+
+ tf.summary.scalar('Total Reward/Episode', episode_total_reward)
+ tf.summary.scalar('Average Max Q/Episode', episode_avg_max_q)
+ tf.summary.scalar('Duration/Episode', episode_duration)
+ tf.summary.scalar('Average Loss/Episode', episode_avg_loss)
+
+ summary_vars = [episode_total_reward, episode_avg_max_q,
+ episode_duration, episode_avg_loss]
+ summary_placeholders = [tf.placeholder(tf.float32) for _ in
+ range(len(summary_vars))]
+ update_ops = [summary_vars[i].assign(summary_placeholders[i]) for i in
+ range(len(summary_vars))]
+ summary_op = tf.summary.merge_all()
+ return summary_placeholders, update_ops, summary_op
+
+ def save_model(self, ep):
+
+ # 1000 에피소드마다 모델 저장
+ if ep % 1000 == 0:
+ self.model.save_weights("./lunar_rover_dqn.h5")
+
+
+def main(screen):
+
+ env = Environment(screen)
+ action_size = env.action_size
+
+ #agent = HumanAgent(screen)
+
+ # DQN 에이전트 생성
+ agent = DQNAgent(MAP_HEIGHT, MAP_WIDTH, action_size)
+
+ scores, episodes, global_step = [], [], 0
+
+ for ep in range(MAX_EPISODE):
+
+ step = 0
+ score = 0
+ observation = env.reset()
+
+ #for _ in range(random.randint(1, agent.no_op_steps)):
+ # observation, _, _, _ = env.step(1)
+
+ done = False
+
+ state = observation.map
+ #history = np.stack((state, state, state, state), axis=2)
+ history = np.reshape(state, (1, MAP_HEIGHT, MAP_WIDTH, 1))
+
+ while not done:
+
+ env.render()
+
+ global_step += 1
+ step += 1
+
+ # 현재 관측으로 행동을 선택
+ action = agent.get_action(history)
+
+ # 선택한 행동으로 환경에서 한 타임스텝 진행
+ observation, reward, done, info = env.step(action)
+
+ # 각 타임스텝마다 상태 전처리
+ next_state = observation.map
+ next_history = np.reshape(state, (1, MAP_HEIGHT, MAP_WIDTH, 1))
+
+ agent.update_avg_q_max(history)
+
+ reward = np.clip(reward, -1., 1.)
+
+ agent.train(history, action, reward, next_history, done, global_step)
+
+ score += reward
+
+ agent.write_summary(ep, score, global_step, step)
+ agent.save_model(ep)
+
+if __name__=='__main__':
+ curses.wrapper(main)
\ No newline at end of file
diff --git a/_projects/lunar_rover_dqn_play_v5_4000.h5 b/_projects/lunar_rover_dqn_play_v5_4000.h5
new file mode 100644
index 00000000..641f306a
Binary files /dev/null and b/_projects/lunar_rover_dqn_play_v5_4000.h5 differ
diff --git a/_projects/lunar_rover_v102.py b/_projects/lunar_rover_v102.py
new file mode 100644
index 00000000..8b822123
--- /dev/null
+++ b/_projects/lunar_rover_v102.py
@@ -0,0 +1,489 @@
+import curses
+import time
+import sys
+import numpy as np
+from random import randint
+import random
+from enum import Enum, IntEnum
+
+import pylab
+import random
+from collections import deque
+from keras.layers import Dense
+from keras.optimizers import Adam
+from keras.models import Sequential
+from IPython import get_ipython
+from IPython.display import clear_output
+import os
+
+MAP_WIDTH = 16
+MAP_HEIGHT = 16
+ROVER_MAX_ENERGY = 40
+MAX_EPISODE = 500000
+RENDERING_TIME_SLEEP = 0.0
+
+class MapBlock(IntEnum):
+ AIR = 0
+ VISIT = 1
+ CRATERS = 2
+ HELIUM3 = 3
+ ROVER = 4
+
+MAP_BLOCKS_ICONS = {
+ 0: '. ',
+ 1: ' ',
+ 2: '▓▓',
+ 3: '**',
+ 4: '▞▚',
+}
+
+class StandardRenderer:
+
+ def __init__(self):
+ self.screen = None
+ self.str_log = ''
+
+ def set_screen(self, screen):
+ pass
+
+ def get_key(self):
+ pass
+
+ def render(self, map, rover_current_energy, moving_distance, mineral_sampling):
+
+ if get_ipython() is None:
+ os.system('clear')
+ else:
+ clear_output(wait=True)
+
+ str_draw = ''
+ for row in range(MAP_HEIGHT):
+ for col in range(MAP_WIDTH):
+ str_draw += MAP_BLOCKS_ICONS[map[row][col]]
+ str_draw += '\n'
+
+ print(str_draw, flush=True)
+ print(self.str_log)
+
+ def put_log(self, str_log):
+ self.str_log = str_log
+
+class CursesRenderer:
+
+ def __init__(self):
+ self.screen = None
+ self.str_log = ''
+
+ def set_screen(self, screen):
+ self.screen = screen
+ self.screen.timeout(0)
+
+ def get_key(self):
+ return self.screen.getch()
+
+ def render(self, map, rover_current_energy, moving_distance, mineral_sampling):
+
+ for row in range(MAP_HEIGHT):
+ row_string = ''
+ for col in range(MAP_WIDTH):
+ row_string += MAP_BLOCKS_ICONS[map[row][col]]
+ self.screen.addstr(row, 0, row_string)
+
+ self.screen.addstr(0, 0, '%4d♥' % rover_current_energy)
+ self.screen.addstr(0, 5, '%4dm' % moving_distance)
+ self.screen.addstr(0, 10, '%4d◆' % mineral_sampling)
+ self.screen.addstr(16, 0, self.str_log)
+ self.screen.refresh()
+
+ def put_log(self, str_log):
+ self.str_log = str_log
+
+class Observation:
+
+ def __init__(self, state_size):
+ self.state_size = state_size
+ self.rover_current_energy = 0
+ self.rover_current_y = 0
+ self.visual_range = 0
+ self.rover_view_x = 0
+ self.map = None
+
+ def get_state(self):
+
+ state = np.zeros(self.state_size)
+ state[0] = self.rover_current_energy
+ state[1] = MAP_HEIGHT - 1 - self.rover_current_y
+
+ for col in range(self.visual_range):
+
+ item_row_index = 15
+
+ for row in range(MAP_HEIGHT):
+
+ if self.map[row][self.rover_view_x + col] == MapBlock.HELIUM3:
+ item_row_index = row
+ break
+
+ state[col + 2] = MAP_HEIGHT - 1 - item_row_index
+
+ state = np.reshape(state, [1, self.state_size])
+
+ return state
+
+class Environment:
+
+ def __init__(self):
+
+ self.map = None
+ self.renederer = None
+ self.visual_range = 11
+ self.state_size = 1 + 1 + self.visual_range
+ self.action_size = 2
+ self.rover_view_x = 4
+
+ self.reset()
+
+ def reset(self):
+
+ self.map = np.zeros((MAP_HEIGHT, MAP_WIDTH))
+ self.map[MAP_HEIGHT-1][:] = MapBlock.HELIUM3
+
+ for col in range((int)(MAP_WIDTH/2+1), MAP_WIDTH):
+
+ if col < MAP_WIDTH/2 + 4:
+ new_wall_height = random.randrange(0, 2) # 1부터 6미만 숫자. 1, 2, 3, 4, 5
+ else:
+ new_wall_height = random.randrange(0, 3) # 1부터 6미만 숫자. 1, 2, 3, 4, 5
+
+ for row in range(MAP_HEIGHT):
+ if row < (MAP_HEIGHT - new_wall_height - 1):
+ self.map[row][col] = MapBlock.AIR
+ elif row == (MAP_HEIGHT - new_wall_height - 1):
+ self.map[row][col] = MapBlock.HELIUM3
+ elif row < MAP_HEIGHT:
+ self.map[row][col] = MapBlock.CRATERS
+
+ self.rover_current_energy = 10
+ self.rover_current_x = MAP_WIDTH - 1 - self.visual_range
+ self.rover_current_y = MAP_HEIGHT - 1
+ self.map_current_x = 0
+ self.moving_distance = 0
+ self.mineral_sampling = 0
+
+ self.map[self.rover_current_y][self.rover_current_x - self.map_current_x] = MapBlock.ROVER
+
+ obser = Observation(self.state_size)
+ obser.rover_current_energy = self.rover_current_energy
+ obser.rover_current_y = self.rover_current_y
+ obser.visual_range = self.visual_range
+ obser.rover_view_x = self.rover_view_x
+ obser.map = self.map
+
+ return obser
+
+ def step(self, action):
+
+ reward = 0
+ done = False
+ dead = False
+
+ self.map[self.rover_current_y][self.rover_current_x - self.map_current_x] = MapBlock.VISIT
+
+ if action == 1:
+ if self.rover_current_energy > 0:
+ self.rover_current_energy -= 1
+ self.rover_current_y -= 1
+ else :
+ if self.rover_current_y < MAP_HEIGHT - 1:
+ self.rover_current_y += 1
+
+ else:
+ if self.rover_current_y < MAP_HEIGHT - 1:
+ self.rover_current_y += 1
+
+ self.rover_current_x += 1
+
+ current_block = self.map[self.rover_current_y][self.rover_current_x - self.map_current_x]
+
+ new_block = MapBlock.ROVER
+
+ is_get_helium3 = False
+
+ if current_block == MapBlock.AIR:
+ new_block = MapBlock.ROVER
+ elif current_block == MapBlock.CRATERS:
+ new_block = MapBlock.AIR
+ done = True
+ dead = True
+ elif current_block == MapBlock.HELIUM3:
+ new_block = MapBlock.ROVER
+ self.mineral_sampling += 1
+ self.rover_current_energy += 1
+ is_get_helium3 = True
+
+ self.map[self.rover_current_y][self.rover_current_x - self.map_current_x] = new_block
+
+ new_wall_height = random.randrange(0, 5) # 1부터 6미만 숫자. 1, 2, 3, 4, 5
+
+ for row in range(MAP_HEIGHT):
+ for col in range(MAP_WIDTH-1):
+ self.map[row][col] = self.map[row][col+1]
+
+ for row in range(MAP_HEIGHT):
+ if row < (MAP_HEIGHT - new_wall_height - 1):
+ self.map[row][MAP_WIDTH-1] = MapBlock.AIR
+ elif row == (MAP_HEIGHT - new_wall_height - 1):
+ self.map[row][MAP_WIDTH-1] = MapBlock.HELIUM3
+ elif row < MAP_HEIGHT:
+ self.map[row][MAP_WIDTH-1] = MapBlock.CRATERS
+
+ self.map_current_x += 1
+
+ self.moving_distance = max(self.moving_distance, abs(self.map_current_x))
+
+ if done == True:
+ reward = -10
+ else:
+ if is_get_helium3 == True:
+ reward = 2
+ else:
+ reward = 1
+
+ obser = Observation(self.state_size)
+ obser.rover_current_energy = self.rover_current_energy
+ obser.rover_current_y = self.rover_current_y
+ obser.visual_range = self.visual_range
+ obser.rover_view_x = self.rover_view_x
+ obser.map = self.map
+
+ return obser, reward, done
+
+ def render(self):
+ self.renderer.render(self.map, self.rover_current_energy, self.moving_distance, self.mineral_sampling)
+ time.sleep(RENDERING_TIME_SLEEP)
+
+ def put_log(self, str_log):
+ self.renderer.put_log(str_log)
+
+class HumanAgent:
+
+ def __init__(self, state_size, action_size, renderer):
+ self.renderer = renderer
+
+ def get_action(self, observation):
+
+ ret = 0
+
+ if renderer == None:
+ return ret
+
+ key = self.renderer.get_key()
+ if key == curses.KEY_RIGHT:
+ ret = 1
+
+ return ret
+
+ def save_model(self, ep):
+ pass
+
+class DQNAgent:
+ def __init__(self, state_size, action_size):
+
+ self.load_model = True #False
+
+ # 상태와 행동의 크기 정의
+ self.state_size = state_size
+ self.action_size = action_size
+
+ # DQN 하이퍼파라미터
+ self.discount_factor = 0.99
+ self.learning_rate = 0.001
+ self.epsilon = 1.0
+ self.epsilon_decay = 0.9999 #0.999
+ self.epsilon_min = 0.01
+ self.batch_size = 64
+ self.train_start = 5000 #1000 #학습 전에 메모리에 쌓아둘 리플레이 수
+
+ # 리플레이 메모리, 최대 크기 2000
+ self.memory = deque(maxlen=10000) #2000
+
+ # 모델과 타깃 모델 생성
+ self.model = self.build_model()
+ self.target_model = self.build_model()
+
+ # 타깃 모델 초기화
+ self.update_target_model()
+
+ if self.load_model:
+ self.model.load_weights("./lunar_rover_dqn_play_v5_4000.h5")
+
+ # 상태가 입력, 큐함수가 출력인 인공신경망 생성
+ def build_model(self):
+ model = Sequential()
+ model.add(Dense(32, input_dim=self.state_size, activation='relu', kernel_initializer='he_uniform'))
+ model.add(Dense(16, activation='relu', kernel_initializer='he_uniform'))
+ model.add(Dense(self.action_size, activation='linear', kernel_initializer='he_uniform'))
+ model.summary()
+ model.compile(loss='mse', optimizer=Adam(lr=self.learning_rate))
+ return model
+
+ def post_episode(self):
+ self.update_target_model()
+
+ # 타깃 모델을 모델의 가중치로 업데이트
+ def update_target_model(self):
+ self.target_model.set_weights(self.model.get_weights())
+
+ # 입실론 탐욕 정책으로 행동 선택
+ def get_action(self, observation):
+
+ state = observation.get_state()
+
+ if np.random.rand() <= self.epsilon:
+ return random.randrange(self.action_size)
+ else:
+ q_value = self.model.predict(state)
+ return np.argmax(q_value[0])
+
+ def train_sample(self, observation, action, reward, next_observation, done):
+
+ self.memory.append((observation.get_state(), action, reward, next_observation.get_state(), done))
+
+ if len(self.memory) >= self.train_start:
+ self.train_model()
+
+ # 리플레이 메모리에서 무작위로 추출한 배치로 모델 학습
+ def train_model(self):
+ if self.epsilon > self.epsilon_min:
+ self.epsilon *= self.epsilon_decay
+
+ # 메모리에서 배치 크기만큼 무작위로 샘플 추출
+ mini_batch = random.sample(self.memory, self.batch_size)
+
+ states = np.zeros((self.batch_size, self.state_size))
+ next_states = np.zeros((self.batch_size, self.state_size))
+ actions, rewards, dones = [], [], []
+
+ for i in range(self.batch_size):
+ states[i] = mini_batch[i][0]
+ actions.append(mini_batch[i][1])
+ rewards.append(mini_batch[i][2])
+ next_states[i] = mini_batch[i][3]
+ dones.append(mini_batch[i][4])
+
+ # 현재 상태에 대한 모델의 큐함수
+ # 다음 상태에 대한 타깃 모델의 큐함수
+ target = self.model.predict(states)
+ target_val = self.target_model.predict(next_states)
+
+ # 벨만 최적 방정식을 이용한 업데이트 타깃
+ for i in range(self.batch_size):
+ if dones[i]:
+ target[i][actions[i]] = rewards[i]
+ else:
+ target[i][actions[i]] = rewards[i] + self.discount_factor * (
+ np.amax(target_val[i]))
+
+ self.model.fit(states, target, batch_size=self.batch_size, epochs=1, verbose=0)
+
+ def save_model(self, filename):
+ self.model.save_weights(filename)
+
+def main_play(screen, env, agent):
+
+ env.renderer.set_screen(screen)
+
+ scores, episodes = [], []
+
+ for ep in range(MAX_EPISODE):
+
+ done = False
+ score = 0
+
+ observation = env.reset()
+
+ while not done:
+
+ env.render()
+
+ action = agent.get_action(observation)
+
+ next_observation, reward, done = env.step(action)
+
+ score += reward
+ observation = next_observation
+
+ episodes.append(ep)
+ scores.append(score)
+
+ pylab.plot(episodes, scores, 'b')
+ pylab.savefig("./lunar_rover_v101.png")
+
+def main_train(screen, env, agent):
+
+ env.renderer.set_screen(screen)
+
+ scores, episodes = [], []
+
+ for ep in range(MAX_EPISODE):
+
+ done = False
+ score = 0
+
+ observation = env.reset()
+
+ while not done:
+
+ env.render()
+
+ action = agent.get_action(observation)
+
+ next_observation, reward, done = env.step(action)
+
+ agent.train_sample(observation, action, reward, next_observation, done)
+
+ score += reward
+ observation = next_observation
+
+ agent.post_episode()
+
+ episodes.append(ep)
+ scores.append(score)
+
+ pylab.plot(episodes, scores, 'b')
+ pylab.savefig("./lunar_rover_v102.png")
+
+ str_log = "ep:%5d, score:%5d, memlen:%5d, ep:%5.3f" % (ep, score, len(agent.memory), agent.epsilon)
+
+ env.put_log(str_log)
+
+ if ep % 1000 == 0:
+ agent.save_model("./lunar_rover_dqn_v102.h5")
+
+if __name__=='__main__':
+
+ env = Environment()
+
+ state_size = env.state_size
+ action_size = env.action_size
+
+ render = None
+
+ if get_ipython() is None:
+ renderer = CursesRenderer()
+ else:
+ renderer = StandardRenderer()
+
+ #agent = HumanAgent(state_size, action_size, renderer)
+ #agent = ReinforceAgent(state_size, action_size)
+ agent = DQNAgent(state_size, action_size)
+ #agent = A2CAgent(state_size, action_size)
+
+ env.renderer = renderer
+
+ if get_ipython() is None:
+ #curses.wrapper(main_train, env, agent)
+ curses.wrapper(main_play, env, agent)
+ else:
+ #main_train(None, renderer, env, agent)
+ main_play(None, env, agent)
diff --git a/_projects/lunar_rover_v102_env.py b/_projects/lunar_rover_v102_env.py
new file mode 100644
index 00000000..ac9561eb
--- /dev/null
+++ b/_projects/lunar_rover_v102_env.py
@@ -0,0 +1,340 @@
+import curses
+import time
+import sys
+import numpy as np
+from random import randint
+import random
+from enum import Enum, IntEnum
+
+import pylab
+import random
+from collections import deque
+from keras.layers import Dense
+from keras.optimizers import Adam
+from keras.models import Sequential
+from IPython import get_ipython
+from IPython.display import clear_output
+import os
+
+MAP_WIDTH = 16
+MAP_HEIGHT = 16
+ROVER_MAX_ENERGY = 40
+MAX_EPISODE = 500000
+RENDERING_TIME_SLEEP = 1.
+
+class MapBlock(IntEnum):
+ AIR = 0
+ VISIT = 1
+ CRATERS = 2
+ HELIUM3 = 3
+ ROVER = 4
+
+MAP_BLOCKS_ICONS = {
+ 0: '. ',
+ 1: ' ',
+ 2: '▓▓',
+ 3: '**',
+ 4: '▞▚',
+}
+
+class StandardRenderer:
+
+ def __init__(self):
+ self.screen = None
+ self.str_log = ''
+
+ def set_screen(self, screen):
+ pass
+
+ def get_key(self):
+ pass
+
+ def render(self, map, rover_current_energy, moving_distance, mineral_sampling):
+
+ if get_ipython() is None:
+ os.system('clear')
+ else:
+ clear_output(wait=True)
+
+ str_draw = ''
+ for row in range(MAP_HEIGHT):
+ for col in range(MAP_WIDTH):
+ str_draw += MAP_BLOCKS_ICONS[map[row][col]]
+ str_draw += '\n'
+
+ print(str_draw, flush=True)
+ print(self.str_log)
+
+ def put_log(self, str_log):
+ self.str_log = str_log
+
+class CursesRenderer:
+
+ def __init__(self):
+ self.screen = None
+ self.str_log = ''
+
+ def set_screen(self, screen):
+ self.screen = screen
+ self.screen.timeout(0)
+
+ def get_key(self):
+ return self.screen.getch()
+
+ def render(self, map, rover_current_energy, moving_distance, mineral_sampling):
+
+ for row in range(MAP_HEIGHT):
+ row_string = ''
+ for col in range(MAP_WIDTH):
+ row_string += MAP_BLOCKS_ICONS[map[row][col]]
+ self.screen.addstr(row, 0, row_string)
+
+ self.screen.addstr(0, 0, '%4d♥' % rover_current_energy)
+ self.screen.addstr(0, 5, '%4dm' % moving_distance)
+ self.screen.addstr(0, 10, '%4d◆' % mineral_sampling)
+ self.screen.addstr(16, 0, self.str_log)
+ self.screen.refresh()
+
+ def put_log(self, str_log):
+ self.str_log = str_log
+
+class Observation:
+
+ def __init__(self, state_size):
+ self.state_size = state_size
+ self.rover_current_energy = 0
+ self.rover_current_y = 0
+ self.visual_range = 0
+ self.rover_view_x = 0
+ self.map = None
+
+ def get_state(self):
+
+ state = np.zeros(self.state_size)
+ state[0] = self.rover_current_energy
+ state[1] = MAP_HEIGHT - 1 - self.rover_current_y
+
+ for col in range(self.visual_range):
+
+ item_row_index = 15
+
+ for row in range(MAP_HEIGHT):
+
+ if self.map[row][self.rover_view_x + col] == MapBlock.HELIUM3:
+ item_row_index = row
+ break
+
+ state[col + 2] = MAP_HEIGHT - 1 - item_row_index
+
+ state = np.reshape(state, [1, self.state_size])
+
+ return state
+
+class Environment:
+
+ def __init__(self):
+
+ self.map = None
+ self.renederer = None
+ self.visual_range = 11
+ self.state_size = 1 + 1 + self.visual_range
+ self.action_size = 2
+ self.rover_view_x = 4
+
+ self.reset()
+
+ def reset(self):
+
+ self.map = np.zeros((MAP_HEIGHT, MAP_WIDTH))
+ self.map[MAP_HEIGHT-1][:] = MapBlock.HELIUM3
+
+ for col in range((int)(MAP_WIDTH/2+1), MAP_WIDTH):
+
+ if col < MAP_WIDTH/2 + 4:
+ new_wall_height = random.randrange(0, 2) # 1부터 6미만 숫자. 1, 2, 3, 4, 5
+ else:
+ new_wall_height = random.randrange(0, 3) # 1부터 6미만 숫자. 1, 2, 3, 4, 5
+
+ for row in range(MAP_HEIGHT):
+ if row < (MAP_HEIGHT - new_wall_height - 1):
+ self.map[row][col] = MapBlock.AIR
+ elif row == (MAP_HEIGHT - new_wall_height - 1):
+ self.map[row][col] = MapBlock.HELIUM3
+ elif row < MAP_HEIGHT:
+ self.map[row][col] = MapBlock.CRATERS
+
+ self.rover_current_energy = 10
+ self.rover_current_x = MAP_WIDTH - 1 - self.visual_range
+ self.rover_current_y = MAP_HEIGHT - 1
+ self.map_current_x = 0
+ self.moving_distance = 0
+ self.mineral_sampling = 0
+
+ self.map[self.rover_current_y][self.rover_current_x - self.map_current_x] = MapBlock.ROVER
+
+ obser = Observation(self.state_size)
+ obser.rover_current_energy = self.rover_current_energy
+ obser.rover_current_y = self.rover_current_y
+ obser.visual_range = self.visual_range
+ obser.rover_view_x = self.rover_view_x
+ obser.map = self.map
+
+ return obser
+
+ def step(self, action):
+
+ reward = 0
+ done = False
+ dead = False
+
+ self.map[self.rover_current_y][self.rover_current_x - self.map_current_x] = MapBlock.VISIT
+
+ if action == 1:
+ if self.rover_current_energy > 0:
+ self.rover_current_energy -= 1
+ self.rover_current_y -= 1
+ else :
+ if self.rover_current_y < MAP_HEIGHT - 1:
+ self.rover_current_y += 1
+
+ else:
+ if self.rover_current_y < MAP_HEIGHT - 1:
+ self.rover_current_y += 1
+
+ self.rover_current_x += 1
+
+ current_block = self.map[self.rover_current_y][self.rover_current_x - self.map_current_x]
+
+ new_block = MapBlock.ROVER
+
+ is_get_helium3 = False
+
+ if current_block == MapBlock.AIR:
+ new_block = MapBlock.ROVER
+ elif current_block == MapBlock.CRATERS:
+ new_block = MapBlock.AIR
+ done = True
+ dead = True
+ elif current_block == MapBlock.HELIUM3:
+ new_block = MapBlock.ROVER
+ self.mineral_sampling += 1
+ self.rover_current_energy += 1
+ is_get_helium3 = True
+
+ self.map[self.rover_current_y][self.rover_current_x - self.map_current_x] = new_block
+
+ new_wall_height = random.randrange(0, 5) # 1부터 6미만 숫자. 1, 2, 3, 4, 5
+
+ for row in range(MAP_HEIGHT):
+ for col in range(MAP_WIDTH-1):
+ self.map[row][col] = self.map[row][col+1]
+
+ for row in range(MAP_HEIGHT):
+ if row < (MAP_HEIGHT - new_wall_height - 1):
+ self.map[row][MAP_WIDTH-1] = MapBlock.AIR
+ elif row == (MAP_HEIGHT - new_wall_height - 1):
+ self.map[row][MAP_WIDTH-1] = MapBlock.HELIUM3
+ elif row < MAP_HEIGHT:
+ self.map[row][MAP_WIDTH-1] = MapBlock.CRATERS
+
+ self.map_current_x += 1
+
+ self.moving_distance = max(self.moving_distance, abs(self.map_current_x))
+
+ if done == True:
+ reward = -10
+ else:
+ if is_get_helium3 == True:
+ reward = 2
+ else:
+ reward = 1
+
+ obser = Observation(self.state_size)
+ obser.rover_current_energy = self.rover_current_energy
+ obser.rover_current_y = self.rover_current_y
+ obser.visual_range = self.visual_range
+ obser.rover_view_x = self.rover_view_x
+ obser.map = self.map
+
+ return obser, reward, done
+
+ def render(self):
+ self.renderer.render(self.map, self.rover_current_energy, self.moving_distance, self.mineral_sampling)
+ time.sleep(RENDERING_TIME_SLEEP)
+
+ def put_log(self, str_log):
+ self.renderer.put_log(str_log)
+
+class HumanAgent:
+
+ def __init__(self, state_size, action_size, renderer):
+ self.renderer = renderer
+
+ def get_action(self, observation):
+
+ ret = 0
+
+ if renderer == None:
+ return ret
+
+ key = self.renderer.get_key()
+ if key == curses.KEY_RIGHT:
+ ret = 1
+
+ return ret
+
+ def save_model(self, ep):
+ pass
+
+def main_play(screen, env, agent):
+
+ env.renderer.set_screen(screen)
+
+ scores, episodes = [], []
+
+ for ep in range(MAX_EPISODE):
+
+ done = False
+ score = 0
+
+ observation = env.reset()
+
+ while not done:
+
+ env.render()
+
+ action = agent.get_action(observation)
+
+ next_observation, reward, done = env.step(action)
+
+ score += reward
+ observation = next_observation
+
+ episodes.append(ep)
+ scores.append(score)
+
+ pylab.plot(episodes, scores, 'b')
+ pylab.savefig("./lunar_rover_v101.png")
+
+if __name__=='__main__':
+
+ env = Environment()
+
+ state_size = env.state_size
+ action_size = env.action_size
+
+ render = None
+
+ if get_ipython() is None:
+ renderer = CursesRenderer()
+ else:
+ renderer = StandardRenderer()
+
+ agent = HumanAgent(state_size, action_size, renderer)
+
+ env.renderer = renderer
+
+ if get_ipython() is None:
+ curses.wrapper(main_play, env, agent)
+ else:
+ main_play(None, env, agent)
\ No newline at end of file
diff --git a/_projects/lunar_rover_v102_part1.py b/_projects/lunar_rover_v102_part1.py
new file mode 100644
index 00000000..b5b911cb
--- /dev/null
+++ b/_projects/lunar_rover_v102_part1.py
@@ -0,0 +1,342 @@
+import curses
+import time
+import sys
+import numpy as np
+from random import randint
+import random
+from enum import Enum, IntEnum
+
+import pylab
+import random
+from collections import deque
+from keras.layers import Dense
+from keras.optimizers import Adam
+from keras.models import Sequential
+from IPython import get_ipython
+from IPython.display import clear_output
+import os
+
+MAP_WIDTH = 16
+MAP_HEIGHT = 16
+ROVER_MAX_ENERGY = 40
+MAX_EPISODE = 500000
+RENDERING_TIME_SLEEP = 1.
+
+class MapBlock(IntEnum):
+ AIR = 0
+ VISIT = 1
+ CRATERS = 2
+ HELIUM3 = 3
+ ROVER = 4
+
+MAP_BLOCKS_ICONS = {
+ 0: '. ',
+ 1: ' ',
+ 2: '▓▓',
+ 3: '**',
+ 4: '▞▚',
+}
+
+class StandardRenderer:
+
+ def __init__(self):
+ self.screen = None
+
+ def set_screen(self, screen):
+ pass
+
+ def get_key(self):
+ pass
+
+ def render(self, map, rover_current_energy, moving_distance, mineral_sampling):
+
+ if get_ipython() is None:
+ os.system('clear')
+ else:
+ clear_output(wait=True)
+
+ str_draw = ''
+ for row in range(MAP_HEIGHT):
+ for col in range(MAP_WIDTH):
+ str_draw += MAP_BLOCKS_ICONS[map[row][col]]
+ str_draw += '\n'
+
+ print(str_draw, flush=True)
+
+ def logging(self, str_log):
+ print(str_log)
+
+class CursesRenderer:
+
+ def __init__(self):
+ self.screen = None
+
+ def set_screen(self, screen):
+ self.screen = screen
+ self.screen.timeout(0)
+
+ def get_key(self):
+ return self.screen.getch()
+
+ def render(self, map, rover_current_energy, moving_distance, mineral_sampling):
+
+ for row in range(MAP_HEIGHT):
+ row_string = ''
+ for col in range(MAP_WIDTH):
+ row_string += MAP_BLOCKS_ICONS[map[row][col]]
+ self.screen.addstr(row, 0, row_string)
+
+ self.screen.addstr(0, 0, '%4d♥' % rover_current_energy)
+ self.screen.addstr(0, 5, '%4dm' % moving_distance)
+ self.screen.addstr(0, 10, '%4d◆' % mineral_sampling)
+ self.screen.addstr(16, 0, '')
+ self.screen.refresh()
+
+ def logging(self, str_log):
+ self.screen.addstr(16, 0, str_log)
+
+class Observation:
+
+ def __init__(self, state_size):
+ self.state_size = state_size
+ self.rover_current_energy = 0
+ self.rover_current_y = 0
+ self.visual_range = 0
+ self.rover_view_x = 0
+ self.map = None
+
+ def get_state(self):
+
+ state = np.zeros(self.state_size)
+ state[0] = self.rover_current_energy
+ state[1] = MAP_HEIGHT - 1 - self.rover_current_y
+
+ for col in range(self.visual_range):
+
+ item_row_index = 15
+
+ for row in range(MAP_HEIGHT):
+
+ if self.map[row][self.rover_view_x + col] == MapBlock.HELIUM3:
+ item_row_index = row
+ break
+
+ state[col + 2] = MAP_HEIGHT - 1 - item_row_index
+
+ state = np.reshape(state, [1, self.state_size])
+
+ return state
+"""
+# 각 타임스텝마다 상태 전처리
+ next_state = np.reshape(next_state, [1, state_size])
+ state = np.reshape(state, [1, state_size])
+"""
+
+class Environment:
+
+ def __init__(self):
+
+ self.map = None
+ self.renederer = None
+ self.visual_range = 11
+ self.state_size = 1 + 1 + self.visual_range
+ self.action_size = 2
+ self.rover_view_x = 4
+
+ self.reset()
+
+ def reset(self):
+
+ self.map = np.zeros((MAP_HEIGHT, MAP_WIDTH))
+ self.map[MAP_HEIGHT-1][:] = MapBlock.HELIUM3
+
+ for col in range((int)(MAP_WIDTH/2+1), MAP_WIDTH):
+
+ if col < MAP_WIDTH/2 + 4:
+ new_wall_height = random.randrange(0, 2) # 1부터 6미만 숫자. 1, 2, 3, 4, 5
+ else:
+ new_wall_height = random.randrange(0, 3) # 1부터 6미만 숫자. 1, 2, 3, 4, 5
+
+ for row in range(MAP_HEIGHT):
+ if row < (MAP_HEIGHT - new_wall_height - 1):
+ self.map[row][col] = MapBlock.AIR
+ elif row == (MAP_HEIGHT - new_wall_height - 1):
+ self.map[row][col] = MapBlock.HELIUM3
+ elif row < MAP_HEIGHT:
+ self.map[row][col] = MapBlock.CRATERS
+
+ self.rover_current_energy = 10
+ self.rover_current_x = MAP_WIDTH - 1 - self.visual_range
+ self.rover_current_y = MAP_HEIGHT - 1
+ self.map_current_x = 0
+ self.moving_distance = 0
+ self.mineral_sampling = 0
+
+ self.map[self.rover_current_y][self.rover_current_x - self.map_current_x] = MapBlock.ROVER
+
+ obser = Observation(self.state_size)
+ obser.rover_current_energy = self.rover_current_energy
+ obser.rover_current_y = self.rover_current_y
+ obser.visual_range = self.visual_range
+ obser.rover_view_x = self.rover_view_x
+ obser.map = self.map
+
+ return obser
+
+ def step(self, action):
+
+ reward = 0
+ done = False
+ dead = False
+
+ self.map[self.rover_current_y][self.rover_current_x - self.map_current_x] = MapBlock.VISIT
+
+ if action == 1:
+ if self.rover_current_energy > 0:
+ self.rover_current_energy -= 1
+ self.rover_current_y -= 1
+ else :
+ if self.rover_current_y < MAP_HEIGHT - 1:
+ self.rover_current_y += 1
+
+ else:
+ if self.rover_current_y < MAP_HEIGHT - 1:
+ self.rover_current_y += 1
+
+ self.rover_current_x += 1
+
+ current_block = self.map[self.rover_current_y][self.rover_current_x - self.map_current_x]
+
+ new_block = MapBlock.ROVER
+
+ is_get_helium3 = False
+
+ if current_block == MapBlock.AIR:
+ new_block = MapBlock.ROVER
+ elif current_block == MapBlock.CRATERS:
+ new_block = MapBlock.AIR
+ done = True
+ dead = True
+ elif current_block == MapBlock.HELIUM3:
+ new_block = MapBlock.ROVER
+ self.mineral_sampling += 1
+ self.rover_current_energy += 1
+ is_get_helium3 = True
+
+ self.map[self.rover_current_y][self.rover_current_x - self.map_current_x] = new_block
+
+ new_wall_height = random.randrange(0, 5) # 1부터 6미만 숫자. 1, 2, 3, 4, 5
+
+ for row in range(MAP_HEIGHT):
+ for col in range(MAP_WIDTH-1):
+ self.map[row][col] = self.map[row][col+1]
+
+ for row in range(MAP_HEIGHT):
+ if row < (MAP_HEIGHT - new_wall_height - 1):
+ self.map[row][MAP_WIDTH-1] = MapBlock.AIR
+ elif row == (MAP_HEIGHT - new_wall_height - 1):
+ self.map[row][MAP_WIDTH-1] = MapBlock.HELIUM3
+ elif row < MAP_HEIGHT:
+ self.map[row][MAP_WIDTH-1] = MapBlock.CRATERS
+
+ self.map_current_x += 1
+
+ self.moving_distance = max(self.moving_distance, abs(self.map_current_x))
+
+ if done == True:
+ reward = -10
+ else:
+ if is_get_helium3 == True:
+ reward = 2
+ else:
+ reward = 1
+
+ obser = Observation(self.state_size)
+ obser.rover_current_energy = self.rover_current_energy
+ obser.rover_current_y = self.rover_current_y
+ obser.visual_range = self.visual_range
+ obser.rover_view_x = self.rover_view_x
+ obser.map = self.map
+
+ return obser, reward, done
+
+ def render(self):
+ self.renderer.render(self.map, self.rover_current_energy, self.moving_distance, self.mineral_sampling)
+ time.sleep(RENDERING_TIME_SLEEP)
+
+ def render_log(self, str_log):
+ self.renderer.logging(str_log)
+
+class HumanAgent:
+
+ def __init__(self, state_size, action_size, renderer):
+ self.renderer = renderer
+
+ def get_action(self, observation):
+
+ ret = 0
+
+ if renderer == None:
+ return ret
+
+ key = self.renderer.get_key()
+ if key == curses.KEY_RIGHT:
+ ret = 1
+
+ return ret
+
+ def save_model(self, ep):
+ pass
+
+def main_play(screen, env, agent):
+
+ env.renderer.set_screen(screen)
+
+ scores, episodes = [], []
+
+ for ep in range(MAX_EPISODE):
+
+ done = False
+ score = 0
+
+ observation = env.reset()
+
+ while not done:
+
+ env.render()
+
+ action = agent.get_action(observation)
+
+ next_observation, reward, done = env.step(action)
+
+ score += reward
+ observation = next_observation
+
+ episodes.append(ep)
+ scores.append(score)
+
+ pylab.plot(episodes, scores, 'b')
+ pylab.savefig("./lunar_rover_v101.png")
+
+if __name__=='__main__':
+
+ env = Environment()
+
+ state_size = env.state_size
+ action_size = env.action_size
+
+ render = None
+
+ if get_ipython() is None:
+ renderer = CursesRenderer()
+ else:
+ renderer = StandardRenderer()
+
+ agent = HumanAgent(state_size, action_size, renderer)
+
+ env.renderer = renderer
+
+ if get_ipython() is None:
+ curses.wrapper(main_play, env, agent)
+ else:
+ main_play(None, env, agent)
diff --git a/_sass/_layout.scss b/_sass/_layout.scss
index 875944d4..779e3d47 100755
--- a/_sass/_layout.scss
+++ b/_sass/_layout.scss
@@ -83,6 +83,31 @@ li {
color: #EEE;
}
+.description a {
+ color: #959BA6;
+}
+
+.description a:link {
+ color: #FFF;
+ opacity: 1;
+ transition: all 0.15s linear 0s;
+ text-decoration: none;
+}
+
+.description a:visited {
+ color: #FFF;
+ opacity: 1;
+ transition: all 0.15s linear 0s;
+ text-decoration: none;
+}
+
+.description a:hover {
+ color: #FFF;
+ opacity: 0.6;
+ cursor: pointer;
+ text-decoration: none;
+}
+
.social-links {
padding-top: 10px;
margin-left: 0px;
diff --git a/about.md b/about.md
index 47ac3a21..388954e1 100755
--- a/about.md
+++ b/about.md
@@ -11,16 +11,31 @@ comments: true
- 2017년 1월 27일 [케라스(Keras) 이야기](https://tykimos.github.io/2017/01/27/Keras_Talk/) 시작
걸음
-- 2017년 9월 20일 (주)인스페이스 대전창조경제혁신센터, "블록과 함께하는 딥러닝 실습, 케라스(Keras) 이야기"
-- 2017년 8월 24일 개방형컴퓨터통신연구회 건국대학교, "Keras를 활용한 빠른 Deep Learning 응용 개발 워크샵"
-- 2017년 8월 22일 통계청 2017년 원격탐사 활용 농업통계 워크숍 (2017 Agricultural Statistics Workshop) "원격탐사 분야 딥러닝 활용 및 케라스 소개 세미나"
-- 2017년 8월 11, 18일 경희대학교, "파이썬과 딥러닝 기초 실습 특강"
-- 2017년 5월 30일 국립전파연구원 우주전파센터, "우주전파환경 예보를 위한 딥러닝모델 개요 세미나"
-- 2017년 5월 23일 한국전파진흥협회, "태양관측 데이터를 활용한 딥러닝모델 개발 세미나"
-- 2017년 4월 4일 한국천문연구원, "태양에서 세포까지 딥러닝 이야기 세미나"
-- 2017년 3월 23일 대전창조경제혁신센터 제1회 대전 AI 포럼, "태양에서 세포까지 적용분야 그리고 케라스 이야기 세미나"
-- 2017년 3월 7일 충남대학교병원, "의료영상 분야에서의 딥러닝 이야기 세미나"
-- 2016년 11월 7일 세브란스병원, "영상인식 분야에서의 딥러닝 이야기 세미나"
+- 2019년 1월 캐글코리아 & 구글코리아, '2019 1st ML month with KaKR' 개최
+- 2019년 1월 서울과학종합대학원대학교, '인공지능의 실습과 전략적 적용' 박사과정 강의
+- 2018년 12월 서울여자대학교, '딥러닝 특강'
+- 2018년 11월 한국인터넷윤리학회 2018 추계학술대회, '인공지능 기술동향과 전망'
+- 2018년 11월 한국정보통신학회 여성 ICT 위원회, '신진 여성인재와 함께하는 케라스'
+- 2018년 11월 NVIDIA, NVIDIA AI Conference 2018, '알파오목연대기'
+- 2018년 10월 삼성, 삼성 오픈 컨퍼런스(soscon) 2018, '태양에서 세포까지 인공지능 활용 사례'
+- 2018년 10월 2018 한국슈퍼컴퓨팅 컨퍼런스, '알파오목 : 알파제로 알고리즘 탑재부터 서비스까지'
+- 2018년 6월 (주)인스페이스 '1st 함께하는 딥러닝 컨퍼런스'
+- 2018년 3월 (주)인스페이스 대전창조경제혁신센터, '블록과 함께하는 파이썬 딥러닝 케라스'
+- 2018년 3월 양재R&CD혁신허브, 제4회 AI신기술뎐 “함께하는 딥러닝 케라스'
+- 2018년 2월 Microsoft, 제7회 대한민국 커뮤니티 데이 “모두의 손에 딥러닝 툴을...'
+- 2017년 12월 Naver D2, “블록과 함께하는 케라스와 태양에서 세포까지 활용사례"
+- 2017년 11월 Google, GDG DevFest 2017 Seoul “블록과 함께하는 파이썬 딥러닝 케라스"
+- 2017년 11월 NASA, NASA Ames Conference Center, Radiation Workshop Lightning Talk
+- 2017년 9월 (주)인스페이스 대전창조경제혁신센터, "블록과 함께하는 딥러닝 실습, 케라스(Keras) 이야기"
+- 2017년 8월 개방형컴퓨터통신연구회 건국대학교, "Keras를 활용한 빠른 Deep Learning 응용 개발 워크샵"
+- 2017년 8월 통계청 2017년 원격탐사 활용 농업통계 워크숍 (2017 Agricultural Statistics Workshop) "원격탐사 분야 딥러닝 활용 및 케라스 소개 세미나"
+- 2017년 8월 경희대학교, "파이썬과 딥러닝 기초 실습 특강"
+- 2017년 5월 국립전파연구원 우주전파센터, "우주전파환경 예보를 위한 딥러닝모델 개요 세미나"
+- 2017년 5월 한국전파진흥협회, "태양관측 데이터를 활용한 딥러닝모델 개발 세미나"
+- 2017년 4월 한국천문연구원, "태양에서 세포까지 딥러닝 이야기 세미나"
+- 2017년 3월 대전창조경제혁신센터 제1회 대전 AI 포럼, "태양에서 세포까지 적용분야 그리고 케라스 이야기 세미나"
+- 2017년 3월 충남대학교병원, "의료영상 분야에서의 딥러닝 이야기 세미나"
+- 2016년 11월 세브란스병원, "영상인식 분야에서의 딥러닝 이야기 세미나"
[선릉]
diff --git a/images/gcs.jpg b/images/gcs.jpg
new file mode 100644
index 00000000..15610452
Binary files /dev/null and b/images/gcs.jpg differ
diff --git a/images/jmj.jpg b/images/jmj.jpg
new file mode 100644
index 00000000..eb0da779
Binary files /dev/null and b/images/jmj.jpg differ
diff --git a/images/lhh.jpg b/images/lhh.jpg
new file mode 100644
index 00000000..00d69aa8
Binary files /dev/null and b/images/lhh.jpg differ
diff --git a/images/pwc_logo.png b/images/pwc_logo.png
new file mode 100644
index 00000000..83518690
Binary files /dev/null and b/images/pwc_logo.png differ
diff --git a/images/rlko_logo.png b/images/rlko_logo.png
new file mode 100644
index 00000000..f183ea9e
Binary files /dev/null and b/images/rlko_logo.png differ
diff --git a/images/yjw.jpg b/images/yjw.jpg
new file mode 100644
index 00000000..ece41a63
Binary files /dev/null and b/images/yjw.jpg differ
diff --git a/index.html b/index.html
index afcebf0c..be297aa4 100755
--- a/index.html
+++ b/index.html
@@ -1,11 +1,11 @@
---
-layout: page
+layout: main_page
comments: true
---
- {% for post in site.posts %}
+ {% for post in paginator.posts %}
-
+
+
+
\ No newline at end of file
diff --git a/warehouse/2018-2-24-Deep_Learning_Tool_in_Everyones_hands_title.png b/warehouse/2018-2-24-Deep_Learning_Tool_in_Everyones_hands_title.png
index bdd91bd0..807446c1 100644
Binary files a/warehouse/2018-2-24-Deep_Learning_Tool_in_Everyones_hands_title.png and b/warehouse/2018-2-24-Deep_Learning_Tool_in_Everyones_hands_title.png differ
diff --git a/warehouse/2019-2-23-KCD_2019_Workshop_Keras_Magic_Show_title_1.png b/warehouse/2019-2-23-KCD_2019_Workshop_Keras_Magic_Show_title_1.png
new file mode 100644
index 00000000..b3590749
Binary files /dev/null and b/warehouse/2019-2-23-KCD_2019_Workshop_Keras_Magic_Show_title_1.png differ
diff --git a/warehouse/2019-2-6-Contribution_of_Keras_Document_to_Korean_Translation_1.png b/warehouse/2019-2-6-Contribution_of_Keras_Document_to_Korean_Translation_1.png
new file mode 100644
index 00000000..90542871
Binary files /dev/null and b/warehouse/2019-2-6-Contribution_of_Keras_Document_to_Korean_Translation_1.png differ
diff --git a/warehouse/2019-2-6-Contribution_of_Keras_Document_to_Korean_Translation_2.png b/warehouse/2019-2-6-Contribution_of_Keras_Document_to_Korean_Translation_2.png
new file mode 100644
index 00000000..f90555ca
Binary files /dev/null and b/warehouse/2019-2-6-Contribution_of_Keras_Document_to_Korean_Translation_2.png differ
diff --git a/warehouse/2019-2-6-Contribution_of_Keras_Document_to_Korean_Translation_title.png b/warehouse/2019-2-6-Contribution_of_Keras_Document_to_Korean_Translation_title.png
new file mode 100644
index 00000000..8f6e132a
Binary files /dev/null and b/warehouse/2019-2-6-Contribution_of_Keras_Document_to_Korean_Translation_title.png differ
diff --git a/warehouse/2019-2-9-Keras_and_Kaggle_National_Concert_d2.jpg b/warehouse/2019-2-9-Keras_and_Kaggle_National_Concert_d2.jpg
new file mode 100644
index 00000000..08aca8b9
Binary files /dev/null and b/warehouse/2019-2-9-Keras_and_Kaggle_National_Concert_d2.jpg differ
diff --git a/warehouse/2019-2-9-Keras_and_Kaggle_National_Concert_d3.jpg b/warehouse/2019-2-9-Keras_and_Kaggle_National_Concert_d3.jpg
new file mode 100644
index 00000000..405da97a
Binary files /dev/null and b/warehouse/2019-2-9-Keras_and_Kaggle_National_Concert_d3.jpg differ
diff --git a/warehouse/2019-2-9-Keras_and_Kaggle_National_Concert_d4.jpg b/warehouse/2019-2-9-Keras_and_Kaggle_National_Concert_d4.jpg
new file mode 100644
index 00000000..55fbad68
Binary files /dev/null and b/warehouse/2019-2-9-Keras_and_Kaggle_National_Concert_d4.jpg differ
diff --git a/warehouse/2019-2-9-Keras_and_Kaggle_National_Concert_s1.jpg b/warehouse/2019-2-9-Keras_and_Kaggle_National_Concert_s1.jpg
new file mode 100644
index 00000000..89a26b62
Binary files /dev/null and b/warehouse/2019-2-9-Keras_and_Kaggle_National_Concert_s1.jpg differ
diff --git a/warehouse/2019-2-9-Keras_and_Kaggle_National_Concert_s2.jpg b/warehouse/2019-2-9-Keras_and_Kaggle_National_Concert_s2.jpg
new file mode 100644
index 00000000..8ee06505
Binary files /dev/null and b/warehouse/2019-2-9-Keras_and_Kaggle_National_Concert_s2.jpg differ
diff --git a/warehouse/2019-2-9-Keras_and_Kaggle_National_Concert_s3.jpg b/warehouse/2019-2-9-Keras_and_Kaggle_National_Concert_s3.jpg
new file mode 100644
index 00000000..a6389dbb
Binary files /dev/null and b/warehouse/2019-2-9-Keras_and_Kaggle_National_Concert_s3.jpg differ
diff --git a/warehouse/2019-2-9-Keras_and_Kaggle_National_Concert_s4.jpg b/warehouse/2019-2-9-Keras_and_Kaggle_National_Concert_s4.jpg
new file mode 100644
index 00000000..5f0f7b17
Binary files /dev/null and b/warehouse/2019-2-9-Keras_and_Kaggle_National_Concert_s4.jpg differ
diff --git a/warehouse/2019-2-9-Keras_and_Kaggle_National_Concert_title_2.png b/warehouse/2019-2-9-Keras_and_Kaggle_National_Concert_title_2.png
new file mode 100644
index 00000000..8c28dcee
Binary files /dev/null and b/warehouse/2019-2-9-Keras_and_Kaggle_National_Concert_title_2.png differ
diff --git a/warehouse/2019-2-9-Keras_and_Kaggle_National_Concert_title_3.png b/warehouse/2019-2-9-Keras_and_Kaggle_National_Concert_title_3.png
new file mode 100644
index 00000000..7fba801a
Binary files /dev/null and b/warehouse/2019-2-9-Keras_and_Kaggle_National_Concert_title_3.png differ
diff --git a/warehouse/2019-2-9-Keras_and_Kaggle_National_Concert_title_4.png b/warehouse/2019-2-9-Keras_and_Kaggle_National_Concert_title_4.png
new file mode 100644
index 00000000..59e90ac9
Binary files /dev/null and b/warehouse/2019-2-9-Keras_and_Kaggle_National_Concert_title_4.png differ
diff --git a/warehouse/2019-2-9-Keras_and_Kaggle_National_Concert_title_5.png b/warehouse/2019-2-9-Keras_and_Kaggle_National_Concert_title_5.png
new file mode 100644
index 00000000..9e2cf5f1
Binary files /dev/null and b/warehouse/2019-2-9-Keras_and_Kaggle_National_Concert_title_5.png differ
diff --git a/warehouse/2019-3-17-Keras_Character_keras_sticker_grey_2.jpg b/warehouse/2019-3-17-Keras_Character_keras_sticker_grey_2.jpg
new file mode 100644
index 00000000..daebb555
Binary files /dev/null and b/warehouse/2019-3-17-Keras_Character_keras_sticker_grey_2.jpg differ
diff --git a/warehouse/2019-3-17-Keras_Character_keras_sticker_real.png b/warehouse/2019-3-17-Keras_Character_keras_sticker_real.png
new file mode 100644
index 00000000..e993cac8
Binary files /dev/null and b/warehouse/2019-3-17-Keras_Character_keras_sticker_real.png differ
diff --git a/warehouse/2019-3-17-Keras_Character_title.png b/warehouse/2019-3-17-Keras_Character_title.png
new file mode 100644
index 00000000..aaacf685
Binary files /dev/null and b/warehouse/2019-3-17-Keras_Character_title.png differ
diff --git a/warehouse/2019-3-26-NASA_FDL_Program_1.png b/warehouse/2019-3-26-NASA_FDL_Program_1.png
new file mode 100644
index 00000000..9979aea9
Binary files /dev/null and b/warehouse/2019-3-26-NASA_FDL_Program_1.png differ
diff --git a/warehouse/2019-3-26-NASA_FDL_Program_10.png b/warehouse/2019-3-26-NASA_FDL_Program_10.png
new file mode 100644
index 00000000..a204e423
Binary files /dev/null and b/warehouse/2019-3-26-NASA_FDL_Program_10.png differ
diff --git a/warehouse/2019-3-26-NASA_FDL_Program_11.png b/warehouse/2019-3-26-NASA_FDL_Program_11.png
new file mode 100644
index 00000000..65a43cdf
Binary files /dev/null and b/warehouse/2019-3-26-NASA_FDL_Program_11.png differ
diff --git a/warehouse/2019-3-26-NASA_FDL_Program_12.png b/warehouse/2019-3-26-NASA_FDL_Program_12.png
new file mode 100644
index 00000000..912efca0
Binary files /dev/null and b/warehouse/2019-3-26-NASA_FDL_Program_12.png differ
diff --git a/warehouse/2019-3-26-NASA_FDL_Program_13.png b/warehouse/2019-3-26-NASA_FDL_Program_13.png
new file mode 100644
index 00000000..a896d2db
Binary files /dev/null and b/warehouse/2019-3-26-NASA_FDL_Program_13.png differ
diff --git a/warehouse/2019-3-26-NASA_FDL_Program_14.png b/warehouse/2019-3-26-NASA_FDL_Program_14.png
new file mode 100644
index 00000000..32525094
Binary files /dev/null and b/warehouse/2019-3-26-NASA_FDL_Program_14.png differ
diff --git a/warehouse/2019-3-26-NASA_FDL_Program_15.png b/warehouse/2019-3-26-NASA_FDL_Program_15.png
new file mode 100644
index 00000000..dbff098b
Binary files /dev/null and b/warehouse/2019-3-26-NASA_FDL_Program_15.png differ
diff --git a/warehouse/2019-3-26-NASA_FDL_Program_16.png b/warehouse/2019-3-26-NASA_FDL_Program_16.png
new file mode 100644
index 00000000..14315845
Binary files /dev/null and b/warehouse/2019-3-26-NASA_FDL_Program_16.png differ
diff --git a/warehouse/2019-3-26-NASA_FDL_Program_17.png b/warehouse/2019-3-26-NASA_FDL_Program_17.png
new file mode 100644
index 00000000..39b2649f
Binary files /dev/null and b/warehouse/2019-3-26-NASA_FDL_Program_17.png differ
diff --git a/warehouse/2019-3-26-NASA_FDL_Program_18.png b/warehouse/2019-3-26-NASA_FDL_Program_18.png
new file mode 100644
index 00000000..fda5bfe4
Binary files /dev/null and b/warehouse/2019-3-26-NASA_FDL_Program_18.png differ
diff --git a/warehouse/2019-3-26-NASA_FDL_Program_19.png b/warehouse/2019-3-26-NASA_FDL_Program_19.png
new file mode 100644
index 00000000..b43d5c1a
Binary files /dev/null and b/warehouse/2019-3-26-NASA_FDL_Program_19.png differ
diff --git a/warehouse/2019-3-26-NASA_FDL_Program_2-1.png b/warehouse/2019-3-26-NASA_FDL_Program_2-1.png
new file mode 100644
index 00000000..2f72bfd9
Binary files /dev/null and b/warehouse/2019-3-26-NASA_FDL_Program_2-1.png differ
diff --git a/warehouse/2019-3-26-NASA_FDL_Program_2-2.png b/warehouse/2019-3-26-NASA_FDL_Program_2-2.png
new file mode 100644
index 00000000..e2768575
Binary files /dev/null and b/warehouse/2019-3-26-NASA_FDL_Program_2-2.png differ
diff --git a/warehouse/2019-3-26-NASA_FDL_Program_20.png b/warehouse/2019-3-26-NASA_FDL_Program_20.png
new file mode 100644
index 00000000..02659371
Binary files /dev/null and b/warehouse/2019-3-26-NASA_FDL_Program_20.png differ
diff --git a/warehouse/2019-3-26-NASA_FDL_Program_21.png b/warehouse/2019-3-26-NASA_FDL_Program_21.png
new file mode 100644
index 00000000..323f60a7
Binary files /dev/null and b/warehouse/2019-3-26-NASA_FDL_Program_21.png differ
diff --git a/warehouse/2019-3-26-NASA_FDL_Program_22.png b/warehouse/2019-3-26-NASA_FDL_Program_22.png
new file mode 100644
index 00000000..a3b21fc2
Binary files /dev/null and b/warehouse/2019-3-26-NASA_FDL_Program_22.png differ
diff --git a/warehouse/2019-3-26-NASA_FDL_Program_23.png b/warehouse/2019-3-26-NASA_FDL_Program_23.png
new file mode 100644
index 00000000..3cac0321
Binary files /dev/null and b/warehouse/2019-3-26-NASA_FDL_Program_23.png differ
diff --git a/warehouse/2019-3-26-NASA_FDL_Program_24.png b/warehouse/2019-3-26-NASA_FDL_Program_24.png
new file mode 100644
index 00000000..9b875733
Binary files /dev/null and b/warehouse/2019-3-26-NASA_FDL_Program_24.png differ
diff --git a/warehouse/2019-3-26-NASA_FDL_Program_3.png b/warehouse/2019-3-26-NASA_FDL_Program_3.png
new file mode 100644
index 00000000..2616a1eb
Binary files /dev/null and b/warehouse/2019-3-26-NASA_FDL_Program_3.png differ
diff --git a/warehouse/2019-3-26-NASA_FDL_Program_4.png b/warehouse/2019-3-26-NASA_FDL_Program_4.png
new file mode 100644
index 00000000..f7899fca
Binary files /dev/null and b/warehouse/2019-3-26-NASA_FDL_Program_4.png differ
diff --git a/warehouse/2019-3-26-NASA_FDL_Program_5.png b/warehouse/2019-3-26-NASA_FDL_Program_5.png
new file mode 100644
index 00000000..cf9abfe1
Binary files /dev/null and b/warehouse/2019-3-26-NASA_FDL_Program_5.png differ
diff --git a/warehouse/2019-3-26-NASA_FDL_Program_6.png b/warehouse/2019-3-26-NASA_FDL_Program_6.png
new file mode 100644
index 00000000..33013d07
Binary files /dev/null and b/warehouse/2019-3-26-NASA_FDL_Program_6.png differ
diff --git a/warehouse/2019-3-26-NASA_FDL_Program_7.png b/warehouse/2019-3-26-NASA_FDL_Program_7.png
new file mode 100644
index 00000000..2d6dcd0a
Binary files /dev/null and b/warehouse/2019-3-26-NASA_FDL_Program_7.png differ
diff --git a/warehouse/2019-3-26-NASA_FDL_Program_8-1.png b/warehouse/2019-3-26-NASA_FDL_Program_8-1.png
new file mode 100644
index 00000000..a1ec9256
Binary files /dev/null and b/warehouse/2019-3-26-NASA_FDL_Program_8-1.png differ
diff --git a/warehouse/2019-3-26-NASA_FDL_Program_8-2.png b/warehouse/2019-3-26-NASA_FDL_Program_8-2.png
new file mode 100644
index 00000000..bfb1b010
Binary files /dev/null and b/warehouse/2019-3-26-NASA_FDL_Program_8-2.png differ
diff --git a/warehouse/2019-3-26-NASA_FDL_Program_9.png b/warehouse/2019-3-26-NASA_FDL_Program_9.png
new file mode 100644
index 00000000..4ec028a5
Binary files /dev/null and b/warehouse/2019-3-26-NASA_FDL_Program_9.png differ
diff --git a/warehouse/2019-3-26-NASA_FDL_Program_title.png b/warehouse/2019-3-26-NASA_FDL_Program_title.png
new file mode 100644
index 00000000..9dbb3e13
Binary files /dev/null and b/warehouse/2019-3-26-NASA_FDL_Program_title.png differ
diff --git a/warehouse/2019-3-27-Keras_Kaggle_RL_National_Concert_1.jpg b/warehouse/2019-3-27-Keras_Kaggle_RL_National_Concert_1.jpg
new file mode 100644
index 00000000..4e9bb458
Binary files /dev/null and b/warehouse/2019-3-27-Keras_Kaggle_RL_National_Concert_1.jpg differ
diff --git a/warehouse/2019-3-27-Keras_Kaggle_RL_National_Concert_title_3.png b/warehouse/2019-3-27-Keras_Kaggle_RL_National_Concert_title_3.png
new file mode 100644
index 00000000..e4be9554
Binary files /dev/null and b/warehouse/2019-3-27-Keras_Kaggle_RL_National_Concert_title_3.png differ
diff --git a/warehouse/2019-4-1-SolarMagGAN_1.png b/warehouse/2019-4-1-SolarMagGAN_1.png
new file mode 100644
index 00000000..6811b909
Binary files /dev/null and b/warehouse/2019-4-1-SolarMagGAN_1.png differ
diff --git a/warehouse/2019-4-1-SolarMagGAN_2.png b/warehouse/2019-4-1-SolarMagGAN_2.png
new file mode 100644
index 00000000..6bf71092
Binary files /dev/null and b/warehouse/2019-4-1-SolarMagGAN_2.png differ
diff --git a/warehouse/2019-4-1-SolarMagGAN_3.png b/warehouse/2019-4-1-SolarMagGAN_3.png
new file mode 100644
index 00000000..11306c0c
Binary files /dev/null and b/warehouse/2019-4-1-SolarMagGAN_3.png differ
diff --git a/warehouse/2019-4-1-SolarMagGAN_4.png b/warehouse/2019-4-1-SolarMagGAN_4.png
new file mode 100644
index 00000000..244a4f09
Binary files /dev/null and b/warehouse/2019-4-1-SolarMagGAN_4.png differ
diff --git a/warehouse/2019-4-1-SolarMagGAN_5.gif b/warehouse/2019-4-1-SolarMagGAN_5.gif
new file mode 100644
index 00000000..6bc7f2d8
Binary files /dev/null and b/warehouse/2019-4-1-SolarMagGAN_5.gif differ
diff --git a/warehouse/2019-4-1-SolarMagGAN_title.png b/warehouse/2019-4-1-SolarMagGAN_title.png
new file mode 100644
index 00000000..ca0cd985
Binary files /dev/null and b/warehouse/2019-4-1-SolarMagGAN_title.png differ
diff --git a/warehouse/2019-5-10-KerasTuner_1.png b/warehouse/2019-5-10-KerasTuner_1.png
new file mode 100644
index 00000000..0007bfaf
Binary files /dev/null and b/warehouse/2019-5-10-KerasTuner_1.png differ
diff --git a/warehouse/2019-5-10-KerasTuner_title.png b/warehouse/2019-5-10-KerasTuner_title.png
new file mode 100644
index 00000000..3a2442d4
Binary files /dev/null and b/warehouse/2019-5-10-KerasTuner_title.png differ
diff --git a/warehouse/2019-5-4-FastCampusComer_1.png b/warehouse/2019-5-4-FastCampusComer_1.png
new file mode 100644
index 00000000..8be3413a
Binary files /dev/null and b/warehouse/2019-5-4-FastCampusComer_1.png differ
diff --git a/warehouse/2019-5-4-FastCampusComer_title.png b/warehouse/2019-5-4-FastCampusComer_title.png
new file mode 100644
index 00000000..226747d6
Binary files /dev/null and b/warehouse/2019-5-4-FastCampusComer_title.png differ
diff --git a/warehouse/2019-7-4-ISS_2nd_Deep_Learning_Conference_All_Together_room.png b/warehouse/2019-7-4-ISS_2nd_Deep_Learning_Conference_All_Together_room.png
new file mode 100644
index 00000000..62f196ca
Binary files /dev/null and b/warehouse/2019-7-4-ISS_2nd_Deep_Learning_Conference_All_Together_room.png differ
diff --git a/warehouse/2019-7-4-ISS_2nd_Deep_Learning_Conference_All_Together_table.png b/warehouse/2019-7-4-ISS_2nd_Deep_Learning_Conference_All_Together_table.png
new file mode 100644
index 00000000..78fcc081
Binary files /dev/null and b/warehouse/2019-7-4-ISS_2nd_Deep_Learning_Conference_All_Together_table.png differ
diff --git a/warehouse/2019-7-4-ISS_2nd_Deep_Learning_Conference_All_Together_title1.png b/warehouse/2019-7-4-ISS_2nd_Deep_Learning_Conference_All_Together_title1.png
new file mode 100644
index 00000000..d390a364
Binary files /dev/null and b/warehouse/2019-7-4-ISS_2nd_Deep_Learning_Conference_All_Together_title1.png differ
diff --git a/warehouse/2019-7-4-ISS_2nd_Deep_Learning_Conference_All_Together_title2.png b/warehouse/2019-7-4-ISS_2nd_Deep_Learning_Conference_All_Together_title2.png
new file mode 100644
index 00000000..c34ef5d2
Binary files /dev/null and b/warehouse/2019-7-4-ISS_2nd_Deep_Learning_Conference_All_Together_title2.png differ
diff --git a/warehouse/2019-7-4-ISS_2nd_Deep_Learning_Conference_All_Together_title3.png b/warehouse/2019-7-4-ISS_2nd_Deep_Learning_Conference_All_Together_title3.png
new file mode 100644
index 00000000..da1e3cca
Binary files /dev/null and b/warehouse/2019-7-4-ISS_2nd_Deep_Learning_Conference_All_Together_title3.png differ
diff --git a/warehouse/2019-7-4-ISS_2nd_Deep_Learning_Conference_All_Together_title4.png b/warehouse/2019-7-4-ISS_2nd_Deep_Learning_Conference_All_Together_title4.png
new file mode 100644
index 00000000..affaacb9
Binary files /dev/null and b/warehouse/2019-7-4-ISS_2nd_Deep_Learning_Conference_All_Together_title4.png differ