О входе квантовой нейронной сети в квант тензорного потока
Я создал квантовую нейронную сеть, используя квант тензорного потока , Его вход - тензор, преобразованный схемой. Об этой входной схеме , Я обнаружил, что если параметры схемы также задаются тензорами, квантовую нейронную сеть невозможно обучить.
Схема при использовании нормальных параметров может заставить сеть нормально тренироваться.
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
1 ответ
Не имея возможности увидеть след получаемой вами ошибки, я бы сказал, что, на мой взгляд, проблема, с которой вы столкнулись во втором фрагменте, заключается в том, что вы разместили
tf.constant
объекты в заполнители
cirq.Circuit
. Причина, по которой ваш первый пример работает, заключается в том, что cirq.Circuits знает, как интерпретировать значения из типов данных np.float32. Cirq не знает, как интерпретировать значения из tf.float32 (или любых tf.dtypes.* В этом отношении).
Точка входа TensorFlow Quantum для взаимодействия типов данных тензорного потока с объектами схемы - через разрешение
sympy.Symbol
значения внутри схем в собственных операциях tfq (которые вы сделали при создании
tfq.layers.PQC
).
Это помогает прояснить ситуацию?
-Майкл