2022年6月号 Interface の「ゲートレベルから実装する機械学習」を試してみた その3

PennyLaneでアヤメのデータを2値分類する

機械学習でアヤメの分類を行います。

前回ステップ1まで実行したのでステップ2を行ってみます。

 

古典量子ハイブリッド



ステップ2:量子回路の部分を実装

 

layerメソッドで量子回路の1層分の量子ゲートを作成しています。

引数Wは重みを表すパラメータです。

2個のROTゲートと1個のゲートを組み合わせて1層としています。

 

#量子回路の1層分
def layer(W):
  qml.Rot(W[0,0], W[0,1], W[0,2], wires=0)
  qml.Rot(W[1,0], W[1,1], W[1,2], wires=1)
  qml.CNOT(wires=[0,1])

@qml.qnode(dev)
def circuit(weights,angles):
  statepreparation(angles)

  for W in weights:
    layer(W)

  return qml.expval(qml.PauliZ(0))
 
量子回路を可視化します。
 
from pennylane.math import requires_grad
num_qubits = 2 
num_layers = 6

weights = 0.01 *np.random.randn(
    num_layers,num_qubits,3,requires_grad=False)

x = np.array(
    [ 0.53896774 , 0.79503606 , 0.27826503 , 0.0 ] ,
    requires_grad=False)

ang = get_angles(x)

flg,ax = qml.draw_mpl(circuit)(weights,ang)
fig.show()
 
実行したところ、MatPlotlibから非推奨です。というWarningが...。
まあ、表示されたのでそのまま進めます。

量子回路の可視化

 

量子回路の可視化を実行して表示された図で、前半の部分はステップ1の符号化の個所です。

(以下の部分)

符号化

 

 

 

/* -----codeの行番号----- */