더북(TheBook)

3.5.4 엔드-투-엔드 예제: 텐서플로 선형 분류기

텐서, 변수, 텐서 연산을 알고 그레이디언트를 계산하는 방법을 알았습니다. 이제 경사 하강법 기반의 어떤 머신 러닝 모델도 만들 수 있는 지식이 충분합니다. 이제 겨우 3장인데 말입니다!

머신 러닝 구직 인터뷰에서 텐서플로로 밑바닥부터 선형 분류기를 구현해 보라는 요청을 받을지 모릅니다. 최소한의 머신 러닝 지식을 가진 사람과 그렇지 않은 지원자를 구별하기 위한 아주 간단한 작업입니다. 이런 인터뷰를 통과하고 텐서플로에 대해 새로 알게 된 지식을 사용해 보기 위해 선형 분류기를 구현해 보겠습니다.

먼저 선형적으로 잘 구분되는 합성 데이터를 만들어 보죠. 2D 평면의 포인트로 2개의 클래스를 가집니다. 특정한 평균과 공분산 행렬(covariance matrix)을 가진 랜덤한 분포에서 좌표 값을 뽑아 각 클래스의 포인트를 생성하겠습니다. 직관적으로 생각하면 공분산 행렬은 포인트 클라우드(cloud)의 형태를 결정하고, 평균은 평면에서의 위치를 나타낸다고 볼 수 있습니다(그림 3-6). 두 포인트 클라우드에 동일한 공분산 행렬을 사용하지만 평균은 다른 값을 사용하겠습니다. 즉, 두 포인트 클라우드는 같은 모양을 띠지만 다른 위치에 있을 것입니다.

코드 3-13 2D 평면에 두 클래스의 랜덤한 포인트 생성하기

num_samples_per_class = 1000 
negative_samples = np.random.multivariate_normal(  
    mean=[0, 3],                                    
    cov=[[1, 0.5],[0.5, 1]],                      
    size=num_samples_per_class) 
positive_samples = np.random.multivariate_normal( 
    mean=[3, 0],                                  
    cov=[[1, 0.5],[0.5, 1]],
    size=num_samples_per_class) 

첫 번째 클래스의 포인트를 생성합니다: 100개의 랜덤한 2D 포인트. cov=[[1, 0.5],[0.5, 1]]은 왼쪽 아래에서 오른쪽 위로 향하는 타원형의 포인트 클라우드에 해당합니다.

동일한 공분산 행렬과 다른 평균을 사용하여 다른 클래스의 포인트를 생성합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.