def test_qsvm_variational_callback(self): tmp_filename = 'qsvm_callback_test.csv' is_file_exist = os.path.exists(self._get_resource_path(tmp_filename)) if is_file_exist: os.remove(self._get_resource_path(tmp_filename)) def store_intermediate_result(eval_count, parameters, cost, batch_index): with open(self._get_resource_path(tmp_filename), 'a') as f: content = "{},{},{:.5f},{}".format(eval_count, parameters, cost, batch_index) print(content, file=f, flush=True) np.random.seed(self.random_seed) backend = BasicAer.get_backend('qasm_simulator') num_qubits = 2 optimizer = COBYLA(maxiter=3) feature_map = SecondOrderExpansion(num_qubits=num_qubits, depth=2) var_form = RY(num_qubits=num_qubits, depth=1) svm = QSVMVariational(optimizer, feature_map, var_form, self.training_data, self.testing_data, callback=store_intermediate_result) svm.random_seed = self.random_seed quantum_instance = QuantumInstance(backend, shots=1024, seed=self.random_seed, seed_mapper=self.random_seed) svm.run(quantum_instance) is_file_exist = os.path.exists(self._get_resource_path(tmp_filename)) self.assertTrue(is_file_exist, "Does not store content successfully.") # check the content # ref_content = [ # ["0", "[ 0.18863864 -1.08197582 1.74432295 1.29765602]", "0.53367", "0"], # ["1", "[ 1.18863864 -1.08197582 1.74432295 1.29765602]", "0.57261", "1"], # ["2", "[ 0.18863864 -0.08197582 1.74432295 1.29765602]", "0.47137", "2"] # ] ref_content = [ ['0', '[ 0.18863864 -1.08197582 1.74432295 1.29765602]', '0.54802', '0'], ['1', '[ 1.18863864 -1.08197582 1.74432295 1.29765602]', '0.53862', '1'], ['2', '[ 1.18863864 -0.08197582 1.74432295 1.29765602]', '0.47278', '2'], ] try: with open(self._get_resource_path(tmp_filename)) as f: idx = 0 for record in f.readlines(): eval_count, parameters, cost, batch_index = record.split(",") self.assertEqual(eval_count.strip(), ref_content[idx][0]) self.assertEqual(parameters, ref_content[idx][1]) self.assertEqual(cost.strip(), ref_content[idx][2]) self.assertEqual(batch_index.strip(), ref_content[idx][3]) idx += 1 finally: if is_file_exist: os.remove(self._get_resource_path(tmp_filename))
def test_qsvm_variational_directly(self): np.random.seed(self.random_seed) backend = BasicAer.get_backend('qasm_simulator') num_qubits = 2 optimizer = SPSA(max_trials=10, save_steps=1, c0=4.0, skip_calibration=True) feature_map = SecondOrderExpansion(num_qubits=num_qubits, depth=2) var_form = RYRZ(num_qubits=num_qubits, depth=3) svm = QSVMVariational(optimizer, feature_map, var_form, self.training_data, self.testing_data) aqua_globals.random_seed = self.random_seed quantum_instance = QuantumInstance(backend, shots=1024, seed=self.random_seed, seed_mapper=self.random_seed) result = svm.run(quantum_instance) np.testing.assert_array_almost_equal(result['opt_params'], self.ref_opt_params, decimal=4) np.testing.assert_array_almost_equal(result['training_loss'], self.ref_train_loss, decimal=8) # self.assertEqual(result['testing_accuracy'], 1.0) self.assertEqual(result['testing_accuracy'], 0.5) file_path = self._get_resource_path('qsvm_variational_test.npz') svm.save_model(file_path) self.assertTrue(os.path.exists(file_path)) loaded_svm = QSVMVariational(optimizer, feature_map, var_form, self.training_data, None) loaded_svm.load_model(file_path) np.testing.assert_array_almost_equal( loaded_svm.ret['opt_params'], self.ref_opt_params, decimal=4) loaded_test_acc = loaded_svm.test(svm.test_dataset[0], svm.test_dataset[1], quantum_instance) self.assertEqual(result['testing_accuracy'], loaded_test_acc) predicted_probs, predicted_labels = loaded_svm.predict(self.testing_data['A'], quantum_instance) np.testing.assert_array_almost_equal(predicted_probs, self.ref_prediction_a_probs, decimal=8) np.testing.assert_array_equal(predicted_labels, self.ref_prediction_a_label) if os.path.exists(file_path): try: os.remove(file_path) except: pass
def test_qsvm_variational_minibatching_with_gradient_support(self): n_dim = 2 # dimension of each data point seed = 1024 np.random.seed(seed) sample_Total, training_input, test_input, class_labels = ad_hoc_data( training_size=20, test_size=10, n=n_dim, gap=0.3) backend = BasicAer.get_backend('statevector_simulator') num_qubits = n_dim optimizer = L_BFGS_B(maxfun=1000) feature_map = SecondOrderExpansion(num_qubits=num_qubits, depth=2) var_form = RYRZ(num_qubits=num_qubits, depth=3) svm = QSVMVariational(optimizer, feature_map, var_form, training_input, test_input, minibatch_size=2) aqua_globals.random_seed = seed quantum_instance = QuantumInstance(backend, seed=seed) result = svm.run(quantum_instance) svm_accuracy_threshold = 0.85 print(result['testing_accuracy']) self.assertGreater(result['testing_accuracy'], svm_accuracy_threshold)