Как я могу умножить тензор с неизвестным измерением на переменную тензорного потока? - PullRequest
0 голосов
/ 24 апреля 2020

Я работаю в Керасе (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 для размера пакета, чего я и ожидаю. Однако я ожидал, что выходные данные будут иметь форму = (Нет, 10). Вместо этого первоначальный размер для размера партии, кажется, принял фиксированный размер 10. Как мне исправить это?

1 Ответ

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

Вы должны передавать веса по измерению 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)
...