如何训练输出状态向量的 TensorFlow Quantum 模型?

How can I train a TensorFlow Quantum model that outputs a state vector?

我想使用顺序模型在 TFQ 中训练一个简单的电路,如下所示:

model = tf.keras.Sequential()
model.add(tf.keras.layers.Input(shape=(), dtype=tf.dtypes.string))
model.add(
    tfq.layers.PQC(
        model_circuit=circuit,
        operators=readout_op))

但是我希望模型输出状态向量而不是执行读出操作,这样我可以在将其输入损失函数之前对其进行一些 post 处理。

原则上,tfq.layers.State 看起来很适合这项任务,但从示例中我不清楚我将如何在模型上下文中使用状态层,而不是仅将其用于 生成 文档中所示的状态向量:

state_layer = tfq.layers.State()
alphas = tf.reshape(tf.range(0, 1.1, delta=0.5), (3, 1)) # FIXME: #805
state_layer(parametrized_bell_circuit,
    symbol_names=[alpha], symbol_values=alphas)

所以我的问题是:

can I force the PQC layer to output the state vector instead of performing a readout operation?

PQC 层将为您创建和管理 tf.Variable。从那里它将通过 tfq.layers.Expectation 层发送您的电路。不幸的是,无法从该层生成完整的状态向量。

can I use the State layer as a parameterized layer in a Sequential model (or train it in any other way?)

是的,您可以使用 tfq.layers.State 层 (https://www.tensorflow.org/quantum/api_docs/python/tfq/layers/State) 将输入电路的状态向量合并到您的模型中。请注意,生成的状态向量将不可微。在创建 TFQ 时,我们希望鼓励用户进行任何复杂的建模,以尝试使用在真实芯片和模拟之间具有 1:1 转换的功能(即非常容易将 tfq.layers.Expectation 逻辑部署到一个真正的筹码,因为我们没有违反任何规则,但是 tfq.layers.State 我们在作弊并提取完整的状态向量)。