Exemplo n.º 1
0
    def test_list_of_tensors(self):
        range20 = np.expand_dims(np.arange(20), 1)
        dataset = TensorDataset((range20, range20 * 2), range20 * 3)
        self.assertEqual(len(dataset), 20)
        self.assertEqual(type(dataset[0]), tuple)
        self.assertEqual(type(dataset[0][0]), tuple)
        self.assertEqual(type(dataset[0][-1]), np.ndarray)
        for i in range(20):
            self.assertEqual(dataset[i][0][0], i)
            self.assertEqual(dataset[i][0][1], i * 2)
            self.assertEqual(dataset[i][1], i * 3)

        dataset = TensorDataset((range20, range20 * 2), (range20 * 3, range20 * 4))
        self.assertEqual(len(dataset), 20)

        self.assertEqual(type(dataset[0]), tuple)
        self.assertEqual(type(dataset[1]), tuple)
        self.assertEqual(type(dataset[0][0]), tuple)
        self.assertEqual(type(dataset[0][1]), tuple)
        for i in range(20):
            self.assertEqual(type(dataset[i][0][0]), np.ndarray)
            self.assertEqual(type(dataset[i][0][1]), np.ndarray)
            self.assertEqual(dataset[i][0][0], i)
            self.assertEqual(dataset[i][0][1], i * 2)
            self.assertEqual(type(dataset[i][1][0]), np.ndarray)
            self.assertEqual(type(dataset[i][1][1]), np.ndarray)
            self.assertEqual(dataset[i][1][0], i * 3)
            self.assertEqual(dataset[i][1][1], i * 4)
Exemplo n.º 2
0
    def test_fitting_generator_calls_with_longer_validation_set(self):
        train_real_steps_per_epoch = 30
        train_batch_size = ModelTest.batch_size
        train_final_batch_missing_samples = 7
        train_size = train_real_steps_per_epoch * train_batch_size - \
                     train_final_batch_missing_samples
        train_x = torch.rand(train_size, 1)
        train_y = torch.rand(train_size, 1)
        train_dataset = TensorDataset(train_x, train_y)
        train_generator = DataLoader(train_dataset, train_batch_size)

        valid_real_steps_per_epoch = 40
        valid_batch_size = 15
        valid_final_batch_missing_samples = 3
        valid_size = valid_real_steps_per_epoch * valid_batch_size - \
                     valid_final_batch_missing_samples
        valid_x = torch.rand(valid_size, 1)
        valid_y = torch.rand(valid_size, 1)
        valid_dataset = TensorDataset(valid_x, valid_y)
        valid_generator = DataLoader(valid_dataset, valid_batch_size)

        mock_train_generator = IterableMock(train_generator)
        mock_valid_generator = IterableMock(valid_generator)
        self.model.fit_generator(mock_train_generator,
                                 mock_valid_generator,
                                 epochs=ModelTest.epochs)
        expected_train_calls = ['__len__'] + \
                               (['__iter__'] + ['__next__'] * train_real_steps_per_epoch) * ModelTest.epochs
        expected_valid_calls = ['__len__'] + \
                               (['__iter__'] + ['__next__'] * valid_real_steps_per_epoch) * ModelTest.epochs
        self.assertEqual(mock_train_generator.calls, expected_train_calls)
        self.assertEqual(mock_valid_generator.calls, expected_valid_calls)
Exemplo n.º 3
0
    def test_fitting_with_data_loader(self):
        train_real_steps_per_epoch = 30
        train_batch_size = ModelTest.batch_size
        train_final_batch_missing_samples = 7
        train_size = train_real_steps_per_epoch * train_batch_size - \
                     train_final_batch_missing_samples
        train_x = torch.rand(train_size, 1)
        train_y = torch.rand(train_size, 1)
        train_dataset = TensorDataset(train_x, train_y)
        train_generator = DataLoader(train_dataset, train_batch_size)

        valid_real_steps_per_epoch = 10
        valid_batch_size = 15
        valid_final_batch_missing_samples = 3
        valid_size = valid_real_steps_per_epoch * valid_batch_size - \
                     valid_final_batch_missing_samples
        valid_x = torch.rand(valid_size, 1)
        valid_y = torch.rand(valid_size, 1)
        valid_dataset = TensorDataset(valid_x, valid_y)
        valid_generator = DataLoader(valid_dataset, valid_batch_size)

        logs = self.model.fit_generator(train_generator,
                                        valid_generator,
                                        epochs=ModelTest.epochs,
                                        steps_per_epoch=None,
                                        validation_steps=None,
                                        callbacks=[self.mock_callback])
        params = {
            'epochs': ModelTest.epochs,
            'steps': train_real_steps_per_epoch,
            'valid_steps': valid_real_steps_per_epoch
        }
        self._test_callbacks_train(params, logs)
