태그 보관물: Joel Grus

Fizz Buzz in TensorFlow

Data Science from Scratch‘ 의 저자 Joel Grus가 블로그에 fizz buzz 문제를 다루는 면접 상황에서 엉뚱하게 텐서플로우를 이용해 대답하는 가상의 취업준비생의 이야기를 올렸습니다. 아주 재미있네요 🙂


면접관: 어서오세요. 커피나 다른 거 뭐 드릴까요? 한숨 돌리고 하실래요?

나: 아닙니다. 오늘 커피를 너무 많이 먹었어요.

면접관: 네, 좋습니다. 화이트보드에 코드를 적어야 하는데 괜찮으시죠?

나: 네 전 그렇게만 코딩해 봤어요!

면접관:

나: 농담입니다.

면접관: 좋습니다. 피즈버즈에 대해선 들어 보셨나요?

나:

면접관: 들어본건가요? 아닌가요?

나: 질문하신 내용이 믿기지 않는 쪽입니다.

면접관: 좋아요, 1에서 100까지 숫자를 프린트하는데 3으로 나누어지는 수는 ‘fizz’ 라고 프린트하고 5로 나누어지는 수는 ‘buzz’라고 프린트하고 15로 나누어지는 수는 ‘fizzbuzz’라고 프린트하면 됩니다.

나: 그 문제 압니다.

면접관: 다행이군요. 이걸 제대로 할 수 없는 사람은 회사 업무도 잘 못하더군요.

나:

면접관: 여기 마커랑 지우개가 있어요.

나: [몇분간 생각]

면접관: 어떻게 시작할지 좀 도와드릴까요?

나: 아뇨, 아닙니다. 괜찮아요. 그럼 기본적인 임포트부터 시작하겠습니다.:

import numpy as np
import tensorflow as tf

면접관: 음, 피즈버즈 문제 알고 있는 거 맞죠?

나: 그럼요. 그래서 지금 모델에 대해 말하려구요. 제 생각엔 하나의 히든 레이어를 갖는 간단한 멀티 레이어 퍼셉트론(multi-layer-perceptron)이 어떨까합니다.

면접관: 퍼셉트론요?

나: 아니면 뉴럴 네트워크나 뭐라 불러도 상관은 없어요. 입력은 숫자고 출력은 숫자에 대한 정확한 ‘fizzbuzz’ 표현이 되죠. 특별히 각 입력을 활성화(activation) 벡터로 변경할 필요가 있어요. 간단한 방법은 이진값으로 바꾸는 거죠.

면접관: 이진값이요?

나: 네, 아시겠지만 0 또는 1 이요. 이렇게요:

def binary_encode(i, num_digits):
    return np.array([i >> d & 1 for d in range(num_digits)])

(역주: 이 코드는 숫자의 이진수 표현의 각 자리의 값을 num_digits 크기의 배열로 만듭니다. 즉 3 은 [1, 1, 0, 0, 0, …] 이 됩니다.)

면접관: [몇분동안 화이트보드를 응시한다]

계속 읽기