1

我想使用顺序模型在 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))

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

原则上,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)

所以我的问题:

  • 我可以强制 PQC 层输出状态向量而不是执行读出操作吗?
  • 我可以将状态层用作序列模型中的参数化层(或以任何其他方式训练它吗?)
  • 或者我的模型是否有任何替代方式输出状态向量?
4

1 回答 1

0

我可以强制 PQC 层输出状态向量而不是执行读出操作吗?

PQC 层将为tf.Variable您创建和管理 s。从那里它将通过tfq.layers.Expectation一层发送您的电路。不幸的是,没有办法从这一层产生一个完整的状态向量。

我可以将状态层用作序列模型中的参数化层(或以任何其他方式训练它吗?)

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

于 2020-08-05T16:00:28.550 回答