0

Je veux définir une opération en tensorflow qui calcule quelque chose comme:tensorflow définir une opération qui construit le produit de tous les composants du tenseur

enter image description here

x est fourni par un tenseur. Enfin, l'opération doit être comparée à une valeur connue et les paramètres alpha, beta i et b doivent être appris.

(Je suppose) Le produit de toutes les entrées cause des problèmes. C'est une version que j'ai essayé de déployer, sans succès. # entrée X = tf.placeholder (tf.float32, [Aucun, 2], name = "X") Y = tf.placeholder (tf.float32, [Aucun, 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) 

l'exécution du script complet de essentiel https://gist.github.com/anonymous/c17d45b4e997bfccb5275dffa44512d6 se traduit par le message d'erreur:

File "h2o_test_opti.py", line 13, in productLayer = tf.contrib.keras.layers.multiply(powered) ValueError: A merge layer should be called on a list of inputs.

Je pensais que la describtion fonctionnalité de tf.contrib.keras.layers.multiply correspond à mes besoins. J'ai aussi essayé de trouver une manière naïve comme une boucle pour calculer le produit de tous les éléments tensoriels entrants, mais sans succès, car je ne pouvais pas imaginer un moyen d'accéder correctement au tenseur. Choisir les bons indices n'est pas (?) Possible, car je ne connais pas l'étape en cours et donc le bon tenseur à traiter?

Je veux tester cela comme une « fonction d'activation » (bien plus que la procédure d'optimisation/montage)

S'il vous plaît laissez-moi savoir s'il y a plus d'informations nécessaires pour aider à ce problème.

Répondre

0

J'ai trouvé une solution de travail à mon idée en changer:

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

à:

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

Il devrait fonctionner. Peut-être que quelqu'un peut l'utiliser aussi.