더북(TheBook)

다음은 훈련 및 테스트 용도의 레코드 개수를 출력한 결과입니다.

1383
1383
345
345

데이터 준비가 끝났으므로, 모델의 네트워크를 생성합니다.

코드 2-10 모델의 네트워크 생성

class Model(nn.Module): ------ ①
    def __init__(self, embedding_size, output_size, layers, p=0.4): ------ ②
        super().__init__() ------ ③
        self.all_embeddings = nn.ModuleList([nn.Embedding(ni, nf) for ni, nf in embedding_size])
        self.embedding_dropout = nn.Dropout(p)

        all_layers = []
        num_categorical_cols = sum((nf for ni, nf in embedding_size))
        input_size = num_categorical_cols ------ 입력층의 크기를 찾기 위해 범주형 칼럼 개수를 input_size 변수에 저장

        for i in layers: ------ ④
            all_layers.append(nn.Linear(input_size, i))
            all_layers.append(nn.ReLU(inplace=True))
            all_layers.append(nn.BatchNorm1d(i))
            all_layers.append(nn.Dropout(p))
            input_size = i

        all_layers.append(nn.Linear(layers[-1], output_size))
        self.layers = nn.Sequential(*all_layers) ------ 신경망의 모든 계층이 순차적으로 실행되도록 모든 계층에 대한 목록(all_layers)을 nn.Sequential 클래스로 전달

    def forward(self, x_categorical): ------ ⑤
        embeddings = []
        for i,e in enumerate(self.all_embeddings):
            embeddings.append(e(x_categorical[:,i]))
        x = torch.cat(embeddings, 1) ------ 넘파이의 concatenate와 같지만 대상이 텐서가 됩니다.
        x = self.embedding_dropout(x)
        x = self.layers(x)
        return x
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.