[colab+python] 구글 코랩에서 .py 파일 가져오려면?

코딩/python|2020. 6. 27. 18:23

구글 코랩에서 .py 파일을 가져오려면 다음과 같은 코드를 입력해줘야 합니다. 가져오려는 파일의 이름은 file1.py라고 가정했습니다. 

 

1
2
3
4
from google.colab import files
src = list(files.upload().values())[0]
open('file1.py','wb').write(src)
import file1
cs

 

위 코드를 코랩에서 실행시켜보겠습니다.

 

 

그러면 파일 선택 버튼이 나오는데, 클릭해서 가져올 파일을 선택해줍니다. 

 

 

파일 가져오기가 완료되면 다음과 같은 내용이 출력됩니다. 

 

 

이제 file1.py 안에 있는 bskyvision이라는 이름의 함수를 호출해보겠습니다.

 

 

잘 호출된 것을 확인하실 수 있습니다.

 

 

<참고자료>

[1] https://www.it-swarm.dev/ko/ipython/google-colab%EC%97%90%EC%84%9C-py-%ED%8C%8C%EC%9D%BC-%EA%B0%80%EC%A0%B8-%EC%98%A4%EA%B8%B0/837742279/, it-swarm.dev, "Google Colab에서 .py 파일 가져 오기"

[python] numpy 배열을 파일로 저장하고 불러오기

코딩/python|2020. 6. 27. 14:14

예전에 훈련된 딥러닝 모델을 파일로 저장하고 불러오는 것에 대한 글을 작성한 적이 있습니다. 그와 유사하게 오늘은 numpy 배열을 파일로 저장하고 불러오는 것에 대해 다루도록 하겠습니다.

 

파이썬을 이용해서 열심히 어떠한 작업을 수행했습니다. 의미있는 결과들을 얻어서, 그 결과들을 numpy 배열에 담았다고 가정해봅시다. 그런데 만약 파이썬 프로그램을 종료시키면 이 결과들은 사라지고 말 것입니다. 따라서 저장해놓을 필요가 있습니다. 중요한 결과라면 더욱 더 그래야하겠고요. 

 

numpy 배열을 파일로 저장하고 싶을 때는 np.save()을 사용하시면 됩니다. 예시를 위해, 간단한 2x2 행렬을 담고 있는 넘파이 배열을 저장해보겠습니다. 

 

file1.py

1
2
3
4
5
6
7
8
import numpy as np
 
= np.array([[12], [34]])
 
print(x)
 
np.save('./saved_x', x)
 
cs

 

위 코드를 실행했더니 다음과 같은 화면이 출력되었고,

 

 

saved_x.npy라는 이름의 파일이 해당 디렉토리에 생성되었습니다. .npy라는 확장자가 낯설게 여겨지실 수 있지만, numpy 배열을 저장하고 있는 파일이구나 정도로만 생각하시고 넘어가시면 됩니다. 

 

 

이번에는 이 saved_x.npy에 담겨있는 numpy 배열을 다른 .py 파일(file2.py)에 불러오도록 하겠습니다. 불러오실 때는 np.load()를 사용하면 됩니다.

 

file2.py

1
2
3
4
5
6
import numpy as np
 
loaded_x = np.load('./saved_x.npy')
 
print(loaded_x)
 
cs

 

다음 코드를 실행했더니 저장되었던 2x2 행렬 x를 잘 불러왔습니다. 

 

 

 

bskyvision의 추천글 ☞

[Anaconda+python] 훈련시킨 딥러닝 모델 저장하고 불러오기

[python] 파이썬 버전 확인하는 코드

코딩/python|2020. 6. 26. 12:48

파이썬 버전을 체크하는 코드입니다. 단 두 줄의 코드면 충분합니다. 

 

import sys
print(sys.version)

 

제가 지금 사용하는 구글 코랩(colab)에 설치되어 있는 파이썬은 3.6.9 버전이군요. 

 

 

제 노트북에 깔아놓은 파이썬 IDLE(integrated develoment environment)은 몇 버전인지 확인해보겠습니다.

 

 

이건 3.7.3 버전이네요. 

 

또한 아나콘다(Anaconda)의 한 가상환경은 파이썬 3.7.7 버전을 사용하고 있음을 알 수 있습니다. 

 

 

태그 : 버전, 파이썬

[python] numpy 패키지 isnan 함수

코딩/python|2020. 6. 26. 09:55

오늘은 numpy 패키지의 isnan함수에 대해 다루도록 하겠습니다. isnan 함수는 데이터가 nan(not a number)인지 아닌지를 판별해주는 함수입니다. nan이면 True를, nan이 아니면 False를 반환합니다.

 

예시를 위해 저는 일부로 nan을 생성했습니다. 그런 다음에 np.isnan을 이용해서 nan인 것을 찾아냈습니다. 코드는 다음과 같습니다. 

 

 

numpy 행렬 c의 첫번째 요소가 nan이기 때문에 np.isnan 함수가 첫번째 요소에 대해 True라고 알려준 것을 확인하실 수 있습니다. 나머지에 대해서는 False라고 알려줬고요. 

 

태그 : isNaN, numpy, python

[선형대수학] 놈(norm)이란 무엇인가?

공부/선형대수학|2020. 6. 25. 18:52

오늘은 놈(norm)에 대해 설명을 드리고자 합니다. 놈은 노름으로 발음하기도 하는데 둘다 어감이 좀 그렇죠? 선형대수학에서 놈은 벡터의 크기(magnitude) 또는 길이(length)를 측정하는 방법을 의미합니다. 선형대수학이 낯선 분들이 처음에 헷갈려하시는 것이 있는데 차원(dimension)과 길이(length)는 분명히 다릅니다. 다음과 같은 벡터가 있다고 가정해보겠습니다.

 

