Keras顺序API:在多个输入上调用model.predict的问题

时间:2018-12-19 22:26:48

标签: python tensorflow keras

我在使用顺序API定义的模型上调用model.predict时遇到问题。使用功能性API似乎可以正常工作。也许这与顺序/功能无关,而我只是一个错误。

使用具有多个输入的keras顺序API,我有这个玩具模型:

left_branch = keras.models.Sequential()
left_branch.add(keras.layers.Dense(32, input_dim=784))

right_branch = keras.models.Sequential()
right_branch.add(keras.layers.Dense(32, input_dim=784))

merged = keras.layers.Concatenate([left_branch, right_branch])

final_model = keras.models.Sequential()
final_model.add(merged)
final_model.add(keras.layers.Dense(10, activation='softmax'))

当我这样调用model.predict时:

x1 = np.random.random_sample(size = [1,784])
x2 = np.random.random_sample(size = [1,784])
final_model.predict([x1,x2])

我得到了错误:AttributeError: 'list' object has no attribute 'shape',即使两个列表项都是np数组。完整错误如下。

当我在功能性API中编写相同模型的代码时,错误不会出现

x1 = keras.layers.Input(shape=(784,))
left_branch = keras.layers.Dense(32)(x1)

x2 = keras.layers.Input(shape=(784,))
right_branch = keras.layers.Dense(32)(x2)

merged = keras.layers.Concatenate()([x1, x2])
out = keras.layers.Dense(10, activation='softmax')(merged)

final_model = keras.models.Model(inputs=[x1, x2], outputs=out)

这是顺序模型的完整错误输出:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-41-4b45e1bec6dd> in <module>()
      1 x1 = np.random.random_sample(size = [1,784])
      2 x2 = np.random.random_sample(size = [1,784])
----> 3 final_model.predict([x1,x2])

/Library/Python/2.7/site-packages/tensorflow/python/keras/engine/training.pyc in predict(self, x, batch_size, verbose, steps)
   1750     # Validate and standardize user data.
   1751     x, _, _ = self._standardize_user_data(
-> 1752         x, check_steps=True, steps_name='steps', steps=steps)
   1753 
   1754     if context.executing_eagerly():

/Library/Python/2.7/site-packages/tensorflow/python/keras/engine/training.pyc in _standardize_user_data(self, x, y, sample_weight, class_weight, batch_size, check_steps, steps_name, steps, validation_split)
    991       x, y = next_element
    992     x, y, sample_weights = self._standardize_weights(x, y, sample_weight,
--> 993                                                      class_weight, batch_size)
    994     return x, y, sample_weights
    995 

/Library/Python/2.7/site-packages/tensorflow/python/keras/engine/training.pyc in _standardize_weights(self, x, y, sample_weight, class_weight, batch_size)
   1027       if not self.inputs:
   1028         is_build_called = True
-> 1029         self._set_inputs(x)
   1030 
   1031     if y is not None:

/Library/Python/2.7/site-packages/tensorflow/python/training/checkpointable/base.pyc in _method_wrapper(self, *args, **kwargs)
    424     self._setattr_tracking = False  # pylint: disable=protected-access
    425     try:
--> 426       method(self, *args, **kwargs)
    427     finally:
    428       self._setattr_tracking = previous_value  # pylint: disable=protected-access

/Library/Python/2.7/site-packages/tensorflow/python/keras/engine/training.pyc in _set_inputs(self, inputs, training)
   1219         self.build(input_shape=input_shape)
   1220       else:
-> 1221         input_shape = (None,) + inputs.shape[1:]
   1222         self.build(input_shape=input_shape)
   1223     if context.executing_eagerly():

AttributeError: 'list' object has no attribute 'shape'

0 个答案:

没有答案