본문 바로가기

728x90

분류 전체보기

(81)
Pandas Dataframe에서 One Hot Encoding을 Label Encoding으로 바꾸는 법 Dataframe에서 상황에 따라 one-hot encoding을 label encoding으로 변환해서 사용해야하는 경우가 있다. One hot encoding을 사용할 때는 get_dummies를 사용하면 쉽게 변환이 가능하다. 반대로 label encoding으로 변환하고 싶다면 다음과 같은 방식으로 손쉽게 변환이 가능하다! onehot_encoding_list = [...] # one_hot encoding으로 표현되어 있는 feature 이름 df['label_encoding'] = np.argmax(np.asarray(df[onehot_encoding_list]), axis=1)
[논문] HMSG : Heterogeneous Graph Neural network based on Metapath Subgraph Learning 본 글은 논문을 읽고 공부를 하는 과정에서 이해한 바를 번역 / 설명 해둔 글입니다. 혹시 동일 논문을 읽는 다른 분들께 도움이 되었으면 하여 정리해두나 잘못된 부분이나 부족한 부분이 있을 수 있습니다. 따라서 잘못된 부분 / 궁금한 부분이 있으면 언제든지 댓글 환영합니다.😄 최근 heterogeneous graph를 다루는 방법에 대해서 연구하면서 찾게 된 논문이다. 작년 하반기에 나온 매우 따끈따끈한 논문! 한 번 정리하면서 읽어보려 한다. heterogeneous graph와 homogeneous graph의 차이가 궁금하다면 이 글을 참고하길 바랍니다! HMSG: Heterogeneous Graph Neural Network based on Metapath Subgraph Learning Many..
[DGL] remove_edges로 그래프 내 특정 edge 제거하기 dgl.DGLGraph.remove_edges — DGL 0.8.0 documentation © Copyright 2018, DGL Team. Revision 58346042. docs.dgl.ai DGL 라이브러리를 사용하여 만든 그래프에서 특정 엣지를 제거하고 싶을 때는 remove_edges를 사용하면 된다! heterogeneous graph에서의 예시는 dgl 문서에 쉬운 예제로 잘 설명되어있다. >>> g = dgl.heterograph({ ... ('user', 'plays', 'game'): (torch.tensor([0, 1, 1, 2]), ... torch.tensor([0, 0, 1, 1])), ... ('developer', 'develops', 'game'): (torch.tens..
[DGL] RelGraphConv에서 IndexError: index out of range in self 문제! RelGraphConv layer로 계산을 하는 중 다음과 같은 에러를 만났다. IndexError: index out of range in self 도저히 왜 나는지 이해가 안가서 dgl 라이브러리의 코드를 직접 뜯어서 해당하는 위치에 코드를 확인해보았다. 에러가 나는 부분은 다음 위치였다. File ~/anaconda3/envs/dgl/lib/python3.8/site-packages/dgl/nn/pytorch/conv/relgraphconv.py:245, in RelGraphConv.basis_message_func(self, edges, etypes) --> 245 weight = weight.index_select(0, etypes) 246 msg = th.bmm(h.unsqueeze(1), w..
[DGL] heterogeneous graph를 homogeneous graph로 변환할 때 edata, ndata 함께 전달하기 heterogeneous graph를 homogeneous graph의 형태로 변환하는 과정에서 edata를 함께 전달해야하는 상황이었다! 우선 hetero -> homo의 경우 dgl에서 to_homogeneous 라는 라이브러리를 제공한다. dgl.to_homogeneous — DGL 0.9 documentation ndata (list[str], optional) – The node features to combine across all node types. For each feature feat in ndata, it concatenates G.nodes[T].data[feat] across all node types T. As a result, the feature feat of all node..
[Python] IndexError: tensors used as indices must be long, byte or bool tensors 문제 해결 subgraph를 추출하는 과정에서 만난 에러! 그래프 내 특정 타겟 노드에 대해서만 다음과 같은 에러가 발생하는 것을 확인할 수 있었다. IndexError: tensors used as indices must be long, byte or bool tensors tensor를 인덱스로 사용 시 반드시 long, byte, bool이어야 한다는 것. 코드를 확인해보니 특정한 경우에는 인덱스로 사용되는 tensor가 empty하여 이런 에러가 발생한 것을 확인할 수 있었다. 그렇다면 이런 경우는 따로 예외처리를 해야할까? 물론 예외처리를 할 수도 있지만 인덱스로 사용되는 tensor를 numpy 객체로 변환하여 사용하여 문제없이 사용가능하다!
[DGL] TypeError : default_collate 에러 (DGL.batch, collate_fn) 데이터셋을 만들고 dataloader로 넘겨주었는데 dataloader에서 값을 받는 중에 만난 에러! 내가 만들고자 한 것은 dgl 라이브러리의 heterogeneous graph 타입의 그래프를 반환해주는 dataset / dataloader 였다. dataset과 dataloader는 PyTorch 타입을 사용했는데 아래와 같은 에러를 만났다. TypeError: default_collate: batch must contain tensors, numpy arrays, numbers, dicts or lists; found 찾아보니 배치로 넘겨줄 때의 output 값은 꼭 tensors, numpy arrays, numbers, dicts, lists 중 하나여야 한다고.. 그래프 데이터를 넘겨주는 ..
[PyTorch] 모델 내 일부 레이어 freeze 하기 pretrained 모델을 가져와서 나의 데이터에 맞게 학습시킬 때 기존 모델의 전체적인 weight은 그대로 가져오고 classifier 역할을 하는 마지막 레이어만 내 데이터에 맞게 학습시키고 싶어졌다. 모델 내 레이어를 부분적으로 freeze 하기 위한 방법을 찾아보니 다음과 같이 모델의 파라미터를 불러와 requires_grad를 False로 두어 freeze하고 싶은 부분은 freeze하고, 가중치 업데이트를 하고 싶은 부분은 그대로 두면 된다! 나같은 경우는 모델의 마지막 레이어 'fc'만 학습을 시키고 싶어 아래와 같이 코드를 구성했다. for name, param in model.named_parameters(): if name.split('.')[1] == 'fc' : pass else ..

728x90