О входе квантовой нейронной сети в квант тензорного потока

Я создал квантовую нейронную сеть, используя квант тензорного потока , Его вход - тензор, преобразованный схемой. Об этой входной схеме , Я обнаружил, что если параметры схемы также задаются тензорами, квантовую нейронную сеть невозможно обучить.

Схема при использовании нормальных параметров может заставить сеть нормально тренироваться.

theta_g=1
blob_size = abs(1 - 4) / 5
spread_x = np.random.uniform(-blob_size, blob_size)
spread_y = np.random.uniform(-blob_size, blob_size)
angle = theta_g + spread_y
cir=cirq.Circuit(cirq.ry(-angle)(qubit), cirq.rx(-spread_x)(qubit))
discriminator_network(tfq.convert_to_tensor([cir]))

Но когда я использую следующий код, квантовую нейронную сеть невозможно обучить.

theta_g=tf.constant([1])
blob_size = abs(1 - 4) / 5
spread_x = np.random.uniform(-blob_size, blob_size)
spread_y = np.random.uniform(-blob_size, blob_size)
spred_x = tf.constant(spread_x)
spred_y = tf.constant(spread_y)
angle = theta_g + spread_y
cir=cirq.Circuit(cirq.ry(-angle)(qubit), cirq.rx(-spread_x)(qubit))
discriminator_network(tfq.convert_to_tensor([cir]))

** disciminator_network**

def discriminator():
    theta = sympy.Symbol('theta')
    q_model = cirq.Circuit(cirq.ry(theta)(qubit))
    q_data_input = tf.keras.Input(
        shape=(), dtype=tf.dtypes.string)
    expectation = tfq.layers.PQC(q_model, cirq.Z(qubit))
    expectation_output = expectation(q_data_input)

    classifier = tf.keras.layers.Dense(1, activation=tf.keras.activations.sigmoid)
    classifier_output = classifier(expectation_output)
    model = tf.keras.Model(inputs=q_data_input, outputs=classifier_output)
    return model

1 ответ

Не имея возможности увидеть след получаемой вами ошибки, я бы сказал, что, на мой взгляд, проблема, с которой вы столкнулись во втором фрагменте, заключается в том, что вы разместили tf.constant объекты в заполнители cirq.Circuit. Причина, по которой ваш первый пример работает, заключается в том, что cirq.Circuits знает, как интерпретировать значения из типов данных np.float32. Cirq не знает, как интерпретировать значения из tf.float32 (или любых tf.dtypes.* В этом отношении).

Точка входа TensorFlow Quantum для взаимодействия типов данных тензорного потока с объектами схемы - через разрешение sympy.Symbol значения внутри схем в собственных операциях tfq (которые вы сделали при создании tfq.layers.PQC).

Это помогает прояснить ситуацию?

-Майкл

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