def test_forward(self): model_config = self.config.model_attributes.cnn_lstm cnn_lstm = CNNLSTM(model_config) cnn_lstm.build() cnn_lstm.init_losses_and_metrics() self.assertTrue(isinstance(cnn_lstm, torch.nn.Module)) test_sample = Sample() test_sample.text = torch.randint(1, 79, (10, ), dtype=torch.long) test_sample.image = torch.randn(3, 320, 480) test_sample.targets = torch.randn(32) test_sample_list = SampleList([test_sample]) test_sample_list.dataset_type = "train" test_sample_list.dataset_name = "clevr" output = cnn_lstm(test_sample_list) scores = output["scores"] loss = output["losses"]["train/clevr/logit_bce"] accuracy = output["metrics"]["train/clevr/accuracy"] np.testing.assert_almost_equal(loss.item(), 19.2635, decimal=4) np.testing.assert_almost_equal(accuracy.item(), 0) self.assertEqual(scores.size(), torch.Size((1, 32))) expected_scores = [ -0.7598285675048828, -0.07029829174280167, -0.20382611453533173, -0.06990239024162292, 0.7965695858001709, 0.4730074405670166, -0.30569902062416077, 0.4244227707386017, 0.6511023044586182, 0.2480515092611313, -0.5087617635726929, -0.7675772905349731, 0.4361543357372284, 0.0018743239343166351, 0.6774630546569824, 0.30618518590927124, -0.398895800113678, -0.13120117783546448, -0.4433199465274811, -0.25969570875167847, 0.6798790097236633, -0.34090861678123474, 0.0384102463722229, 0.2484571784734726, 0.0456063412129879, -0.428459107875824, -0.026385333389043808, -0.1570669412612915, -0.2377825379371643, 0.3231588304042816, 0.21098048985004425, -0.712349534034729 ] np.testing.assert_almost_equal(scores[0].tolist(), expected_scores, decimal=5)
def test_forward(self): model_config = self.config.model_attributes.cnn_lstm cnn_lstm = CNNLSTM(model_config) cnn_lstm.build() cnn_lstm.init_losses_and_metrics() self.assertTrue(isinstance(cnn_lstm, torch.nn.Module)) test_sample = Sample() test_sample.text = torch.randint(1, 79, (10, ), dtype=torch.long) test_sample.image = torch.randn(3, 320, 480) test_sample.targets = torch.randn(32) test_sample_list = SampleList([test_sample]) test_sample_list.dataset_type = "train" test_sample_list.dataset_name = "clevr" output = cnn_lstm(test_sample_list) scores = output["scores"] loss = output["losses"]["train/logit_bce"] accuracy = output["metrics"]["train/accuracy"] np.testing.assert_almost_equal(loss.item(), 23.4751, decimal=4) np.testing.assert_almost_equal(accuracy.item(), 0) self.assertEqual(scores.size(), torch.Size((1, 32))) expected_scores = [ 2.2298e-02, -2.4975e-01, -1.1960e-01, -5.0868e-01, -9.3013e-02, 1.3202e-02, -1.7536e-01, -3.1180e-01, 1.5369e-01, 1.4900e-01, 1.9006e-01, -1.9457e-01, 1.4924e-02, -1.1032e-01, 1.3777e-01, -3.6255e-01, -2.9327e-01, 5.6247e-04, -4.8732e-01, 4.0949e-01, -1.1069e-01, 2.9696e-01, 4.1903e-02, 6.7062e-02, 7.0094e-01, -1.9898e-01, -2.9502e-03, -3.9040e-01, 1.2218e-01, 3.7895e-02, 2.4472e-02, 1.7213e-01 ] np.testing.assert_almost_equal(scores[0].tolist(), expected_scores, decimal=5)
def get_item(self, idx): data = self.questions[idx] # Each call to get_item from dataloader returns a Sample class object which # collated by our special batch collator to a SampleList which is basically # a attribute based batch in layman terms current_sample = Sample() question = data["question"] tokens = tokenize(question, keep=[";", ","], remove=["?", "."]) processed = self.text_processor({"tokens": tokens}) current_sample.text = processed["text"] processed = self.answer_processor({"answers": [data["answer"]]}) current_sample.answers = processed["answers"] current_sample.targets = processed["answers_scores"] image_path = os.path.join(self.image_path, data["image_filename"]) image = np.true_divide(Image.open(image_path).convert("RGB"), 255) image = image.astype(np.float32) current_sample.image = torch.from_numpy(image.transpose(2, 0, 1)) return current_sample