Пример #1
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))
Пример #2
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
Пример #3
0
 def parameters(self):
     return get_parameters(self)
Пример #4
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)
Пример #5
0
if __name__ == "__main__":
    X_train, Y_train = load_cifar()
    classes = 10

    Tensor.default_gpu = os.getenv("GPU") is not None
    TINY = os.getenv("TINY") is not None
    TRANSFER = os.getenv("TRANSFER") is not None
    if TINY:
        model = TinyConvNet(classes)
    elif TRANSFER:
        model = EfficientNet(int(os.getenv("NUM", "0")), classes, has_se=True)
        model.load_weights_from_torch()
    else:
        model = EfficientNet(int(os.getenv("NUM", "0")), classes, has_se=False)

    parameters = get_parameters(model)
    print("parameters", len(parameters))
    optimizer = optim.Adam(parameters, lr=0.001)

    #BS, steps = 16, 32
    BS, steps = 64 if TINY else 16, 2048

    for i in (t := trange(steps)):
        samp = np.random.randint(0, X_train.shape[0], size=(BS))

        img = X_train[samp].astype(np.float32)

        st = time.time()
        out = model.forward(Tensor(img))
        fp_time = (time.time() - st) * 1000.0