Keras: список массивов Numpy, которые вы передаете своей модели, не соответствует ожидаемому размеру - PullRequest
0 голосов
/ 30 марта 2020

Я реализовал модель Keras, используя функциональный API:

x_inp, x_out = graphsage_model.in_out_tensors()
prediction = layers.Dense(units=train_targets.shape[1], activation="softmax")(x_out)
model = Model(inputs=x_inp, outputs=prediction)
model.compile(
    optimizer=optimizers.Adam(lr=0.005),
    loss=losses.categorical_crossentropy,
    metrics=["acc"],
)

С тензорами:

x_inp:  [<tf.Tensor 'input_1:0' shape=(None, 1, 1433) dtype=float32>, <tf.Tensor 'input_2:0' shape=(None, 10, 1433) dtype=float32>, <tf.Tensor 'input_3:0' shape=(None, 50, 1433) dtype=float32>]
x_out:  Tensor("lambda/Identity:0", shape=(None, 32), dtype=float32)
prediction:  Tensor("dense/Identity:0", shape=(None, 7), dtype=float32)
train_targets.shape[1] = 7

Насколько я понимаю, моя модель имеет 50 единиц в входной слой, 32 в скрытом слое и 7 в выходном слое в подходе функционального API. Чтобы понять, как последовательная модель Keras работает в отличие от функционального API, я попытался реализовать это в последовательном подходе:

model = models.Sequential()
model.add(layers.Dense(32, activation='softmax', input_shape=(50,)))
model.add(layers.Dense(7, activation='softmax'))

Но мне выдается следующая ошибка:

ValueError: Ошибка при проверке ввода модели: список массивов Numpy, которые вы передаете в вашу модель, не соответствует ожидаемому размеру модели. Ожидается увидеть 1 массив (ов), но вместо этого получен следующий список из 3 массивов:

Дополнительная информация о том, как были вычислены x_inp и x_out:

def in_out_tensors(self, multiplicity=None):
    """
    Builds a GraphSAGE model for node or link/node pair prediction, depending on the generator used to construct
    the model (whether it is a node or link/node pair generator).

    Returns:
        tuple: (x_inp, x_out), where ``x_inp`` is a list of Keras input tensors
        for the specified GraphSAGE model (either node or link/node pair model) and ``x_out`` contains
        model output tensor(s) of shape (batch_size, layer_sizes[-1])

    """
    if multiplicity is None:
        multiplicity = self.multiplicity

    if multiplicity == 1:
        return self._node_model()
    elif multiplicity == 2:
        return self._link_model()
    else:
        raise RuntimeError(
            "Currently only multiplicities of 1 and 2 are supported. Consider using node_model or "
            "link_model method explicitly to build node or link prediction model, respectively."
        )

def _node_model(self):
    """
    Builds a GraphSAGE model for node prediction

    Returns:
        tuple: (x_inp, x_out) where ``x_inp`` is a list of Keras input tensors
        for the specified GraphSAGE model and ``x_out`` is the Keras tensor
        for the GraphSAGE model output.

    """
    # Create tensor inputs for neighbourhood sampling
    x_inp = [
        Input(shape=(s, self.input_feature_size)) for s in self.neighbourhood_sizes
    ]

    # Output from GraphSAGE model
    x_out = self(x_inp)

    # Returns inputs and outputs
    return x_inp, x_out
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...