сохранить подпись модели множественного ввода keras с помощью Предиката_игната_дефа - PullRequest
0 голосов
/ 14 июня 2019

Я строю модель с несколькими входами следующим образом (упрощенная модель)

model_heads = []
input1 = Input(shape=(batch_input_shape[1], batch_input_shape[2]))
input2 = Input(shape=(batch_input_shape[1], batch_input_shape[2]))
inputs = [input1, input2]

model_layer = Conv1D(filters=8, kernel_size=2, padding='causal', dilation_rate=1, activation='relu', input_shape=(batch_input_shape[1], batch_input_shape[2]), kernel_initializer='he_normal')(inputs[0])
model_layer = MaxPooling1D(2)(model_layer)
model_heads.append(model_layer)
model_layer = Conv1D(filters=16, kernel_size=4, padding='causal', dilation_rate=1, activation='relu', input_shape=(batch_input_shape[1], batch_input_shape[2]), kernel_initializer='he_normal')(inputs[1])
model_layer = MaxPooling1D(4)(model_layer)
model_heads.append(model_layer)
flat_out = []
for j in model_heads:
    flat_out.append(Flatten()(j))
merged = concatenate(flat_out)
merged = Dense(100, activation=self.activation)(merged)
self.model = Model(inputs=inputs, outputs=output)
            self.model.compile(loss='binary_crossentropy', optimizer=self.opt, metrics=['accuracy'])

Я кормлю ввод и запускаю тренировку в порядке, но затем я сохраняю модель следующим образом:

builder = tf.saved_model.builder.SavedModelBuilder(persistencydir + '/saved.' + str(start_prediction) + "." + str(end_prediction))
signature = tf.saved_model.signature_def_utils.predict_signature_def(inputs={'the_input': self.model.input}, outputs={'the_output': self.model.output})
builder.add_meta_graph_and_variables(sess, [tf.saved_model.tag_constants.SERVING], signature_def_map={tf.saved_model.signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY: signature})
builder.save()

Это, конечно, жалуется, потому что predict_signature_def ожидает тензор для входных данных, но вместо этого получает список Python:

  File "/home/myname/myutils/anaconda3/envs/tmp_merge/lib/python3.6/site-packages/tensorflow/python/saved_model/signature_def_utils_impl.py", line 205, in predict_signature_def
    for key, tensor in inputs.items()}
  File "/home/myname/myutils/anaconda3/envs/tmp_merge/lib/python3.6/site-packages/tensorflow/python/saved_model/signature_def_utils_impl.py", line 205, in <dictcomp>
    for key, tensor in inputs.items()}
  File "/home/myname/myutils/anaconda3/envs/tmp_merge/lib/python3.6/site-packages/tensorflow/python/util/deprecation.py", line 324, in new_func
    return func(*args, **kwargs)
  File "/home/myname/myutils/anaconda3/envs/tmp_merge/lib/python3.6/site-packages/tensorflow/python/saved_model/utils_impl.py", line 58, in build_tensor_info
    dtype=dtypes.as_dtype(tensor.dtype).as_datatype_enum,
AttributeError: 'list' object has no attribute 'dtype'

Есть ли другой способ сохранить подпись? В качестве альтернативы возможно построить Модель с несколькими входами, используя один Тензор, состоящий из исходных входов (input1 и input2 в моем примере). Все примеры, которые я видел, похожи на те, что у меня здесь, но я не нашел пример, который также сохраняет подпись ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...