AI 정리
AI에 들어가기 전 파이썬 개념 실습
dawon-project
2025. 4. 2. 02:24
컨테이너 타입 변수에 주의 : 파이썬에서 변수는 단지 실제 데이터 구조로 향하는 포인터에 지나지 않는다. 넘파이 배열 등에서는 이 점을 의식하지 않으면 생각지도 못한 결과를 초래하는 경우가 있다.
-> NumPy 배열은 모든 요소가 동일한 데이터 타입과 차원을 가져야한다.
<텐서와 넘파이 변수 간 변환>
- numpy() 함수를 통한 변환 ( 텐서 변수 -> 넘파이 변수)
- from_numpy(numpy 데이터값들) 함수를 통한 변환 ( 넘파이 변수 -> 텐서 변수)
- tensor(numpy 데이터 값들) 함수를 통한 변환 ( 넘파이 변수 -> 텐서 변수)
-> tensor와 numpy에서 또한 얕은 복사할 시에 값이 둘다 바뀐다.
numpy -> torch로 변환할때는 tensor()를 사용하면 torch는 변환할때 라이브러리 자체가 깊은 복사를 하기 때문에 영향을 주지 않는다.
하지만 from_numpy()를 사용하면 메모리를 공유한다.
Numpy의 헷갈릴만한 인덱싱
<numpy class 속성>
- shape
- ndim
- size
- dtype
Numpy를 이용한 특별한 행렬
행렬 변환
-> Squeeze 함수는 차원 중에 크기가 1인 것만 제거해준다.
numpy 자료형
배열 객체 연결과 연산 + 랜덤 함수 -> ~ 방향으로 쌓기와 행/열 개수가 늘어나는 것의 말 차이( 헷갈리지 말자)
**축을 따라 연산한다는 것은 해당 축이 "사라지는 방향"을 의미
0 : 행 / 1 : 열
즉, axis=0을 주면 행들이 사라지고 열 단위로 연산이 일어남.
반대로 axis=1을 주면 열들이 사라지고 행 단위로 연산이 일어남.
- 정규 분포 : 데이터가 평균을 중심으로 좌우 대칭을 이루며 종 모양을 그리는 확률 분포
- 표준 정규 분포 : 모든 정규 분포를 표준화(Z-score 변환)한 것 / 평균 = 0 / 표준편차 =1 로 고정
- np.random.rand() : 0 ~ 1 사이의 균일한 분포를 따르는 난수 생성
- np.random.randint(low, high, size) : low ~ high 미만의 정수 난수 생성
- np.random.randn() : 표준 정규 분표(평균 =0, 분산 =1)를 따르는 난수 생성
- np.random.normal(loc(평균), scale(표준편차), size(크기)) : 정규분포(가우시안 분포)를 따르는 난수 생성
- np.random.seed(value) : 랜덤 시드 설정 (항상 같은 랜덤값이 나오도록 설정)
<matplotlib.pyplot 설정>
- plt.xlim : x축의 범위를 제한하는 함수
- plt.ylim : y축의 범위를 제한하는 함수
- add_patch : 도형을 현재 Axes에 추가해주는 함수
- plt.legend() : label을 보이도록하는 함수
- ax.axis('off') : 눈금 비활성화
- ax.set_xticks([]) : x 눈금 범위를 정할 수 있는 함수
- ax.set_ysticks([]) : y눈금 범위를 정할 수 있는 함수
- plt.tight_layout() : 여러 개의 서브플롯을 만들면, 그래프들이 서로 겹치거나 라벨이 잘릴 수 있는데, 이때 plt.tight_layout()을 호출하면 자동으로 여백을 조정해서 보기 좋게 배치해주는 역할을 함
< 함수를 인스턴스로 사용하는 방법 >
- __call__ : 파이썬 내부에 매직메서드로 선언된 call 함수를 통해서 해당 클래스를 불렀을때 함수 내부의 내용을 실행할 수 있도록 해주는 함수
- forward() : nn.Module 을 상속해서 순전파 연산을 할때 자동으로 호출하게 되는 함수
-> 그때 nn.Module 내부에는 __call__함수가 정의 되어있으며 이 함수에서 forward 함수를 호출한다.
Tensor 자료형
- torch.rand() : 0 ~ 1 사이의 균일한 분포를 따르는 난수 생성
- torch.randint(mean, std, size) : low ~ high 미만의 정수 난수 생성
- torch.randn() : 표준 정규 분표(평균 =0, 분산 =1)를 따르는 난수 생성
- torch.normal(loc(평균), scale(표준편차), size(크기)) : 정규분포(가우시안 분포)를 따르는 난수 생성
- torch.manual_seed(value) : 랜덤 시드 설정 (항상 같은 랜덤값이 나오도록 설정)
-> numpy에서는 np.random.seed(value)이다 ****주의***
torch의 dimention 변경 함수 - view, squeeze, unsqueeze, reshape
tensor 배열 생성 함수
tensor arange : 끝 값을 포함하지 않음
tensor linespace(inclusive,exclusive) : 끝 값을 포함
그 밖의 tensor 속성
- 텐서 전체에서 최댓값 찾기 → torch.max(tensor)
- torch.max(tensor, dim) : 텐서의 특정 차원에서 최댓값과 그 위치 찾기
- 텐서의 특정 차원에서 최댓값과 그 위치 찾기 → torch.max(tensor, dim)