示例#1
0
def train(model,
          X_train,
          Y_train,
          optim,
          steps,
          BS=128,
          device=Device.CPU,
          lossfn=sparse_categorical_crossentropy):
    Tensor.training = True
    if device == Device.GPU: [x.gpu_() for x in get_parameters([model, optim])]
    elif device == Device.ANE:
        [x.ane_() for x in get_parameters([model, optim])]
    losses, accuracies = [], []
    for i in (t := trange(steps, disable=os.getenv('CI') is not None)):
        samp = np.random.randint(0, X_train.shape[0], size=(BS))

        x = Tensor(X_train[samp], device=device)
        y = Y_train[samp]

        # network
        out = model.forward(x)

        loss = lossfn(out, y)
        optim.zero_grad()
        loss.backward()
        optim.step()

        cat = np.argmax(out.cpu().data, axis=-1)
        accuracy = (cat == y).mean()

        # printing
        loss = loss.cpu().data
        losses.append(loss)
        accuracies.append(accuracy)
        t.set_description("loss %.2f accuracy %.2f" % (loss, accuracy))
示例#2
0
def step_tinygrad(optim, kwargs={}, device=Device.CPU):
    net = TinyNet()
    optim = optim([net.x, net.W], **kwargs)
    if device == Device.GPU: [x.gpu_() for x in get_parameters([net, optim])]
    elif device == Device.ANE: [x.ane_() for x in get_parameters([net, optim])]
    out = net.forward()
    out.backward()
    optim.step()
    return net.x.cpu().data, net.W.cpu().data
示例#3
0
 def parameters(self):
   if DEBUG: #keeping this for a moment
     pars = [par for par in get_parameters(self) if par.requires_grad]
     no_pars = 0
     for par in pars:
       print(par.shape)
       no_pars += np.prod(par.shape)
     print('no of parameters', no_pars)
     return pars
   else:
     return get_parameters(self)
示例#4
0
def train(model, optim, steps, BS=128, gpu=False):
    if gpu is True: [x.cuda_() for x in get_parameters([model, optim])]
    losses, accuracies = [], []
    for i in (t := trange(steps, disable=os.getenv('CI') is not None)):
        samp = np.random.randint(0, X_train.shape[0], size=(BS))

        x = Tensor(X_train[samp].reshape((-1, 28 * 28)).astype(np.float32),
                   gpu=gpu)
        Y = Y_train[samp]
        y = np.zeros((len(samp), 10), np.float32)
        # correct loss for NLL, torch NLL loss returns one per row
        y[range(y.shape[0]), Y] = -10.0
        y = Tensor(y, gpu=gpu)

        # network
        out = model.forward(x)

        # NLL loss function
        loss = out.mul(y).mean()
        optim.zero_grad()
        loss.backward()
        optim.step()

        cat = np.argmax(out.cpu().data, axis=1)
        accuracy = (cat == Y).mean()

        # printing
        loss = loss.cpu().data
        losses.append(loss)
        accuracies.append(accuracy)
        t.set_description("loss %.2f accuracy %.2f" % (loss, accuracy))
示例#5
0
def step_tinygrad(optim, kwargs={}, gpu=False):
  net = TinyNet()
  optim = optim([net.x, net.W], **kwargs)
  if gpu is True: [x.cuda_() for x in get_parameters([net, optim])]
  out = net.forward()
  out.backward()
  optim.step()
  return net.x.cpu().data, net.W.cpu().data
示例#6
0
 def load(self, filename):
   with open(filename+'.npy', 'rb') as f:
     for par in get_parameters(self): 
       #if par.requires_grad:
       try:
         par.cpu().data[:] = np.load(f)
         if GPU:
           par.cuda()
       except:
         print('Could not load parameter')
