не может сохранить квантовую модель tenorrflow keras, используя save / pickle - PullRequest
0 голосов
/ 14 марта 2020

как сохранить тензор потока квантовой модели? Я получаю следующее, когда пытаюсь сохранить модель Кераса с помощью квантовых цепей. Я не нашел поддержки для того же. tenorflow: Слой add_circuit_2 был передан несериализуемым аргументам ключевого слова тензор потока: Слой add_circuit_2 был передан несериализуемым аргументам ключевого слова тензор потока: Слой add_circuit_2 был передан несериализуемым аргументам с ключевым словом

    WARNING:tensorflow:Layer add_circuit_2 was passed non-serializable keyword arguments: {'prepend': 
    cirq.Circuit([
    cirq.Moment(operations=[
    cirq.H.on(cirq.GridQubit(0, 0)),
    cirq.H.on(cirq.GridQubit(0, 1)),
    cirq.H.on(cirq.GridQubit(0, 2)),
    cirq.H.on(cirq.GridQubit(0, 3)),
    cirq.H.on(cirq.GridQubit(1, 0)),
    cirq.H.on(cirq.GridQubit(1, 1)),
    cirq.H.on(cirq.GridQubit(1, 2)),
    cirq.H.on(cirq.GridQubit(1, 3)),
    cirq.H.on(cirq.GridQubit(2, 0)),
    cirq.H.on(cirq.GridQubit(2, 1)),
    cirq.H.on(cirq.GridQubit(2, 2)),
    cirq.H.on(cirq.GridQubit(2, 3)),
    cirq.H.on(cirq.GridQubit(3, 0)),
    cirq.H.on(cirq.GridQubit(3, 1)),
    cirq.H.on(cirq.GridQubit(3, 2)),
    cirq.H.on(cirq.GridQubit(3, 3)),
]),
cirq.Moment(operations=[
    cirq.CZ.on(cirq.GridQubit(0, 0), cirq.GridQubit(0, 1)),
]),
cirq.Moment(operations=[
    cirq.CZ.on(cirq.GridQubit(0, 1), cirq.GridQubit(0, 2)),
]),
cirq.Moment(operations=[
    cirq.CZ.on(cirq.GridQubit(0, 2), cirq.GridQubit(0, 3)),
]),
cirq.Moment(operations=[
    cirq.CZ.on(cirq.GridQubit(0, 3), cirq.GridQubit(1, 0)),
]),
cirq.Moment(operations=[
    cirq.CZ.on(cirq.GridQubit(1, 0), cirq.GridQubit(1, 1)),
]),
cirq.Moment(operations=[
    cirq.CZ.on(cirq.GridQubit(1, 1), cirq.GridQubit(1, 2)),
]),
cirq.Moment(operations=[
    cirq.CZ.on(cirq.GridQubit(1, 2), cirq.GridQubit(1, 3)),
]),
cirq.Moment(operations=[
    cirq.CZ.on(cirq.GridQubit(1, 3), cirq.GridQubit(2, 0)),
]),
cirq.Moment(operations=[
    cirq.CZ.on(cirq.GridQubit(2, 0), cirq.GridQubit(2, 1)),
]),
cirq.Moment(operations=[
    cirq.CZ.on(cirq.GridQubit(2, 1), cirq.GridQubit(2, 2)),
]),
cirq.Moment(operations=[
    cirq.CZ.on(cirq.GridQubit(2, 2), cirq.GridQubit(2, 3)),
]),
cirq.Moment(operations=[
    cirq.CZ.on(cirq.GridQubit(2, 3), cirq.GridQubit(3, 0)),
]),
cirq.Moment(operations=[
    cirq.CZ.on(cirq.GridQubit(3, 0), cirq.GridQubit(3, 1)),
]),
cirq.Moment(operations=[
    cirq.CZ.on(cirq.GridQubit(3, 1), cirq.GridQubit(3, 2)),
]),
cirq.Moment(operations=[
    cirq.CZ.on(cirq.GridQubit(3, 2), cirq.GridQubit(3, 3)),
]),
cirq.Moment(operations=[
    cirq.CZ.on(cirq.GridQubit(3, 3), cirq.GridQubit(0, 0)),
]),])}. 
They will not be included in the serialized model (and thus will be missing at deserialization time).
---------------------------------------------------------------------------
NotImplementedError                       Traceback (most recent call last)
<ipython-input-91-a74ee5c9d34d> in <module>()
----> 1 qcnn_model.save('qcnn_model.h5')

8 frames
/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/engine/base_layer.py in 
get_config(self)
497     # or that `get_config` has been overridden:
498     if len(extra_args) > 1 and hasattr(self.get_config, '_is_default'):
--> 499       raise NotImplementedError('Layers with arguments in `__init__` must '
500                                 'override `get_config`.')
501     return config

NotImplementedError: Layers with arguments in `__init__` must override `get_config`.

1 Ответ

1 голос
/ 15 марта 2020

TensorFlow Quantum пока не реализует get_config и load_config. У нас были некоторые трудности с сохранением определенных объектов Cirq, мы работаем над этим.

На данный момент, если вы хотите сохранить модели, содержащие квантовые слои, вы можете использовать функцию

model = tf.keras.Model(...)
model.save_weights("some_path")
...
model.load_weights("some_path")

.

...