Вызов инициализированного tf.keras.Model дает несоответствие размеров в слое Dropout в модели. - PullRequest
0 голосов
/ 06 июня 2019

Я пытаюсь сохранить модель TF Keras с двумя выпадающими слоями, включенными в модель (это модель внимания - первый выпадение относится к весам внимания, а второй - к общему результату слоя). Однако, когда я использую эту модель и вызываю ее, используя 2 параметра, я получаю сообщение об ошибке, говорящее о том, что между моими входами есть несоответствия размерности, и я не уверен, откуда это исходит.

Я не могу опубликовать код. Я знаю, что это немного расплывчато, но я могу опубликовать трассировку ниже. Любое предложение о том, что проверить / что может пойти не так, что я должен рассмотреть, будет очень признателен. Спасибо!

Мой общий код будет:

inputs = tf.keras.Input(shape=(...), name="inputs")
mask = tf.keras.Input(shape=(..., name="mask")

# perform attention computation
attention = ...
attention = tf.keras.layers.Dropout(rate=0.1)(attention)
outputs = tf.keras.layers.Dense(units=..., activation="relu")(attention + inputs)
outputs = Normalize(outputs)

model = tf.keras.Model([inputs, mask], outputs)

model_inputs = tf.keras.Input(shape=(...), name="model_inputs")
model_outputs = tf.keras.Dropout(rate=0.1)(model_inputs)
model_mask = tf.keras.Input(shape=(...), name="model_mask")
model_outputs = model([outputs, model_mask])

Ошибка:

Traceback (most recent call last):
  File "/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/tensorflow/python/keras/engine/base_layer.py", line 562, in __call__
    outputs = self.call(inputs, *args, **kwargs)
  File "/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/tensorflow/python/keras/engine/network.py", line 822, in call
    mask=masks)
  File "/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/tensorflow/python/keras/engine/network.py", line 1010, in _run_internal_graph
    output_tensors = layer.call(computed_tensor, **kwargs)
  File "/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/tensorflow/python/keras/engine/base_layer.py", line 1822, in call
    return self._make_op(inputs)
  File "/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/tensorflow/python/keras/engine/base_layer.py", line 1837, in _make_op
    c_op = ops._create_c_op(graph, self.node_def, inputs, control_inputs=[])
  File "/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/tensorflow/python/framework/ops.py", line 1664, in _create_c_op
    raise ValueError(str(e))
ValueError: Dimensions must be equal, but are 256 and 0 for 'encode_layer_0/tf_op_layer_tony/cond/dropout/random_uniform/mul/tony/cond/dropout/random_uniform/mul' (op: 'Mul') with input shapes: [?,?,256], [0].

edit: исправлен "код". Я хотел написать model_inputs. Код, который я разместил здесь, не является настоящим кодом, он просто похож на другой. Это может быть очень хорошо, когда я делаю вычисления веса внимания, но я не уверен, что искать, так как код довольно длинный. Спасибо!

...