示例#7
0
def train(model,
          X_train,
          Y_train,
          optim,
          steps,
          num_classes=None,
          BS=128,
          device=Device.CPU,
          lossfn=lambda out, y: out.mul(y).mean()):
    if device == Device.GPU: [x.gpu_() for x in get_parameters([model, optim])]
    elif device == Device.ANE:
        [x.ane_() for x in get_parameters([model, optim])]
    if num_classes is None: num_classes = Y_train.max().astype(int) + 1
    losses, accuracies = [], []
    for i in (t := trange(steps, disable=os.getenv('CI') is not None)):
        samp = np.random.randint(0, X_train.shape[0], size=(BS))

        x = Tensor(X_train[samp].reshape((-1, 28 * 28)).astype(np.float32),
                   device=device)
        Y = Y_train[samp]
        y = np.zeros((len(samp), num_classes), np.float32)
        # correct loss for NLL, torch NLL loss returns one per row
        y[range(y.shape[0]), Y] = -1.0 * num_classes
        y = Tensor(y, device=device)

        # network
        out = model.forward(x)

        # NLL loss function
        loss = lossfn(out, y)
        optim.zero_grad()
        loss.backward()
        optim.step()

        cat = np.argmax(out.cpu().data, axis=1)
        accuracy = (cat == Y).mean()

        # printing
        loss = loss.cpu().data
        losses.append(loss)
        accuracies.append(accuracy)
        t.set_description("loss %.2f accuracy %.2f" % (loss, accuracy))
示例#8
0
def train_one_step(model,X,Y):
  params = get_parameters(model)
  pcount = 0
  for p in params:
    pcount += np.prod(p.shape)
  optimizer = optim.Adam(params, lr=0.001)
  print("stepping %r with %.1fM params bs %d" % (type(model), pcount/1e6, BS))
  st = time.time()
  train(model, X, Y, optimizer, steps=1, BS=BS)
  et = time.time()-st
  print("done in %.2f ms" % (et*1000.))
示例#9
0
 def parameters(self):
   return get_parameters(self)
示例#10
0
 def save(self, filename):
   with open(filename+'.npy', 'wb') as f:
     for par in get_parameters(self):
       #if par.requires_grad:
       np.save(f, par.cpu().data)
示例#11
0
  lossfn = lambda out,y: out.mul(y).mean() + lmbd*(model.weight1.abs() + model.weight2.abs()).sum()
  X_train, Y_train, X_test, Y_test = fetch_mnist()
  steps = len(X_train)//BS
  np.random.seed(1337)
  if QUICK:
    steps = 1
    X_test, Y_test = X_test[:BS], Y_test[:BS]
  
  model = BigConvNet()
 
  if len(sys.argv) > 1:
    try:
      model.load(sys.argv[1])
      print('Loaded weights "'+sys.argv[1]+'", evaluating...')
      evaluate(model, X_test, Y_test, BS=BS)
    except:
      print('could not load weights "'+sys.argv[1]+'".')
 
  if GPU:
    params = get_parameters(model)
    [x.cuda_() for x in params]

  for lr, epochs in zip(lrs, epochss):
    optimizer = optim.Adam(model.parameters(), lr=lr)
    for epoch in range(1,epochs+1):
      #first epoch without augmentation
      X_aug = X_train if epoch == 1 else augment_img(X_train)
      train(model, X_aug, Y_train, optimizer, steps=steps, lossfn=lossfn, gpu=GPU, BS=BS)
      accuracy = evaluate(model, X_test, Y_test, BS=BS)
      model.save('examples/checkpoint'+str("%.0f" % (accuracy*1.0e6)))
示例#12
0
    ds_X = ds[:, 0:6]
    ds_Y = np.copy(ds[:, 1:])
    ds_X_train, ds_X_test = ds_X[0:8000], ds_X[8000:]
    ds_Y_train, ds_Y_test = ds_Y[0:8000], ds_Y[8000:]

    return ds_X_train, ds_Y_train, ds_X_test, ds_Y_test


from tinygrad.optim import Adam
if __name__ == "__main__":
    model = Transformer(10, 6, 2, 128, 4)

    X_train, Y_train, X_test, Y_test = make_dataset()
    lr = 0.003
    for i in range(10):
        optim = Adam(get_parameters(model), lr=lr)
        train(model, X_train, Y_train, optim, 50, BS=64)
        acc, Y_test_preds = evaluate(model,
                                     X_test,
                                     Y_test,
                                     num_classes=10,
                                     return_predict=True)
        lr /= 1.2
        print(f'reducing lr to {lr:.4f}')
        if acc > 0.998:
            wrong = 0
            for k in range(len(Y_test_preds)):
                if (Y_test_preds[k] != Y_test[k]).any():
                    wrong += 1
                    a, b, c, x = X_test[k, :2], X_test[k, 2:4], Y_test[
                        k, -3:], Y_test_preds[k, -3:]