Exemplo n.º 4
0
 def test_multiple_tensors(self):
     range20 = np.expand_dims(np.arange(20), 1)
     dataset = TensorDataset(range20, range20 * 2, range20 * 3)
     self.assertEqual(len(dataset), 20)
     self.assertEqual(type(dataset[0]), tuple)
     for i in range(20):
         self.assertEqual(dataset[i][0], i)
         self.assertEqual(dataset[i][1], i * 2)
         self.assertEqual(dataset[i][2], i * 3)
Exemplo n.º 5
0
    def test_evaluate_data_loader_with_progress_bar_coloring(self):
        x = torch.rand(ModelFittingTestCase.evaluate_dataset_len, 1)
        y = torch.rand(ModelFittingTestCase.evaluate_dataset_len, 1)
        dataset = TensorDataset(x, y)
        generator = DataLoader(dataset, ModelFittingTestCase.batch_size)

        _, _ = self.model.evaluate_generator(generator, verbose=True)

        self.assertStdoutContains(["%", "[32m", "[35m", "[36m", "[94m", "\u2588"])
Exemplo n.º 6
0
 def test_evaluate_data_loader_multi_input(self):
     x1 = torch.rand(ModelMultiInputTest.evaluate_dataset_len, 1)
     x2 = torch.rand(ModelMultiInputTest.evaluate_dataset_len, 1)
     y = torch.rand(ModelMultiInputTest.evaluate_dataset_len, 1)
     dataset = TensorDataset((x1, x2), y)
     generator = DataLoader(dataset, ModelMultiInputTest.batch_size)
     loss, pred_y = self.model.evaluate_generator(generator,
                                                  return_pred=True)
     self.assertEqual(type(loss), float)
     self.assertEqual(pred_y.shape,
                      (ModelMultiInputTest.evaluate_dataset_len, 1))
Exemplo n.º 7
0
 def test_evaluate_data_loader(self):
     x = torch.rand(ModelTest.evaluate_dataset_len, 1)
     y = torch.rand(ModelTest.evaluate_dataset_len, 1)
     dataset = TensorDataset(x, y)
     generator = DataLoader(dataset, ModelTest.batch_size)
     loss, metrics, pred_y = self.model.evaluate_generator(generator,
                                                           return_pred=True)
     self.assertEqual(type(loss), float)
     self.assertEqual(type(metrics), np.ndarray)
     self.assertEqual(metrics.tolist(),
                      self.batch_metrics_values + self.epoch_metrics_values)
     self.assertEqual(pred_y.shape, (ModelTest.evaluate_dataset_len, 1))
Exemplo n.º 8
0
 def test_evaluate_data_loader_multi_output(self):
     x = torch.rand(ModelMultiOutputTest.evaluate_dataset_len, 1)
     y1 = torch.rand(ModelMultiOutputTest.evaluate_dataset_len, 1)
     y2 = torch.rand(ModelMultiOutputTest.evaluate_dataset_len, 1)
     dataset = TensorDataset(x, (y1, y2))
     generator = DataLoader(dataset, ModelMultiOutputTest.batch_size)
     loss, pred_y = self.model.evaluate_generator(generator,
                                                  return_pred=True)
     self.assertEqual(type(loss), float)
     for pred in pred_y:
         self.assertEqual(type(pred), np.ndarray)
         self.assertEqual(pred.shape,
                          (ModelMultiOutputTest.evaluate_dataset_len, 1))
valid_y = np.random.randint(num_classes,
                            size=num_valid_samples).astype('int64')

num_test_samples = 200
test_x = np.random.randn(num_test_samples, num_features).astype('float32')
test_y = np.random.randint(num_classes, size=num_test_samples).astype('int64')

cuda_device = 0
device = torch.device("cuda:%d" %
                      cuda_device if torch.cuda.is_available() else "cpu")

# Define the network
network = nn.Sequential(nn.Linear(num_features, hidden_state_size), nn.ReLU(),
                        nn.Linear(hidden_state_size, num_classes))

# We need to use dataloaders (i.e. an iterable of batches) with Experiment
train_loader = DataLoader(TensorDataset(train_x, train_y), batch_size=32)
valid_loader = DataLoader(TensorDataset(valid_x, valid_y), batch_size=32)
test_loader = DataLoader(TensorDataset(test_x, test_y), batch_size=32)

# Everything is saved in ./expt/my_classification_network
expt = Experiment('./expt/my_classification_network',
                  network,
                  device=device,
                  optimizer='sgd',
                  task='classif')

expt.train(train_loader, valid_loader, epochs=5)

expt.test(test_loader)
Exemplo n.º 10
0
 def _get_data_loader(self, *tensors):
     return DataLoader(TensorDataset(*tensors),
                       batch_size=SKLearnMetricsTest.batch_size)
Exemplo n.º 11
0
 def test_one_tensor(self):
     range20 = np.expand_dims(np.arange(20), 1)
     dataset = TensorDataset(range20)
     self.assertEqual(len(dataset), 20)
     for i in range(20):
         self.assertEqual(dataset[i], np.array([i]))