일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Numerical Analysis
- Linear algebra
- 생산성
- 논문작성
- MATLAB
- Julia
- matplotlib
- 딥러닝
- WOX
- teps
- 논문작성법
- LaTeX
- 옵시디언
- 텝스
- Python
- 인공지능
- 수식삽입
- Zotero
- ChatGPT
- Statics
- Dear abby
- IEEE
- 수치해석
- obsidian
- 에러기록
- 텝스공부
- pytorch
- 고체역학
- JAX
- 우분투
- Today
- Total
목록프로그래밍 Programming/파이썬 Python (32)
뛰는 놈 위에 나는 공대생
output에 대한 input의 gradient를 구하는 방법은 여러가지인데 input tensor에 대해 requires_grad는 반드시 True로 지정해야 한다. 그래야 gradient 추적이 가능하다. 그 다음에는 두 가지 방법으로 나뉜다. 1. backward()를 이용하고 (input tensor).grad를 통해 가져오는 방법 2. torch.autograd.grad를 이용해서 직접 계산하는 방법 1번이 전형적으로 gradient를 구하는 방법이지만 나는 얻어낸 gradient에 대하여 graph를 연장해야했다. 그러려면 1번 방법으로는 충분하지 않다. 그래서 2번을 해야하는데 multioutput일 때는 gradient에 대한 이해도가 좀 더 요구되는 편이다. 1번 방법. backward(..
matplotlib을 쓰다가 갑자기 figure는 그려지는데 plot은 없는 상황이 있었다. 다른 코드를 돌릴 때는 문제가 없어서 찾아보았다. 결론적으로는 matplotlib의 문제가 아니었고 data_x와 data_y가 shape이 (1,N)인 2차원 numpy array였는데 matplotlib에서는 이를 자동으로 squeeze하지 않고 그래프를 그려서 그런 것이었다. 따라서 np.squeeze(data_x)와 같이 차원을 1차원으로 바꿔주면 해결되었다. 라이브러리 문제 자체가 아닌 데이터의 문제였다.
평소에 아나콘다 가상환경을 열고 그 안에서 주피터 노트북을 썼는데 다른 사람들의 코드를 돌리기 위해 visual studio code를 사용하기로 했다. 이전 글에서는 python이 컴파일되도록 하는 과정을 거쳤다면 이번에는 내가 만든 아나콘다 가상환경으로 코드를 컴파일하는 것이다. 여기서 다음 내용을 전제로 설명한다. 1. 아나콘다를 사용하면서 여기에서 가상환경을 만들었다. 2. 파이썬 자체는 컴파일이 되도록 만들었다. 1. 아나콘타 가상환경을 인터프리터로 설정하기 인터넷에서 검색을 하면 아나콘다 가상환경을 어떻게 쓰는지 친절하게 알려주지만 여기서도 간단하게 이야기하면 ctrl + shift + P를 눌러서 다음 창을 보면 Python: Select Interpreter가 뜬다. 저걸 클릭하면 인터프리..
Matplotlib은 figure를 도출하기 위해 중요한 라이브러리이다. 이 figure를 파일로 저장하기 위해서는 savefig라는 함수를 쓰는데 이 함수에서 설정할 수 있는 것들에 대해 이야기하려고 한다. 1. savefig의 argument savefig(fname, *, dpi='figure', format=None, metadata=None, bbox_inches=None, pad_inches=0.1, facecolor='auto', edgecolor='auto', backend=None, **kwargs ) 위의 savefig argument에서 fname은 저장할 파일이름이다. 여기에서 확장자를 지정하지 않으면 default로 png 파일로 저장한다. format에서도 확장자를 지정할 수 있..
딥러닝 후에 visualization할 때 일일이 세팅을 정해줘야해서 번거롭다. 그래서 default setting을 위한 코드들을 미리 작성하고 필요할 때마다 복사해서 사용하고자 한다. 좋은 코드를 발견하면 계속 추가할 예정이다. 1. Grid setting import matplotlib as mpl # grid setting mpl.rcParams['grid.color'] = '#808080' mpl.rcParams['grid.linestyle'] = '--' mpl.rcParams['grid.linewidth'] = 0.5 mpl.rcParams.update({"axes.grid" : True}) 위의 세 줄은 색상, line style, linewidth에 대한 설정이다. 색상은 v.2.0에 적..
코드 상에서 특정 변수를 따로 gradient descent 방법으로 업데이트해야할 일이 있는데 이상하게 에러가 났다. 그래서 쉬운 예제를 통해서 이해를 해보고자 했다. a = torch.linspace(0., 2. * math.pi, steps=25, requires_grad=True) b = torch.sin(a) c = 2 * b d = c + 1 out = d.sum() out.backward(retain_graph=True) gradient = a.grad.clone().detach() a -= 0.001 * gradient print(a.requires_grad) 이렇게 코드를 짜면 RuntimeError: a leaf Variable that requires grad is being used..
PyTorch에서 dataloader 기능 중에 shuffle을 사용하고자했는데 다음과 같은 에러를 봤다. RuntimeError: Expected a 'cuda' device type for generator but found 'cpu' 참고로 나는 내가 만든 custom dataset을 class로 만들고, 그 클래스에 대하여 DataLoader를 만들었다. 인터넷을 검색하여 찾아보니 이 shuffle 기능을 위해 사용하는 generator가 cpu로 설정되어 있으면 그 device에서 generator를 생성하는 것으로 보였다. 나는 custom dataset에서 모두 데이터의 device를 cuda로 설정하는 작업을 거치기 때문에 오류가 생긴 것이다. 이 글에서 보면 generator를 설정할 수..
Tensorflow와 달리 PyTorch는 사용하는 텐서를 따로 gpu에 올려주는 작업을 해야한다. 그러나 PyTorch는 기본적으로는 cpu를 사용한다. 그러나 딥러닝 관련 연구나 프로젝트를 수행하려는 사람들은 gpu를 가진 경우가 많을 것이다. 따라서 웬만하면 gpu를 사용하는 것이 더 좋으므로 gpu를 default로 설정하는 게 낫다. 또한 나의 경우에는 메모리를 좀 더 차지하더라도 정밀하게 계산했으면 좋겠어서 double형 (또는 float64형)을 기본적으로 사용하고 싶었다. 이 글에서 다루는 내용은 다음과 같다. 1. Tensor를 gpu에서 사용하도록 하는 방법 2. Default 설정을 바꿔서 gpu를 쓰도록 지정하는 방법 1. Tensor를 gpu에서 사용하도록 하는 방법 tensor를..
PyTorch에서 텐서끼리의 곱이 나와있는데 그 규칙을 알기 위해 이것저것 해본 것을 기록한 글이다. 여기서는 PyTorch의 matmul만 다룬다. https://pytorch.org/docs/stable/generated/torch.matmul.html?highlight=matmul#torch.matmul torch.matmul — PyTorch 1.12 documentation Shortcuts pytorch.org 다음 글을 보면 1차원 텐서(벡터)나 2차원 텐서(행렬) 곱은 이해하기 어렵지 않다. 맨 마지막 항목에 주목해야한다. 맨 마지막 항목이 두 텐서 중 하나는 1차원 이상, 다른 하나는 N(>3)차원 이상일 때의 곱을 나타낸 것이다. 여기서 미리 알아야할 것 :: Tensor에서 첫 번째 ..
이미지 분류기를 테스트하는 과정에서 matplotlib을 쓰면 커널이 자꾸 죽는 현상이 발견되었다. 아나콘다 프롬프트를 보면 다음과 같은 에러를 확인하였고, 아래의 참고 링크를 통해서 문제를 해결했다. [I 19:30:40.558 NotebookApp] Kernel started: d0c3b529-6a30-422b-a296-d963b18e4149, name: python3 OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized. OMP: Hint This means that multiple copies of the OpenMP runtime have been linked into the program..