示例#13
0
    def forward(self, x):
        bs = x.shape[0]
        xnp = x.cpu().data
        onehot = np.zeros((bs, x.shape[1], self.maxlen + self.syms),
                          dtype=np.float32)
        for i in range(x.shape[1]):
            onehot[range(bs), i, i] = 1
            onehot[range(bs), i, self.maxlen + xnp[:, i]] = 1
        onehot = onehot.reshape(bs * x.shape[1], self.maxlen + self.syms)

        x = Tensor(onehot, device=x.device).dot(
            self.embed).reshape(shape=(bs, x.shape[1], -1))
        for t in self.tbs:
            x = t(x)
        x = x.reshape(shape=(-1, x.shape[-1])).dot(self.final).logsoftmax()
        return x.reshape(shape=(bs, -1, x.shape[-1]))


from tinygrad.optim import Adam
if __name__ == "__main__":
    model = Transformer(10, 6, 2, 128, 4)

    #in1 = Tensor.zeros(20, 6, 128)
    #ret = model.forward(in1)
    #print(ret.shape)

    X_train, Y_train, X_test, Y_test = make_dataset()
    optim = Adam(get_parameters(model), lr=0.001)
    train(model, X_train, Y_train, optim, 100)
示例#14
0
    # if you want to look at the outputs
    """
  import matplotlib.pyplot as plt
  plt.plot(out.data[0])
  plt.show()
  """
    return out, retimg


if __name__ == "__main__":
    # instantiate my net
    model = EfficientNet(int(os.getenv("NUM", "0")))
    model.load_weights_from_torch()
    if GPU:
        [x.gpu_() for x in get_parameters(model)]

    # category labels
    import ast
    lbls = fetch(
        "https://gist.githubusercontent.com/yrevar/942d3a0ac09ec9e5eb3a/raw/238f720ff059c1f82f368259d1ca4ffa5dd8f9f5/imagenet1000_clsidx_to_labels.txt"
    )
    lbls = ast.literal_eval(lbls.decode('utf-8'))

    # load image and preprocess
    from PIL import Image
    url = sys.argv[1]
    if url == 'webcam':
        import cv2
        cap = cv2.VideoCapture(0)
        cap.set(cv2.CAP_PROP_BUFFERSIZE, 1)
示例#15
0
    # if you want to look at the outputs
    """
  import matplotlib.pyplot as plt
  plt.plot(out.data[0])
  plt.show()
  """
    return out, retimg


if __name__ == "__main__":
    # instantiate my net
    model = EfficientNet(int(os.getenv("NUM", "0")))
    model.load_weights_from_torch()
    if GPU:
        [x.cuda_() for x in get_parameters(model)]

    # category labels
    import ast
    lbls = fetch(
        "https://gist.githubusercontent.com/yrevar/942d3a0ac09ec9e5eb3a/raw/238f720ff059c1f82f368259d1ca4ffa5dd8f9f5/imagenet1000_clsidx_to_labels.txt"
    )
    lbls = ast.literal_eval(lbls.decode('utf-8'))

    # load image and preprocess
    from PIL import Image
    url = sys.argv[1]
    if url == 'webcam':
        import cv2
        cap = cv2.VideoCapture(0)
        cap.set(cv2.CAP_PROP_BUFFERSIZE, 1)
示例#16
0
    x = x.dot(self.l2).leakyrelu(0.2)
    if train:
        x = x.dropout(0.3)
    x = x.dot(self.l3).leakyrelu(0.2)
    if train:
        x = x.dropout(0.3)
    x = x.dot(self.l4).logsoftmax()
    return x

if __name__ == "__main__":
    generator = LinearGen()
    discriminator = LinearDisc()
    batch_size = 128
    k = 1
    epochs = 100
    generator_params = get_parameters(generator)
    discriminator_params = get_parameters(discriminator)
    gen_loss = []
    disc_loss = []
    output_folder = "outputs"
    os.makedirs(output_folder, exist_ok=True)
    train_data_size = len(X_train)
    ds_noise = Tensor(np.random.uniform(size=(64,128)).astype(np.float32), gpu=GPU, requires_grad=False)
    n_steps = int(train_data_size/batch_size)
    if GPU:
      [x.cuda_() for x in generator_params+discriminator_params]
    # optimizers
    optim_g = optim.Adam(generator_params, lr=0.001)
    optim_d = optim.Adam(discriminator_params, lr=0.001)

    def regularization_l2(model, a=1e-4):