njs03332 / ml_study

3 stars 0 forks source link

2021/11/30-2021/12/09 #12

Open njs03332 opened 2 years ago

njs03332 commented 2 years ago
njs03332 commented 2 years ago

3.6. 예제: 레스토랑 리뷰 감성 분류하기

3.6.3 Vocabulary, Vectorizer, DataLoader 클래스

91쪽.

참고자료: https://wikidocs.net/60036, https://tutorials.pytorch.kr/beginner/blitz/neural_networks_tutorial.html, https://pytorch.org/tutorials/recipes/recipes/what_is_state_dict.html

3.6.5 모델 훈련

givitallugot commented 2 years ago

@classmethod, @staticmethod

@classmethod - load_dataset_and_load_vectorizer: 새로운 객체 생성 시 @staticmethod - load_dataset_and_load_vectorizer: 객체 재사용 시

python의 3가지 method

  1. static method: 인스턴스화 하지 않고 메소드를 호출 할 수 있음. 독립적으로 사용되기 때문에 다른 속성에 액세스하거나 해당 클래스 내의 다른 메소드를 호출 할 수 없음.
  2. class method: 인스턴스화 하지 않고 메소드를 호출 할 수 있음. 다른 메소드 및 클래스 속성에 액세스 할 수 있는 기능에 의존하지만 인스턴스 속성은 없음.
  3. instance: 인스턴스화 했을때만 호출이 가능. self를 통해 해당 클래스의 모든 속성에 액세스 할 수 있음.

static method과 class method을 굳이 나누는 이유는?

cls, self 차이

메소드 타입의 차이. instance 매소드를 사용하면 self 키워드를 사용하고 class 매소드를 사용하면 cls 키워드를 사용 static 매소드는 속성에 접근할 수 없기 때문에 사용하는 키워드가 없음.

class Cs:

    @staticmethod
    def static_method():
        print("Static method")

    @classmethod
    def class_method(cls):
        print("Class method")

    def instance_method(self):
        print("Instance method")

i = Cs()
Cs.static_method()
Cs.class_method()
i.instance_method() 


Python Convention

_(언더스코어)와 __(더블언더스코어) 차이

class MyClass():
    def __init__(self):
        self._semiprivate = “Hello”
        self.__superprivate = “,, world!”
— 

from MyClass import *
mc = MyClass()
print(mc._semiprivate) # “Hello”
print(mc.__superprivate) # Error


BatchNormalization 추가

테스트 손실: 1.8788902064164479 (기존 1.818398882945379) 테스트 정확도: 72.13541666666667 (기존 56.77083333333333)

        self.convnet = nn.Sequential(
            nn.Conv1d(in_channels=initial_num_channels, 
                      out_channels=num_channels, kernel_size=3),
            nn.BatchNorm1d(num_channels), # 추가
            nn.ELU(),
            nn.Conv1d(in_channels=num_channels, out_channels=num_channels, 
                      kernel_size=3, stride=2),
            nn.BatchNorm1d(num_channels), # 추가
            nn.ELU(),
            nn.Conv1d(in_channels=num_channels, out_channels=num_channels, 
                      kernel_size=3, stride=2),
            nn.BatchNorm1d(num_channels), # 추가
            nn.ELU(),
            nn.Conv1d(in_channels=num_channels, out_channels=num_channels, 
                      kernel_size=3),
            nn.BatchNorm1d(num_channels), # 추가
            nn.ELU()
        )
        self.fc = nn.Linear(num_channels, num_classes)


ELU

https://excelsior-cjh.tistory.com/177

Channel (Conv1d)

{'@': 0, 'T': 1, 'o': 2, 't': 3, 'a': 4, 'h': 5, 'A': 6, 'b': 7, 'u': 8, 'd': 9, 'F': 10, 'k': 11, 'r': 12, 'y': 13, 'S': 14, 'e': 15, 'g': 16, 'C': 17, 'm': 18, 'H': 19, 'i': 20, 'K': 21, 'n': 22, 'W': 23, 's': 24, 'f': 25, 'G': 26, 'M': 27, 'l': 28, 'B': 29, 'z': 30, 'N': 31, 'I': 32, 'w': 33, 'D': 34, 'Q': 35, 'j': 36, 'E': 37, 'R': 38, 'Z': 39, 'c': 40, 'Y': 41, 'J': 42, 'L': 43, 'O': 44, '-': 45, 'P': 46, 'X': 47, 'p': 48, ':': 49, 'v': 50, 'U': 51, '1': 52, 'V': 53, 'x': 54, 'q': 55, 'é': 56, 'É': 57, "'": 58, 'ß': 59, 'ö': 60, 'ä': 61, 'ü': 62, 'ú': 63, 'à': 64, 'ò': 65, 'è': 66, 'ó': 67, 'Ś': 68, 'ą': 69, 'ń': 70, 'á': 71, 'ż': 72, 'õ': 73, 'í': 74, 'ñ': 75, 'Á': 76} input channel 77 num channel 256 ???

danbi5228 commented 2 years ago

string.punctuation

string.punctuation; 구두점 모음 string

# command
print(string.punctuation, '\ntype: ', type(string.punctuation))

# output
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ 
type:  <class 'str'>

unpacking **

dict_ = {'a': 1, 'b': 2}

def function_return_json(d):
    return function_print(**d)

def function_print(a, b):
    print(a, b)

function_return_json(dict_)

# output
1 2

질문