如何将未知维度的张量乘以张量流变量?
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)
我在 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)