Альтернатива словарю оптимизаторов в кератах с тензорным потоком в бэкэнде - PullRequest
0 голосов
/ 21 апреля 2020

Я строю модель глубокой нейронной сети с несколькими выходами. Я хочу использовать разные оптимизаторы для каждого выхода. Я попытался передать словарь оптимизаторов для каждого вывода в соответствии с их именем.

optim = {'out_1': keras.optimizers.Adam(.001), 'out_2':keras.optimizers.SGD(.002), 'out_3':keras.optimizers.RMSprop(.003), 'out_4':keras.optimizers.Adam(.004)}
model.compile( optimizer=optim,
                    loss=keras.losses.CategoricalCrossentropy(from_logits=True),
                    loss_weights = new_loss_w)
model.fit(X, Y)

Но это показывает ошибку

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/IPython/core/interactiveshell.py", line 2882, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-32-e9de2e8d895e>", line 4, in <module>
    loss_weights = new_loss_w)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py", line 328, in compile
    self.optimizer = self._get_optimizer(optimizer)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py", line 350, in _get_optimizer
    return nest.map_structure(_get_single_optimizer, optimizer)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/util/nest.py", line 617, in map_structure
    structure[0], [func(*x) for x in entries],
  File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/util/nest.py", line 617, in <listcomp>
    structure[0], [func(*x) for x in entries],
  File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py", line 344, in _get_single_optimizer
    opt = optimizers.get(opt)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/optimizers.py", line 902, in get
    raise ValueError('Could not interpret optimizer identifier:', identifier)
ValueError: ('Could not interpret optimizer identifier:', 0.001)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/IPython/core/interactiveshell.py", line 1823, in showtraceback
    stb = value._render_traceback_()
AttributeError: 'ValueError' object has no attribute '_render_traceback_'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/IPython/core/ultratb.py", line 1132, in get_records
    return _fixed_getinnerframes(etb, number_of_lines_of_context, tb_offset)
  File "/usr/local/lib/python3.6/dist-packages/IPython/core/ultratb.py", line 313, in wrapped
    return f(*args, **kwargs)
  File "/usr/local/lib/python3.6/dist-packages/IPython/core/ultratb.py", line 358, in _fixed_getinnerframes
    records = fix_frame_records_filenames(inspect.getinnerframes(etb, context))
  File "/usr/lib/python3.6/inspect.py", line 1490, in getinnerframes
    frameinfo = (tb.tb_frame,) + getframeinfo(tb, context)
  File "/usr/lib/python3.6/inspect.py", line 1448, in getframeinfo
    filename = getsourcefile(frame) or getfile(frame)
  File "/usr/lib/python3.6/inspect.py", line 696, in getsourcefile
    if getattr(getmodule(object, filename), '__loader__', None) is not None:
  File "/usr/lib/python3.6/inspect.py", line 725, in getmodule
    file = getabsfile(object, _filename)
  File "/usr/lib/python3.6/inspect.py", line 709, in getabsfile
    return os.path.normcase(os.path.abspath(_filename))
  File "/usr/lib/python3.6/posixpath.py", line 383, in abspath
    cwd = os.getcwd()
OSError: [Errno 107] Transport endpoint is not connected

Я проверил, и функция компиляции Keras позволяет передавать только один оптимизатор.

Есть ли альтернативное решение для этого?

...