Closed ikanago closed 2 years ago
よいと思います。
テストを書いてみたんですが、まったく収束しなくて kill されてしまいますね... https://github.com/Qulacs-Osaka/scikit-qulacs/blob/202-multi-value-regression/tests/test_qnn_regressor.py
自分もみてみます。
自分の環境では普通に実行できました。。
def main() -> None:
x_test, y_test, y_pred = test_noisy_sine_two_vars(Bfgs(), 50)
plt.plot(x_test, y_test, "o", label="Test")
plt.plot(x_test, y_pred, "o", label="Prediction")
plt.legend()
plt.show()
plt.savefig("test2.png")
それはもとからあって正常に動いてる2入力1出力のテストなんですが,いま動かないのは2入力2出力の test_noisy_two_vars_two_outputs()
のほうですね
なるほど! test_noisy_two_vars_two_outputs() 見てみます。
190行目で print(grad)
しても一度しか表示されないので,_cost_func_grad
で呼ばれてる backprop
で詰まってるっぽいですね
出力次元数のぶんだけ QNNRegressor
を用意して動かせばいいので,多出力をサポートしないという選択肢もありえますね.
他のライブラリの実装も見てみます.
業務時間外になりましたので、また来週にでも返事を頂ければ。。
test_noisy_two_vars_two_outputs() を実行しました。
なぜか、エラーになりました。。 自分の環境が変?
https://github.com/Qulacs-Osaka/scikit-qulacs/blob/202-multi-value-regression/skqulacs/qnn/regressor.py#L196
の箇所で、"Z {i}"
をf"Z {i}"
にしないといけないような。。
loss値が、0.1499670818098086
となり、assert loss < 0.1
に引っかかってしまいました。。
f"Z {i}"
にしたら loss の値も同じになりました.
これなんで今まで動いてたんでしょうね...
Python はこれを黙って実行しちゃうのでつらいですね...
これなんで今まで動いてたんでしょうね...
n_outputsが2以上になるケースが少ないから、発覚しなかったんですかね。。
QNNRegressor.n_outputs >= 2
の場合のテストケースがなかったので追加しようと思うんですが、f(x, y) = (sin(x + y), cos(x - y))
みたいな2出力関数の回帰とかをやるとよさそうですかね? https://app.codecov.io/gh/Qulacs-Osaka/scikit-qulacs/blob/main/skqulacs/qnn/regressor.py