Я строю модель глубокой нейронной сети с несколькими выходами. Я хочу использовать разные оптимизаторы для каждого выхода. Я попытался передать словарь оптимизаторов для каждого вывода в соответствии с их именем.
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 позволяет передавать только один оптимизатор.
Есть ли альтернативное решение для этого?