我用tensorflow量子建立了一个量子神经网络,它的输入是由circuit.About转换的张量--这个输入电路,我发现如果电路的参数也是由张量指定的,那么量子神经网络就不能训练。
电路在使用正常参数时可以使网络正常运行。
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发布于 2020-09-25 20:26:01
没有能够看到所得到的错误的跟踪,我会说,我认为在第二个片段中遇到的问题是您已经将tf.constant对象放置到cirq.Circuit的占位符中。您的第一个示例之所以有效,是因为cirq.Circuits知道如何从np.float32数据类型中解释值。Cirq不知道如何从tf.float32 (或任何tf.dtype.*)中解释值。
TensorFlow量子接口tensorflow数据类型与cirq.Circuit对象的入口点是通过解析tfq本机操作中电路中的sympy.Symbol值(您在创建tfq.layers.PQC时所做的)。
这能帮你弄清楚吗?
-Michael
https://stackoverflow.com/questions/63812476
复制相似问题