Closed leopardbruce closed 4 years ago
An error occurred when I ran below code in Chapter3, could anyone please help to figure it out?
`classifier = classifier.to(args.device)
loss_func = nn.BCEWithLogitsLoss() optimizer = optim.Adam(classifier.parameters(), lr=args.learning_rate) scheduler = optim.lr_scheduler.ReduceLROnPlateau(optimizer=optimizer, mode='min', factor=0.5, patience=1)
train_state = make_train_state(args)
epoch_bar = tqdm.notebook.tqdm(desc='training routine', total=args.num_epochs, position=0)
dataset.set_split('train') train_bar = tqdm.notebook.tqdm(desc='split=train', total=dataset.get_num_batches(args.batch_size), position=1, leave=True) dataset.set_split('val') val_bar = tqdm.notebook.tqdm(desc='split=val', total=dataset.get_num_batches(args.batch_size), position=1, leave=True)
try: for epoch_index in range(args.num_epochs): train_state['epoch_index'] = epoch_index
# Iterate over training dataset # setup: batch generator, set loss and acc to 0, set train mode on dataset.set_split('train') batch_generator = generate_batches(dataset, batch_size=args.batch_size, device=args.device) running_loss = 0.0 running_acc = 0.0 classifier.train() for batch_index, batch_dict in enumerate(batch_generator): # the training routine is these 5 steps: # -------------------------------------- # step 1. zero the gradients optimizer.zero_grad() # step 2. compute the output y_pred = classifier(x_in=batch_dict['x_data'].float()) # step 3. compute the loss loss = loss_func(y_pred, batch_dict['y_target'].float()) loss_t = loss.item() running_loss += (loss_t - running_loss) / (batch_index + 1) # step 4. use loss to produce gradients loss.backward() # step 5. use optimizer to take gradient step optimizer.step() # ----------------------------------------- # compute the accuracy acc_t = compute_accuracy(y_pred, batch_dict['y_target']) running_acc += (acc_t - running_acc) / (batch_index + 1) # update bar train_bar.set_postfix(loss=running_loss, acc=running_acc, epoch=epoch_index) train_bar.update() train_state['train_loss'].append(running_loss) train_state['train_acc'].append(running_acc) # Iterate over val dataset # setup: batch generator, set loss and acc to 0; set eval mode on dataset.set_split('val') batch_generator = generate_batches(dataset, batch_size=args.batch_size, device=args.device) running_loss = 0. running_acc = 0. classifier.eval() for batch_index, batch_dict in enumerate(batch_generator): # compute the output y_pred = classifier(x_in=batch_dict['x_data'].float()) # compute the loss loss = loss_func(y_pred, batch_dict['y_target'].float()) loss_t = loss.item() running_loss += (loss_t - running_loss) / (batch_index + 1) # compute the accuracy acc_t = compute_accuracy(y_pred, batch_dict['y_target']) running_acc += (acc_t - running_acc) / (batch_index + 1) val_bar.set_postfix(loss=running_loss, acc=running_acc, epoch=epoch_index) val_bar.update() train_state['val_loss'].append(running_loss) train_state['val_acc'].append(running_acc) train_state = update_train_state(args=args, model=classifier, train_state=train_state) scheduler.step(train_state['val_loss'][-1]) train_bar.n = 0 val_bar.n = 0 epoch_bar.update() if train_state['stop_early']: break train_bar.n = 0 val_bar.n = 0 epoch_bar.update()
except KeyboardInterrupt: print("Exiting loop")`
ValueError: num_samples should be a positive integer value, but got num_samples=0
An error occurred when I ran below code in Chapter3, could anyone please help to figure it out?
`classifier = classifier.to(args.device)
loss_func = nn.BCEWithLogitsLoss() optimizer = optim.Adam(classifier.parameters(), lr=args.learning_rate) scheduler = optim.lr_scheduler.ReduceLROnPlateau(optimizer=optimizer, mode='min', factor=0.5, patience=1)
train_state = make_train_state(args)
epoch_bar = tqdm.notebook.tqdm(desc='training routine', total=args.num_epochs, position=0)
dataset.set_split('train') train_bar = tqdm.notebook.tqdm(desc='split=train', total=dataset.get_num_batches(args.batch_size), position=1, leave=True) dataset.set_split('val') val_bar = tqdm.notebook.tqdm(desc='split=val', total=dataset.get_num_batches(args.batch_size), position=1, leave=True)
try: for epoch_index in range(args.num_epochs): train_state['epoch_index'] = epoch_index
except KeyboardInterrupt: print("Exiting loop")`
ValueError: num_samples should be a positive integer value, but got num_samples=0