deffizz_buzz_encode(i):if i %15==0:return3elif i %5==0:return2elif i %3==0:return1else:return0deffizz_buzz_decode(i, prediction):return[str(i),'fizz','buzz','fizzbuzz'][prediction]defhelper(i):return(fizz_buzz_decode(i, fizz_buzz_encode(i)))for i inrange(1,16):print(helper(i), end =' ')
2 定义模型的输入与输出
import numpy as np
import torch
NUM_DIGITS =10# 将数字转换成10位二进制表示defbinary_encode(i, num_digits):# 原理:将i的二进制形式的第d位与1做与操作,并将结果依次放入数组中return np.array([i >> d &1for d inrange(num_digits)][::-1])
trX = torch.Tensor([binary_encode(i, NUM_DIGITS)for i inrange(101,2** NUM_DIGITS)])# 训练数据 923*10
trY = torch.LongTensor([fizz_buzz_encode(i)for i inrange(101,2** NUM_DIGITS)])# 标签值 923
3 用PyTorch定义模型
NUM_HIDDEN =100
model = torch.nn.Sequential(
torch.nn.Linear(NUM_DIGITS, NUM_HIDDEN),
torch.nn.ReLU(),
torch.nn.Linear(NUM_HIDDEN,4)# 返回四个logits,softmax只有我们获得一个概率分布)if torch.cuda.is_available():
model = model.cuda()