TensorFlow Quantum으로 양자 회로 학습
13121 단어 TensorFlow양자 컴퓨터
tutorials 에 mnist의 식별의 샘플 코드가 있었으므로 (필기 숫자의 식별이라고 말해도 괜찮습니까? ), 그것을 참고로, TensorFlowQuantum을 사용해 회귀 문제에 임해 보았다. 코드는 기주 b. 코 m / 코케 사카 / 쿠안츠 m 마치 네 - r r g
기계 학습에 대해서는 아마추어를 위해 기계 학습적으로 위험한 곳이 있으면 부드럽게 지적해 주었으면 한다.
QuantumCircuitLearning
양자 회로의 구조를 제한함으로써 기울기 계산을 가능하게 한 QuantumCircuitLearning
학습 데이터 준비
자세한 내용은 QuantumNativeDojo
우선 200개의 샘플을 준비하고, 무작위로 150개를 훈련 세트, 50개를 테스트 세트로 나누었다.
입력 상태 만들기
mnist의 학습에서는 threshold를 끌어서 이미지를 2치 화상으로 해 그것을 qubit의 0,1에 대응시키고 있었다. (정확하게는 1의 경우에 X 게이트를 휘두르고 있었다)
여기서는 기주 b. 코 m / 코케 사카 / 쿠안츠 m 마치 네 - rrn g 이 되어 $\arcsin(x)$ 와 $\arccos(x^2)$ 를 각각 RY, RX 게이트의 회전각에 대응시켜, 입력 상태의 인코딩을 실시했다. TensorFlowQuantum에서는 아무래도 미리 그 상태를 준비해 두는 것 같다. (Qulacs에서는 축일회로를 재작성하고 있었다고 생각한다.)
def convert_to_circuit(x):
"""Encode truncated classical image into quantum datapoint."""
y = np.arcsin(x)
z = np.arccos(x**2)
qubits = cirq.GridQubit.rect(5, 1)
circuit = cirq.Circuit()
for i in range(5):
circuit.append(cirq.ry(y).on(qubits[i]))
circuit.append(cirq.rz(z).on(qubits[i]))
return circuit
x_train_circ = [convert_to_circuit(x) for x in x_train]
x_test_circ = [convert_to_circuit(x) for x in x_test]
x_train_tfcirc = tfq.convert_to_tensor(x_train_circ)
x_test_tfcirc = tfq.convert_to_tensor(x_test_circ)
convert_to_circuit()
는 자체적으로 준비해야 한다. QuantumNativeDojo 의 해당 부분을 보면 이해가 깊어진다고 생각한다.convert_to_tensor()
한 사람을 향후 학습에 사용한다.
파라메트릭 양자 회로(신경망) 생성
미해결
readout과 dataqubits는 별도로 준비할 필요가 있는지 알 수 없다.
QuantumNativeDojo처럼 출력 양자 비트에도 입력을 인코딩하고 싶지만 지금은 할 수 없다.
우선 구현
def create_quantum_model(c_depth=3):
data_qubits = cirq.GridQubit.rect(5,1)
readout = cirq.GridQubit(-1,-1)
circuit = cirq.Circuit()
builder = CircuitLayerBuilder(
data_qubits = data_qubits,
readout = readout
)
for i in range(c_depth):
builder.add_entangler(circuit,5)
builder.add_layer(circuit, gate = cirq.XX, prefix='xx'+str(i))
builder.add_layer(circuit, gate = cirq.ZZ, prefix='zz'+str(i))
builder.add_layer(circuit, gate = cirq.XX, prefix='xx1'+str(i))
return circuit, cirq.Z(readout)
model_circuit, model_readout = create_quantum_model()
클래스 CircuitLayerBuilder
에 대해서는 tutorial/mnist 를 참조. 인접한 양자 비트에 CZ 게이트를 끼웁니다 add_entangler
이런 느낌으로 양자 회로를 만들 수 있다.
github
모델 작성, 학습
모델을 만들 준비가 되었습니다. 모델을 만들어 학습시켜 보자.
회귀 문제로 인해 손실 함수는 mse로 만들었습니다.
model = tf.keras.Sequential([
# The input is the data-circuit, encoded as a tf.string
tf.keras.layers.Input(shape=(), dtype=tf.string),
# The PQC layer returns the expected value of the readout gate, range [-1,1].
tfq.layers.PQC(model_circuit, model_readout),
])
model.compile(
loss=tf.keras.losses.mse,
optimizer=tf.keras.optimizers.Adam(),
metrics=['mae'])
qnn_history = model.fit(
x_train_tfcirc, y_train,
batch_size=25,
epochs=EPOCHS,
verbose=1,
validation_data=(x_test_tfcirc,y_test)
)
테스트 세트와 예측 값의 비교는 아래 그림입니다.
어쩐지 학습할 수 있는 것 같지만, 최대 최소가 작게 나와 있는 것이 신경이 쓰인다. readout은 파울리의 Z 행렬의 기대치이므로 1에서 -1 사이를 취할 수 있는 것이지만,
끝에
우선 TensorFlowQuantum에서 놀 수 있었다. 결함의 원인은 앞으로 생각하기로 한다. TensorFlowQuantum 만져보고 싶어지는 사람이 늘면 기쁘다.
Reference
이 문제에 관하여(TensorFlow Quantum으로 양자 회로 학습), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/koke-saka/items/986e0b35278dda89cbe1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
자세한 내용은 QuantumNativeDojo
우선 200개의 샘플을 준비하고, 무작위로 150개를 훈련 세트, 50개를 테스트 세트로 나누었다.
입력 상태 만들기
mnist의 학습에서는 threshold를 끌어서 이미지를 2치 화상으로 해 그것을 qubit의 0,1에 대응시키고 있었다. (정확하게는 1의 경우에 X 게이트를 휘두르고 있었다)
여기서는 기주 b. 코 m / 코케 사카 / 쿠안츠 m 마치 네 - rrn g 이 되어 $\arcsin(x)$ 와 $\arccos(x^2)$ 를 각각 RY, RX 게이트의 회전각에 대응시켜, 입력 상태의 인코딩을 실시했다. TensorFlowQuantum에서는 아무래도 미리 그 상태를 준비해 두는 것 같다. (Qulacs에서는 축일회로를 재작성하고 있었다고 생각한다.)
def convert_to_circuit(x):
"""Encode truncated classical image into quantum datapoint."""
y = np.arcsin(x)
z = np.arccos(x**2)
qubits = cirq.GridQubit.rect(5, 1)
circuit = cirq.Circuit()
for i in range(5):
circuit.append(cirq.ry(y).on(qubits[i]))
circuit.append(cirq.rz(z).on(qubits[i]))
return circuit
x_train_circ = [convert_to_circuit(x) for x in x_train]
x_test_circ = [convert_to_circuit(x) for x in x_test]
x_train_tfcirc = tfq.convert_to_tensor(x_train_circ)
x_test_tfcirc = tfq.convert_to_tensor(x_test_circ)
convert_to_circuit()
는 자체적으로 준비해야 한다. QuantumNativeDojo 의 해당 부분을 보면 이해가 깊어진다고 생각한다.convert_to_tensor()
한 사람을 향후 학습에 사용한다.
파라메트릭 양자 회로(신경망) 생성
미해결
readout과 dataqubits는 별도로 준비할 필요가 있는지 알 수 없다.
QuantumNativeDojo처럼 출력 양자 비트에도 입력을 인코딩하고 싶지만 지금은 할 수 없다.
우선 구현
def create_quantum_model(c_depth=3):
data_qubits = cirq.GridQubit.rect(5,1)
readout = cirq.GridQubit(-1,-1)
circuit = cirq.Circuit()
builder = CircuitLayerBuilder(
data_qubits = data_qubits,
readout = readout
)
for i in range(c_depth):
builder.add_entangler(circuit,5)
builder.add_layer(circuit, gate = cirq.XX, prefix='xx'+str(i))
builder.add_layer(circuit, gate = cirq.ZZ, prefix='zz'+str(i))
builder.add_layer(circuit, gate = cirq.XX, prefix='xx1'+str(i))
return circuit, cirq.Z(readout)
model_circuit, model_readout = create_quantum_model()
클래스 CircuitLayerBuilder
에 대해서는 tutorial/mnist 를 참조. 인접한 양자 비트에 CZ 게이트를 끼웁니다 add_entangler
이런 느낌으로 양자 회로를 만들 수 있다.
github
모델 작성, 학습
모델을 만들 준비가 되었습니다. 모델을 만들어 학습시켜 보자.
회귀 문제로 인해 손실 함수는 mse로 만들었습니다.
model = tf.keras.Sequential([
# The input is the data-circuit, encoded as a tf.string
tf.keras.layers.Input(shape=(), dtype=tf.string),
# The PQC layer returns the expected value of the readout gate, range [-1,1].
tfq.layers.PQC(model_circuit, model_readout),
])
model.compile(
loss=tf.keras.losses.mse,
optimizer=tf.keras.optimizers.Adam(),
metrics=['mae'])
qnn_history = model.fit(
x_train_tfcirc, y_train,
batch_size=25,
epochs=EPOCHS,
verbose=1,
validation_data=(x_test_tfcirc,y_test)
)
테스트 세트와 예측 값의 비교는 아래 그림입니다.
어쩐지 학습할 수 있는 것 같지만, 최대 최소가 작게 나와 있는 것이 신경이 쓰인다. readout은 파울리의 Z 행렬의 기대치이므로 1에서 -1 사이를 취할 수 있는 것이지만,
끝에
우선 TensorFlowQuantum에서 놀 수 있었다. 결함의 원인은 앞으로 생각하기로 한다. TensorFlowQuantum 만져보고 싶어지는 사람이 늘면 기쁘다.
Reference
이 문제에 관하여(TensorFlow Quantum으로 양자 회로 학습), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/koke-saka/items/986e0b35278dda89cbe1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
def convert_to_circuit(x):
"""Encode truncated classical image into quantum datapoint."""
y = np.arcsin(x)
z = np.arccos(x**2)
qubits = cirq.GridQubit.rect(5, 1)
circuit = cirq.Circuit()
for i in range(5):
circuit.append(cirq.ry(y).on(qubits[i]))
circuit.append(cirq.rz(z).on(qubits[i]))
return circuit
x_train_circ = [convert_to_circuit(x) for x in x_train]
x_test_circ = [convert_to_circuit(x) for x in x_test]
x_train_tfcirc = tfq.convert_to_tensor(x_train_circ)
x_test_tfcirc = tfq.convert_to_tensor(x_test_circ)
미해결
readout과 dataqubits는 별도로 준비할 필요가 있는지 알 수 없다.
QuantumNativeDojo처럼 출력 양자 비트에도 입력을 인코딩하고 싶지만 지금은 할 수 없다.
우선 구현
def create_quantum_model(c_depth=3):
data_qubits = cirq.GridQubit.rect(5,1)
readout = cirq.GridQubit(-1,-1)
circuit = cirq.Circuit()
builder = CircuitLayerBuilder(
data_qubits = data_qubits,
readout = readout
)
for i in range(c_depth):
builder.add_entangler(circuit,5)
builder.add_layer(circuit, gate = cirq.XX, prefix='xx'+str(i))
builder.add_layer(circuit, gate = cirq.ZZ, prefix='zz'+str(i))
builder.add_layer(circuit, gate = cirq.XX, prefix='xx1'+str(i))
return circuit, cirq.Z(readout)
model_circuit, model_readout = create_quantum_model()
클래스
CircuitLayerBuilder
에 대해서는 tutorial/mnist 를 참조. 인접한 양자 비트에 CZ 게이트를 끼웁니다 add_entangler
이런 느낌으로 양자 회로를 만들 수 있다.
github
모델 작성, 학습
모델을 만들 준비가 되었습니다. 모델을 만들어 학습시켜 보자.
회귀 문제로 인해 손실 함수는 mse로 만들었습니다.
model = tf.keras.Sequential([
# The input is the data-circuit, encoded as a tf.string
tf.keras.layers.Input(shape=(), dtype=tf.string),
# The PQC layer returns the expected value of the readout gate, range [-1,1].
tfq.layers.PQC(model_circuit, model_readout),
])
model.compile(
loss=tf.keras.losses.mse,
optimizer=tf.keras.optimizers.Adam(),
metrics=['mae'])
qnn_history = model.fit(
x_train_tfcirc, y_train,
batch_size=25,
epochs=EPOCHS,
verbose=1,
validation_data=(x_test_tfcirc,y_test)
)
테스트 세트와 예측 값의 비교는 아래 그림입니다.
어쩐지 학습할 수 있는 것 같지만, 최대 최소가 작게 나와 있는 것이 신경이 쓰인다. readout은 파울리의 Z 행렬의 기대치이므로 1에서 -1 사이를 취할 수 있는 것이지만,
끝에
우선 TensorFlowQuantum에서 놀 수 있었다. 결함의 원인은 앞으로 생각하기로 한다. TensorFlowQuantum 만져보고 싶어지는 사람이 늘면 기쁘다.
Reference
이 문제에 관하여(TensorFlow Quantum으로 양자 회로 학습), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/koke-saka/items/986e0b35278dda89cbe1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
model = tf.keras.Sequential([
# The input is the data-circuit, encoded as a tf.string
tf.keras.layers.Input(shape=(), dtype=tf.string),
# The PQC layer returns the expected value of the readout gate, range [-1,1].
tfq.layers.PQC(model_circuit, model_readout),
])
model.compile(
loss=tf.keras.losses.mse,
optimizer=tf.keras.optimizers.Adam(),
metrics=['mae'])
qnn_history = model.fit(
x_train_tfcirc, y_train,
batch_size=25,
epochs=EPOCHS,
verbose=1,
validation_data=(x_test_tfcirc,y_test)
)
우선 TensorFlowQuantum에서 놀 수 있었다. 결함의 원인은 앞으로 생각하기로 한다. TensorFlowQuantum 만져보고 싶어지는 사람이 늘면 기쁘다.
Reference
이 문제에 관하여(TensorFlow Quantum으로 양자 회로 학습), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/koke-saka/items/986e0b35278dda89cbe1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)