일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- Julia
- obsidian
- teps
- 인공지능
- 수치해석
- 수식삽입
- 논문작성
- WOX
- 에러기록
- pytorch
- Dear abby
- 옵시디언
- 논문작성법
- 텝스
- 텝스공부
- Linear algebra
- 딥러닝
- Numerical Analysis
- matplotlib
- MATLAB
- Statics
- LaTeX
- JAX
- IEEE
- 고체역학
- ChatGPT
- Zotero
- Python
- 생산성
- 우분투
- Today
- Total
목록연구 Research/인공지능 Artificial Intelligent (39)
뛰는 놈 위에 나는 공대생
가장 simple하게 신경망을 구성하는 방법에 대해서 저장해놓은 글이다.차츰 업데이트 할 예정 1. 기본 학습 코드import jaximport jax.numpy as jnpfrom jax import grad, jit, vmapfrom jax import random# Define a simple neural network modeldef init_params(layer_sizes, key): params = [] for i in range(1, len(layer_sizes)): key, subkey = random.split(key) w = random.normal(subkey, (layer_sizes[i-1], layer_sizes[i])) b = j..
본 글에서는 JAX로 미분값을 구하는 방법에 대해서 다룬다. JAX에서는 미분값을 구하기 위해 grad, jacfwd, jacrev를 제공하기 때문에 몇 가지 예제를 통해서 익숙해지고자 한다. 일단 크게 scalar-valued function과 vector-valued function으로 나누고, 각 function이 한 개의 변수에만 의존하는지, 또는 두 개 이상의 변수에만 의존하는지를 따진다. 예제코드는 유튜브 튜토리얼 + JAX 매뉴얼을 참고하였다. 1. Scalar-valued function일 때 Gradient는 scalar-valued univariate function에 대한 기울기 Jacobian은 vector-valued or scalar-valued multivariate funct..
현재 기준(230318)으로 cholesky decomposition을 사용할 때 행렬 크기가 50정도 넘어가면 nan을 출력하는 오류가 있다. jnp.linalg.cholesky(K) jax.random.multivariate_normal(subkeys[0], np.zeros((N_samples,)), K) 이 때문에 cholesky decomposition을 쓰는 다른 함수들도 영향을 받았는데 jax.random.multivariate_normal의 경우에도 랜덤하게 추출하는 과정에서 cholesky decomposition을 쓴다. cholesky decomposition은 어쩔 수 없을 것 같고 jax.random.multivariate_normal(subkeys[0], np.zeros((N_sa..
아직 jax가 한글화가 많이 안 되어있어서 기본적인 기능은 내가 적어놓으려고 한다. jax.vmap(fun, in_axes=0, out_axes=0, axis_name=None, axis_size=None, spmd_axis_name=None) function을 argument axes에 대해서 mapping해주는 기능. fun : mapping할 function in_axes : function에 들어가는 input을 의미한다. 정수, None, Python container(tuple/list/dict 모두 가능)을 지원한다. 이는 모두 mapping할 input array 축을 의미한다. 만약 fun의 argument가 array이면 in_axes에는 정수, None, 튜플(Integer, None..
Sampyl이라는 라이브러리를 사용하기 전에 간단한 예제가 있어서 posterior distribution과 sampler에 대한 tutorial을 좀 정리해보았다. $\begin{aligned} & Y \sim N\left(\mu, \sigma^2\right) \\ & \mu=\beta_0+\beta_1 x_1+\beta_2 x_2\end{aligned}$ 다음과 같이 $\beta$가 계수의 어떤 y와 x 간의 모델이 있다고 해보자. 이 문제에서는 $\beta=[2,1,4]$인 경우이다. 따라서 아래와 같이 $x_{0}=1, x_{1},x_{2}$에 대하여 $y$가 분포되어있다. # Number of data points N = 200 # True parameters sigma = 1 true_b = ..
코드 안에 네트워크가 2개가 있고 이 2개의 네트워크를 각각 다른 learning rate로 학습하고 싶을 때 사용하는 코드다. 아래와 같이 개별로 learning rate를 설정하면 net2 안에 있는 파라미터는 0.001로 학습되고 net1 안에 있는 파라미터는 0.01로 학습된다. optimizer = optim.Adam([ {'params': func.net1.parameters()}, {'params': func.net2.parameters(), 'lr': 0.001} ], lr=0.01) optimizer.param_groups[0]['capturable'] = True print(optimizer.param_groups[0]['lr']) print(optimizer.param_groups[1..
JAX는 아직 리눅스에서밖에 사용이 안된다. 그래서 윈도우에서 돌릴 수 있는 방법을 찾아보았는데 최신 버전은 불가능하고 예전 버전은 가능하다. JAX가 아직 초기이다보니 버전마다 많이 바뀌어서 불편한 점이 있지만 일단 시도한 경험을 공유한다. 아래 링크를 들어가면 대략적인 instruction을 알 수 있다. https://github.com/cloudhan/jax-windows-builder GitHub - cloudhan/jax-windows-builder: A community supported Windows build for jax. A community supported Windows build for jax. Contribute to cloudhan/jax-windows-builder deve..
pytorch 안에서 adam을 쓸 때 자꾸 위와 같은 에러가 떠서 이를 위해 optimizer = optim.Adam(func.parameters(), lr=args.lr) optimizer.param_groups[0]['capturable'] = True 다음과 같이 'capturable'을 true로 바꿔줘야했다. 그런데 다른 사람들의 라이브러리를 쓰다보면 optimizer가 라이브러리 안에 포함되어있어서 위와 같은 코드를 넣어주기 힘든 경우가 발생했다. 따라서 아래와 같이 가상환경 안에 있는 코드에 접근하여서 에러가 나는 부분을 주석처리해주었다. 이렇게 하는 이유는 실제로 위의 error가 코드 성능에 악영향을 미치지 않기 때문이다. params 및 state_steps이 CUDA tensor일 ..
최근에 다시 CUDA와 cuDNN를 설치하면서 예전에 썼던 설치법과 조금 다른 부분이 있어서 여기에 소개한다. 예전에는 CUDA 버전에 따른 cuDNN 버전을 찾아야해서 번거로움이 있었는데 CUDA 11.6부터는 cuDNN이 통일된 것으로 보인다. 그래서 이제는 cuDNN 용 폴더를 하나 만들어서 그 파일 안에 보관하고, 이에 대한 경로를 추가하면 된다. (이전 글을 보면 cuDNN 파일을 CUDA 폴더 안에 복사하라고 얘기했었다.) 이 방법도 물론 통하지만 새로운 manual에서는 다르게 설명한다. 다음 링크에서 매뉴얼을 읽어본 바에 따르면 방법은 다음과 같다. 1) cuDNN 파일을 다운 cuDNN zip 파일에서 알집을 풀면 다음을 확인할 수 있다. 각각의 폴더에는 bin\cudnn~(어쩌구).dl..
RuntimeError: Trying to backward through the graph a second time (or directly access saved tensors after they have already been freed). Saved intermediate values of the graph are freed when you call .backward() or autograd.grad(). Specify retain_graph=True if you need to backward through the graph a second time or if you need to access saved tensors after calling backward. 위와 같은 에러는 한 번 모델에서 for..