Мне нужно работать с классическими данными в кванте тензорного потока, есть ли способ сделать это?

На самом деле я хочу использовать классические данные в квантовом машинном обучении, как я могу это сделать?

1 ответ

Определенно! Представление классических данных в виде квантовых состояний называется . Это делается с использованием так называемой квантовой карты характеристик , которая берет классическую точку данных и переводит ее в набор параметров вентилей в квантовой схеме, создавая квантовое состояние. Существуют различные методы встраивания, но наиболее распространенными из них являются встраивание базиса и встраивание амплитуды.

Рассмотрим классический набор данных, состоящий из M выборок с N характеристиками в каждой. Базовое вложение связывает каждый ввод с вычислительным базисным состоянием системы кубитов и, следовательно, требует как минимум N кубитов. Вложение амплитуды кодирует входные данные в амплитуды квантового состояния и требует как минимум log_2(NM) кубитов.[1]

В качестве примера [2] мы можем использовать базовое встраивание для обработки изображений, представляя каждый пиксель кубитом, при этом состояние зависит от значения пикселя. Ниже мы предполагаем, что изображения имеют размер 4x4 и попадают в одну из двух различных классификаций. После загрузки, масштабирования, изменения размера и фильтрации нашего набора данных по мере необходимости мы преобразуем его в двоичную кодировку:

      THRESHOLD = 0.5

x_train_bin = np.array(x_train > THRESHOLD, dtype=np.float32)
x_test_bin = np.array(x_test > THRESHOLD, dtype=np.float32)

Теперь для нашей квантовой карты функций мы можем определить простую функцию, которая идентифицирует кубиты в пиксельных индексах со значениями, превышающими наш порог, и вращает их через X- вентиль:

      def convert_to_circuit(image):
    """Encode truncated classical image into quantum datapoint."""
    values = np.ndarray.flatten(image)
    qubits = cirq.GridQubit.rect(4, 4)
    circuit = cirq.Circuit()
    for i, value in enumerate(values):
        if value:
            circuit.append(cirq.X(qubits[i]))
    return circuit


x_train_circ = [convert_to_circuit(x) for x in x_train_bin]
x_test_circ = [convert_to_circuit(x) for x in x_test_bin]

И, наконец, мы можем преобразовать эти Cirq схемы в тензоры для tfq:

      x_train_tfcirc = tfq.convert_to_tensor(x_train_circ)
x_test_tfcirc = tfq.convert_to_tensor(x_test_circ)

Обратите внимание: этот пример не является моим собственным и был взят непосредственно из [2]. Я рекомендую вам проработать полное руководство!

[1] «Квантовое вложение». Pennylane, квантовым вложениемhttps://pennylane.ai/qml/glossary/quantum_embedding.html
[2] «Классификация MNIST: TensorFlow Quantum». TensorFlow, https://www.tensorflow.org/quantum/tutorials/mnist

Другие вопросы по тегам