Tensorflow определяет операцию, которая строит произведение всех компонентов тензора

Я хочу определить операцию в тензорном потоке, которая вычисляет что-то вроде:

введите здесь описание изображения

x обеспечивается тензором. Наконец, операция должна быть сравнена с известным значением и должны быть изучены параметры alpha, beta i и b.

(Я думаю) результат всех входов вызывает проблемы. Это одна из версий, которую я безуспешно пытался развернуть. # input X = tf.placeholder (tf.float32, [None, 2], name = "X") Y = tf.placeholder (tf.float32, [None, 1], name = "Y")

# hidden
beta = tf.get_variable("beta", shape=[2], initializer=tf.contrib.layers.xavier_initializer())
powered = tf.pow(X,beta)
productLayer = tf.contrib.keras.layers.multiply(powered) # bad line

# output
w_o = tf.get_variable("w_o", shape=[1], initializer=tf.contrib.layers.xavier_initializer())
b_o = tf.get_variable("bias", shape=[1], initializer=tf.zeros([1]))

output = tf.add(tf.matmul(productLayer,w_o), b_o)
loss = tf.reduce_sum(tf.square(output - Y)) # tf.nn.l2_loss(yhat - Y)

Запуск полного сценария из gist https://gist.github.com/anonymous/c17d45b4e997bfccb5275d6ffa4 is45 в результате появляется сообщение об ошибке:

Файл "h2o_test_opti.py", строка 13, в productLayer = tf.contrib.keras.layers.multiply (powered) ValueError: слой слияния должен вызываться для списка входных данных.

Я подумал, что описание функций tf.contrib.keras.layers.multiply соответствует моим потребностям. Я также попытался найти наивный способ, например цикл for, для вычисления произведения всех входящих тензорных элементов, но безуспешно, так как я не мог представить себе способ получить доступ к тензору правильным способом. Выбор правильных индикаторов невозможен (?), Поскольку я не знаю текущий шаг и, следовательно, правильный тензор для обработки?

Я хочу протестировать это как «функцию активации» (точнее, как процедуру оптимизации / подгонки).

Пожалуйста, дайте мне знать, если для решения этой проблемы потребуется дополнительная информация.


person user2129910    schedule 20.07.2017    source источник


Ответы (1)


Я нашел рабочее решение своей идеи, изменив:

    productLayer = tf.contrib.keras.layers.multiply(powered) # bad line

to:

    productLayer = tf.reshape(tf.reduce_prod(X,1), (-1,1))

Он должен работать. Может быть, кому-то это тоже пригодится.

person user2129910    schedule 26.07.2017