Ошибка значения: не удалось интерпретировать идентификатор оптимизатора: False с помощью Tensorflow 2.3

#python #tensorflow #machine-learning #elephas

#python #tensorflow #машинное обучение #elephas

Вопрос:

Я использую Tensorflow 2.3 и пытаюсь инициализировать следующий LSTM

 from keras.layers import Dense, Activation,Input, LSTM, Dropout
from keras.optimizers import Adam
from keras.models import Model, Sequential

def create_model() -> Model:
    """
    Create the Deep Learning model
    :return the created model
    """
    input_student = Input(shape=(360,97,), dtype='float')


    lstm = LSTM(
          units=97,
          dropout=0.5,
          recurrent_dropout=0.5,
          return_sequences=False,
          return_state=False
      )(input_student)
    print(lstm)
    lstm = Dropout(0.5)(lstm)
    output = Dense(1, activation="sigmoid")(lstm)

    optim = Adam(lr=0.001)
    model = Model(inputs=input_student, outputs=output)
    model.compile(
      loss="binary_crossentropy", optimizer=optim
    )

    model.summary()
    return model
  

Если я пытаюсь использовать Elephas для обучения сети, я получаю следующую ошибку

 >>> Fit model
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-18-fcce77bcaaa0> in <module>()
----> 1 spark_model.fit(rdd, epochs=5, batch_size=32, verbose=1, validation_split=0.3)

7 frames
/usr/local/lib/python3.6/dist-packages/elephas/spark_model.py in fit(self, rdd, epochs, batch_size, verbose, validation_split)
    149 
    150         if self.mode in ['asynchronous', 'synchronous', 'hogwild']:
--> 151             self._fit(rdd, epochs, batch_size, verbose, validation_split)
    152         else:
    153             raise ValueError(

/usr/local/lib/python3.6/dist-packages/elephas/spark_model.py in _fit(self, rdd, epochs, batch_size, verbose, validation_split)
    159         self._master_network.compile(optimizer=self.master_optimizer,
    160                                      loss=self.master_loss,
--> 161                                      metrics=self.master_metrics)
    162         if self.mode in ['asynchronous', 'hogwild']:
    163             self.start_server()

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py in compile(self, optimizer, loss, metrics, loss_weights, weighted_metrics, run_eagerly, **kwargs)
    539       self._run_eagerly = run_eagerly
    540 
--> 541       self.optimizer = self._get_optimizer(optimizer)
    542       self.compiled_loss = compile_utils.LossesContainer(
    543           loss, loss_weights, output_names=self.output_names)

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py in _get_optimizer(self, optimizer)
    565       return opt
    566 
--> 567     return nest.map_structure(_get_single_optimizer, optimizer)
    568 
    569   @trackable.no_automatic_dependency_tracking

/usr/local/lib/python3.6/dist-packages/tensorflow/python/util/nest.py in map_structure(func, *structure, **kwargs)
    633 
    634   return pack_sequence_as(
--> 635       structure[0], [func(*x) for x in entries],
    636       expand_composites=expand_composites)
    637 

/usr/local/lib/python3.6/dist-packages/tensorflow/python/util/nest.py in <listcomp>(.0)
    633 
    634   return pack_sequence_as(
--> 635       structure[0], [func(*x) for x in entries],
    636       expand_composites=expand_composites)
    637 

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py in _get_single_optimizer(opt)
    559 
    560     def _get_single_optimizer(opt):
--> 561       opt = optimizers.get(opt)
    562       if (self._dtype_policy.loss_scale is not None and
    563           not isinstance(opt, lso.LossScaleOptimizer)):

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/optimizers.py in get(identifier)
    901   else:
    902     raise ValueError(
--> 903         'Could not interpret optimizer identifier: {}'.format(identifier))

ValueError: Could not interpret optimizer identifier: False
  

Но я не могу понять, что происходит, поскольку я использую импорт не из Keras, а из Tensorflow, как указано в других ответах здесь, на SO.
Кто-нибудь может мне помочь?

Комментарии:

1. Код в вашем вопросе, похоже, совершенно не связан с ошибкой, все начинается в spark_model.fit (rdd, epochs = 5, batch_size= 32, verbose = 1, validation_split = 0.3), где оптимизатор поступает из self.master_optimizer, поэтому вам придется предоставить дополнительную информацию, чтобы помочь вам

Ответ №1:

Я попытался воспроизвести проблему в последней версии 1.0.0 с помощью Tensorflow 2.3.0:https://github.com/danielenricocahall/elephas/releases/tag/1.0.0 и я не смог. Elephas не был полностью совместим с Tensorflow 2.x API до этого выпуска, поэтому я бы рекомендовал повторить попытку.