기계 학습 접근 방식으로 Fizz Buzz 문제의 출력 예측 및 생성 깊은 FizzBuzzNet.
이슬람의 al-fatihah와 같이 FizzBuzzProblem에 익숙할 수도 있습니다. fizzbuzz 문제는 소프트웨어 엔지니어인 경우 구직 세계에서도 필수입니다. 일반적으로 범위(n)에서 루프 i를 만들라는 요청을 받습니다.
파이썬으로 구현했습니다.
def fizzbuzz(number: int) -> str:
if number % 15 == 0:
return "fizzbuzz"
elif number % 3 == 0:
return "fizz"
elif number % 5 == 0:
return "buzz"
return str(number)
assert fizzbuzz(1) == "1"
assert fizzbuzz(3) == "fizz"
assert fizzbuzz(5) == "buzz"
assert fizzbuzz(15) == "fizzbuzz"
이 문제를 해결하는 방법에는 여러 가지가 있습니다. 소프트웨어 엔지니어라면 수동으로 인쇄하는 것은 확실히 금지되어 있습니다. 루프 + 조건을 사용할 때까지. 하지만 정말 멋지다고 생각하는 접근 방식이 있습니다. 바로 머신 러닝 접근 방식입니다.
그래서 다른 딥 러닝 라이브러리인 Pytorch를 사용하여 빌드하기로 결정했습니다.
데이터 세트 생성
내가하고 싶은 첫 번째 단계는 인코딩 된 숫자의 출력 목록을 이진수로 생성하는 두 개의 매개 변수 i와 숫자를 받아들이는 함수를 작성하여 데이터 세트를 생성하는 것입니다.
def binary_encode(i: int, num_digits: int) -> List[int]:
return np.array([i >> d & 1 for d in range(num_digits)])
이 기능을 10번 테스트하겠습니다.
다음으로 fizzbuzz 출력을 인코딩할 것입니다. 수행할 출력에 따라 다릅니다.
def fizz_buzz_encode(i: int) -> int:
if i % 15 == 0: return 3
elif i % 5 == 0: return 2
elif i % 3 == 0: return 1
else: return 0
def fizz_buzz(i: int, prediction: int) -> str:
return [str(i), "fizz", "buzz", "fizzbuzz"][prediction]
데이터 세트를 교육 및 테스트로 분할
X = np.array([binary_encode(i, NUM_DIGITS) for i in range(101, 2 ** NUM_DIGITS)])
y = np.array([fizz_buzz_encode(i) for i in range(101, 2 ** NUM_DIGITS)])
X_train = X[100:]
y_train = y[100:]
X_test= X[:100]
y_test= y[:100]
분할된 데이터 세트의 크기는 다음과 같습니다.
모델링
하이퍼파타미터 튜닝을 할 수 있기 때문에 이것은 저에게 가장 흥미로운 프로세스였습니다. 코드는 다음과 같습니다.
class FizzBuzz(nn.Module):
def __init__(self) -> None:
super().__init__()
self.first = nn.Linear(10, 100)
self.relu = nn.ReLU()
self.bactnorm1d = nn.BatchNorm1d(100)
self.output = nn.Linear(100, 4)
def forward(self, x: torch.Tensor) -> torch.Tensor:
a = self.first(x)
relu = self.relu(a)
batcnorm = self.bactnorm1d(relu)
return self.output(batcnorm)
교차 엔트로피 손실을 내 기준으로 선택하고 Adam을 옵티마이저로 선택했으며 학습률은 1-e3입니다.
훈련 과정이 끝나면 이것은 내 마지막 에포크의 손실입니다. 나는 1000 에포크 베이를 설정했습니다.
검증 손실: tensor(0.5942, grad_fn=) 훈련 손실: tensor(0.3454, grad_fn=)
테스트
이것은 꽤 좋았습니다. 기계 학습 모델은 100개의 테스트 데이터에 대해 제대로 작동하지 않았습니다.
전체 코드 사용
참조:
Jeol Gruss's Blog
Blog
Reference
이 문제에 관하여(기계 학습 접근 방식으로 Fizz Buzz 문제의 출력 예측 및 생성 깊은 FizzBuzzNet.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ramareksotinoyo/predict-generate-output-from-fizz-buzz-problem-with-machine-learning-approach-deep-fizzbuzznet-1c48텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)