Как умножить матрицу с фиксированным весом на вывод слоя keras - PullRequest
0 голосов
/ 14 апреля 2020

Я столкнулся с проблемой, когда намеревался умножить вывод керас с постоянным тензором? вот мой код

a = tf.constant(ws, "float32")
output4 = AveragePooling3D(pool_size=(X_shape[0], 1, 1), strides = None, padding='valid')(output3)
output5 = Conv3D(filters=X_shape[3], kernel_size=(1, 1, 1),padding='same',data_format='channels_last')(output4)
output6 = Lambda( tf.multiply(output5, a))(output5)

вот моя ошибка "

ValueError: Tensor (" Const: 0 ", shape = (1, 1, 21, 27, 3), dtype = float32) должен быть из того же графика, что и Tensor ("conv3d_1 / add: 0", shape = (None, 1, 21, 27, 3), dtype = float32).

Заранее спасибо за помощь!

1 Ответ

0 голосов
/ 14 апреля 2020

Поскольку вы используете функциональный API, постоянный тензор необходимо указывать либо как входные данные для модели, либо как конструктор объекта, наследуемого для Layer.

Метод 1 (предпочтительно) - В качестве входных данных для пользовательского слоя:

class ConstMul(tf.keras.layers.Layer):
    def __init__(self, const_val, *args, **kwargs):
        ....
        self.const = const_val

    def call(self, inputs, **kwargs):
        return inputs * self.const

....
output6 = ConstMul(ws)(output5)

Метод 2 - В качестве отдельного входного слоя:

const_inp = Input(shape)
....
output6 = tf.multiply(output5, const_inp)

Затем добавьте const_inp к списку входов в модель. Это не лучший способ.

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