我在Keras(Tensorflow 2)工作。我想将张量的每个元素与其可训练的权重相乘。假设我的输入张量是1D,有10个元素;因此,我尝试将输入定义为Keras输入张量,将权重定义为tf.Variable,然后尝试使用Keras Multiply层,因此:
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)
您需要沿尺寸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)