关于张量流量子中的量子神经网络输入

问题描述

我使用张量流量子创建了一个量子神经网络,它的输入是由电路转换的张量。关于这个输入电路,我发现如果电路的参数也由张量指定,那么量子神经网络就无法训练。

使用常规参数的电路可使网络正常训练

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)
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

解决方法

无法看到您得到的错误的踪迹,我会说我认为在第二个代码段中遇到的问题是您放置了tf.constant对象放入cirq.Circuit的占位符中。您的第一个示例起作用的原因是cirq.Circuits知道如何从np.float32数据类型解释值。 Cirq不知道如何从tf.float32(或与此相关的任何tf.dtypes。*)中解释值。

TensorFlow Quantum将tensorflow数据类型与cirq.Circuit对象接口的入口点是通过解析tfq本机操作(在创建sympy.Symbol中所做的)中的电路内部的tfq.layers.PQC值。 / p>

这是否有助于清理?

-迈克尔

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...