$x = \begin{bmatrix}
1\\ 
1\\ 
1
\end{bmatrix}$

 

이 벡터의 차원은 3입니다. 길이가 3인 것이 아닙니다. 차원이 3이라는 것은 3차원 공간에 이 벡터를 그릴 수 있다는 것입니다.

 

 

벡터의 길이를 구하는 것은 바로 오늘 다룰 놈을 통해 할 수 있습니다. 놈에는 $L_1$ norm, $L_2$ norm, $L_\infty$ norm과 같이 다양한 종류가 있습니다. 하나씩 차근차근히 살펴보겠습니다. 

 

1. $L_1$ norm

벡터의 크기는 $L_1$ norm을 통해서 계산할 수 있습니다. $L_1$ norm은 맨해튼 놈(Manhattan norm) 또는 택시 놈(Taxicab norm)이라고 불려지기도 합니다. $L_1$ norm은 벡터의 모든 성분의 절대값을 더합니다. 만약에 다음과 같은 2차원 벡터가 있다면,

 

$x = \begin{bmatrix}
2\\ 
3
\end{bmatrix}$

 

이 벡터의 $L_1$ norm은 5이 됩니다. 

 

$ \left \| x \right \|_1 = \left | 2 \right | + \left | 3 \right | = 5 $

 

여기에 표기한 것처럼 $L_1$ norm은 $\left \| * \right \|_1$로 씁니다. 여기서 왜 택시 놈이라고 불리는지 한번 생각해봅시다. 원점(0, 0)에서 (2, 3)까지 택시를 타고 가려면 어떤 길로 가더라도 가장 빠르게 갈 수 있는 거리는 5입니다. $L_1$ norm은 이런 방식으로 길이를 측정하기 때문에 택시 놈이라고 불립니다.  

 

$L_1$ norm

 

2. $L_2$ norm

$L_2$ norm은 출발점에서 도착점까지의 거리를 직선거리로 측정합니다. $\left \| * \right \|_2$로 표현하고, 유클리드 놈(Euclidean norm)이라고 불리기도 합니다. $L_2$ norm은 다음과 같이 계산합니다. 

 

$ \left \| x \right \|_2 = \sqrt{(2)^2 + (3)^2} = \sqrt{13} $

 

우리에게 매우 익숙한 길이 계산 방법이죠? 

 

 

$L_2$ norm

 

3. $L_\infty$ norm

$L_\infty$ norm은 벡터 성분들의 절대값 중에서 가장 큰 값으로 계산되어집니다. 이 친구는 최대 놈(max norm)이라고 불리기도 합니다. 만약

 

$x = \begin{bmatrix}
4\\ 
-3\\ 
7
\end{bmatrix}$

 

라면, 

 

$\left \| x \right \|_\infty= 7$

 

이 되는 것이죠. 보시는 것처럼 $L_\infty$ norm은 $\left \| * \right \|_\infty$으로 표기합니다. 

 

(4. $L_0$ norm)

마지막으로 $L_0$ norm은 벡터의 성분 중에서 0이 아닌 것의 갯수로 계산합니다. 만약

 

$ x = \begin{bmatrix}-3\\0\\2\\0\end{bmatrix} $

 

이라면,

 

$\left \| x \right \|_0 = 2$

 

입니다.

 

하지만 $L_0$ norm 은 사실 놈이 아닙니다. 왜냐하면 놈이 되기 위한 기본 조건을 만족시키지 못하기 때문입니다. 놈이 되기 위한 기본 조건은 아래 세가지입니다.

 

1) $\left \| x \right \| \geq 0$이고, x = 0일 때만 $\left \| x \right \|=0$이다.

2) $\left \| ax \right \|=|a|\left \| x \right \|$

3) $\left \| x + y \right \| \leq \left \| x \right \| + \left \| y \right \|$

 

이 기본 조건을 만족시키지 못하는 반례를 하나 들어보겠습니다. 

 

$ x = \begin{bmatrix}
-2 \\ 
0 \\ 
2
\end{bmatrix}$

 

인 경우를 생각해보겠습니다. 이 벡터는 두번째 조건을 만족시키지 못합니다. 왜냐하면

 

$\left \| 2x \right \|_0 = 2$

 

이지만,

 

$2\left \| x \right \|_0 = 4$

 

이기 때문입니다. 

 

놈은 머신러닝에서도 중요하게 쓰이는 개념입니다. 선형대수학과 머신러닝은 정말 밀접한 관계를 갖고 있으니, 머신러닝을 공부하시는 분들은 꼭 선형대수학을 시간날때 공부하시기 바랍니다. 

 

 

bskyvision의 추천글 ☞

선형 회귀(linear regression) 그리고 라쏘(Lasso)

 

 

<참고자료>

[1] https://medium.com/@montjoile/l0-norm-l1-norm-l2-norm-l-infinity-norm-7a7d18a4f40c, Sara Iris Garcia, "L0 Norm, L1 Norm, N2 Norm & L-Infinity Norm"

[2] https://machinelearningmastery.com/vector-norms-machine-learning/, Jason Brownlee, "Gentle introduction to Vector Norms in Machine Learning"

[3] https://rorasa.wordpress.com/2012/05/13/l0-norm-l1-norm-l2-norm-l-infinity-norm/, Rorasa's blog, "l0-Norm, l1-Norm, l2-Norm, ... , l-infinity Norm"