티스토리 뷰
1. Introduction
지난번에 이어서 PINN을 구현하는 것을 계속 실습 중이다.
이전 포스팅: https://jinsustory.tistory.com/312
궁극적으로 내가 하려고 하는 것은 PDE-foward & inverse problem (FP/IP)을 자유롭게 푸는 것이고,
ODE FP > ODE IP > PDE FP > PDE IP 순으로 해보려고 한다.
MATLAB에서는 위 네 가지를 모두 수치해석으로 풀어본 경험이 있기에,
이것을 Python & Deep learning technique을 통해서 다른 방식으로 구현해보고 새로운 가치를 발굴해보는 것을 의의로 삼는다.
2. DeepXDE
PINN을 구현하기 위해 PYTHON에서 제공하는 패키지이다.
링크: https://deepxde.readthedocs.io/en/latest/
PDE를 위해 필요한 여러 가지 모듈을 이미 만들어놓았다.
API구성을 보면 Data / Geometry / ICBC (Initial & boundary condition) / NN (nueral network) 등 여러 가지 구성 요소가 나름 직관적으로 공개되어있고, 각각의 샘플이 오픈되어 있다.
3. Simple ODE implmentation
- 포항공대 기계공학과의 인공지능을 연구하는 이승철 교수님의 연구실에서 DeepXDE 예제를 공개해 두어서 이를 기반으로 실습을 진행해보았다.
- 간단한 형태의 PDE/ODE 중 일반해를 구할 수 있는 간단한 문제를 만든다 (=test problem).
- PINN을 통해 간단한 문제를 풀어보고, analytical solution과 비교해본다.
참고) 이러한 logical flow는 흔히 수학과에서 수치해석분야에서 많이 쓰이는 방법이다.
정답이 있는 편미분 방정식의 대수식과 IC/BC를 정의하고 > 이를 n차 미분하여 이것을 해석해보는 과정을 통해
수치해석 알고리즘 / convergence / numerical method 등을 테스트하는 것과 같은 논리적인 흐름이다.
출처 유튜브 링크: https://www.youtube.com/watch?v=fZH-Ml2Fcmg&list=PLGMtjo8jDX9BuhD15T0WOE-loUhAwgFpZ&index=97
Step 1. 라이브러리 설치
deepxde 하나만 설치해주면 된다.
Step 2. 라이브러리 불러오기
텐서플로우 / deepxde / numpy는 기본적으로 불러오고,
그 외에 필요한 수학 연산자 및 결과 시각화를 위한 패키지도 불러온다.
Step 3-1. ODE system define
ode를 정의하기 위해 몇 가지 요소를 나누었다.
du_t = du / dt를 의마하고, righ-hand-side의 derivative를 먼저 define해준다.
참고) dde.grad.jacobian은 해당 패키지의 문법인데, 1차 미분을 뜻한다.
Step 3-2. IC 정의
ode기 때문에 IC만 정해주면된다.
참고) return 값으로 받는 결과가 boolean 형태인데, 이를 통해서 우리가 define해준 IC와 매우 가까운 조건들만 살아남도록 처리해주었다.
Step 3-3. Time span 정의
Time domain을 정해준다.
예제이기 때문에 true solution (= analyticla solution)이 있는 문제 였고, 그것을 입력할 수 있도록 문법이 구성되어 있다.
Step 4. 아키텍쳐 설계
문법은 크게 어렵지 않았다. 몇 가지 설정을 입력해주면 끝.
Step 5. Training
model.train이라는 함수를 불러와 해당 문법에 맞추어서 훈련을 시켜준다.
Epoch는 6000이었고, 값을 저장하지 말고 plot만 하도록 한 뒤에 그 결과를 확인해보도록 한다.
오늘은 ODE의 forward problem을 어떻게 구현하는지 확인하였다.
다음에는 PDE의 forward problem을 적용해보기로 한다!
오늘의 일기 끝.
'AI STUDY > Python' 카테고리의 다른 글
[Python] 22.08.27 딥러닝 실습 (2탄: PINN) (0) | 2022.08.27 |
---|---|
[Python] 22.08.20 딥러닝 실습 (1탄: AutoKeras) (0) | 2022.08.21 |
[Python] 22.08.15 딥러닝을 위한 텐서플로우/GPU 세팅 (CUDA, cuDNN) (0) | 2022.08.15 |
[Python] 22.06.05 최적화 패키지 실습 (1탄) (2) | 2022.06.05 |
[Python] 21.12.11 Pycaret 패키지 실습 (2탄) (0) | 2021.12.11 |
- Total
- Today
- Yesterday
- 한동일
- 박사일기
- 공학박사
- 포닥 2년차
- 해외포닥
- 해외 포닥
- 주간리포트
- 박사 후 연구원
- Jinsustory
- 포닥 이후 진로
- 공학 박사
- 포닥 임용
- 독후감
- 연구 일기
- 행잉플랜트
- 틸란드시아
- 논문 일기
- 라틴어 수업
- 대학원생
- 박사 일기
- 미국 포닥
- 공학박사 일기장
- 공학 박사 일기장
- 박사과정
- 식물일기
- 라틴어수업
- 포닥 일기
- 미국 박사 후 연구원
- LCA 분석
- 국내 포닥
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |