如何将未知维度的张量乘以张量流变量?

How can I multiply a tensor with an unknown dimension to a tensorflow variable?

我在 Keras (Tensorflow 2) 工作。我想将张量的每个元素与其自身的可训练权重相乘。假设我的输入张量是一维的,有 10 个元素;所以我尝试将输入定义为 Keras 输入张量,将权重定义为 tf.Variable,并且我尝试使用 Keras 乘法层,因此:

import tensorflow as tf
inputs = tf.keras.layers.Input(shape=(10), name='inputs')
weights = tf.Variable(tf.random.normal([10]), name='weights')
outputs = tf.keras.layers.Multiply()([inputs, weights])

现在,当我检查它们的尺寸时:

inputs: shape=(None, 10)
weights: shape=(10,)
outputs: shape=(10, 10)

输入维度有一个None维度,用于批量大小,这是我期望和想要的。但是我希望输出具有 shape=(None, 10)。相反,批量大小的初始尺寸似乎已固定为 10。我应该如何更正此问题?

您需要沿维度 0 传播权重。您要修复的维度的形状必须是恒定的。

也就是说,权重的形状必须是 (1, 10),而不是 (10,)

这可以通过以下方式完成:

weights = tf.Variable(tf.random.normal([1, 10]), name='weights')

weights = tf.Variable(tf.random.normal([10]), name='weights')
...
weights = tf.expand_dims(weights, axis=0)