如何解决关于张量流量子中的量子神经网络输入
我使用张量流量子创建了一个量子神经网络,它的输入是由电路转换的张量。关于这个输入电路,我发现如果电路的参数也由张量指定,那么量子神经网络就无法训练。
使用常规参数的电路可使网络正常训练
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>
这是否有助于清理?
-迈克尔
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。