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

时间:2020-04-24 16:37:18

标签: tensorflow keras tf.keras

我在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。

1 个答案:

答案 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)