And Brain said,

[PyTorch] 얼렁뚱땅 파이토치 - [1] : 파이썬 기초 본문

IT/PyTorch

[PyTorch] 얼렁뚱땅 파이토치 - [1] : 파이썬 기초

The Man 2022. 10. 1. 00:54
반응형

 

   얼렁뚱땅 파이토치는 말보다 행동인, 이론보다 실전인 남자가 파이썬 지식이 전무한데도 불구하고 딥러닝을 배우고 싶어서, 나아가 ML개발자가 되기 위해 냅다 파이토치부터 들어가는 시리즈다. 무모한 객기일지 과감한 용기일지 ML 개발자가 되기 위한 나의 여정을 지켜봐주시길 바란다.

 

그럼 바로 시작하자.

 

 

일단 google colab으로 간다.

from google.colab import drive
drive.mount('/content/gdrive')
cd/content/gdrive/My Drive/deeplearning

 

워크스페이스가 될 deeplearning 폴더를 구글 드라이브에 만들었다.

 

앞서 다짜고짜 파이토치로 들어가겠다 당당하게 말했지만 이번 시간은 얕고 빠르게 파이썬을 짚고 넘어갈 것이다. 다음 시간부터 본격적으로 파이토치로 들어가보자.

 

 

numpy 라는 배열을 관리하는데 유용한 라이브러리를 import 시키고 array()로 배열을 만들고 sum() 함수를 실행시켜보자.

import numpy
arr=numpy.array([2,1,4,6])
numpy.sum(arr)

// 13

as를 사용하여 별칭을 줄 수 있다.

import numpy as np
arr=np.array([2,1,4,6])
np.sum(arr)

// 13

같은 결과가 나오는 것을 확인할 수 있다.

 

from을 사용하여 필요한 함수만 불러올 수 있다. {ex) from numpy import array, sum}

 

 

list, tuple, dict

 

앞으로 우리는 다량의 데이터를 가공 및 처리하는 법을 알아야 하므로 리스트, 튜플 딕셔너리에 대하여 짚고 넘어가자.

 

list1 =['Man','Love','princess',[3,5],7]
list1[0][0]+list1[1][0]

// 'ML'

리스트는 데이터를 묶을 수 있는 가장 쉬운 타입 중 하나다. list1[0][0] 는 'M'이 되고 list1[0][1] 은 'a'가 될 것이다. 리스트는 서로 다른 타입을 담을 수 있다. 리스트 관련 함수로는 range(), sum(), sorted() , list.index(), len() 등등이 존재한다.

 

 

튜플은 리스트와 마찬가지로 데이터를 묶는 역할을 하지만 리스트와 가장 큰 차이는 한 번 정의된 튜플은 수정이 불가능하다는 것이다.

 

튜플은 ()를 이용하여 묶는다.

tuple1=(3,5)
print(tuple1,type(tuple1))

// (3,5) <class 'tuple'>

리스트와 동일하게 연산을 사용할 수 있으며, 다양한 타입을 포함할 수 있다.

 

 

딕셔너리는 키(key)와 값(value)으로 대응되는 데이터 집합이다.

 

 

함수

 

함수는 def 다음 함수명을 적고 괄호 () 안에는 필요한 변수를 적는다.

 

import numpy as np
def sincos(x):
  return np.sin(x)+np.cos(x)
sincos([1,2])

// array([1.38177329, 0.49315059])

 

 

클래스

 

클래스 내부에 외부 변수를 불러올 때는 __init__ 함수를 사용하고 괄호 안에 self를 반드시 넣어주고 추가적으로 원하는 변수들을 나열한다.

 

클래스 내부의 함수에는 self를 반드시 기입한다. 또한 변수에도 self를 붙여 선언할 수 있으며, self를 붙인 변수는 클래스 내부의 함수들에서 별도의 선언 없이 자유롭게 사용이 가능하다.

import numpy as np

class DataPreprocessing:
  def __init__(self,data,target):
    self.data=data
    self.target=target
    self.num_instances=self.data.shape[0]
    self.num_features=self.data.shape[1]
  
  def minmax(self):
    for i in range(self.num_features):
      col=self.data[:,i]
      self.data[:,i]=(self.data[:,i]-np.min(col))/(np.max(col)-np.min(col))
    return self
  
  def normalization(self):
    for i in range(self.num_features):
      col=self.data[:,i]
      mu, sigma=np.mean(col),np.std(col)
      self.data[:,i]=(self.data[:,i]-mu)/sigma
    return self
  def scaler(self,scaling=None):
    if scaling == 'minmax':
      self.minmax()
    elif scaling == 'standard':
      self.normalization()
    else:
      pass
    return self.data

 

 

클래스의 상속

 

클래스는 상속을 통해 다른 클래스의 메서드를 모두 사용할 수 있다.

class DataPipeline(DataPreprocessing):
  def __init__(self,data):
    self.data=data
    self.num_features=self.data.shape[1]

pipe=DataPipeline(data)
data=pipe.scaler('minmax')

상속받고자 하는 하위 클래스명 괄호 안에 상속을 해 주는 클래스명을 기입한다. 여러 개의 클래스를 상속받고 싶은 경우 괄호 안에 , (comma)로 구분한다.

 

 

 

참고

 

딥러닝을 위한 파이토치 입문 - 딥러닝호형 저

 

 

 

This is the way.

 

반응형
Comments