Comment explicitement la diffusion d'un tenseur pour correspondre à une autre forme dans tensorflow?

J'ai trois tenseurs, A, B and C dans tensorflow, A et B sont à la fois de la forme (m, n, r), C est un tenseur binaire de la forme (m, n, 1).

Je veux sélectionner les éléments à partir de A ou B selon la valeur de C. L'outil idéal est tf.select, cependant que ne pas avoir de radiodiffusion de la sémantique, donc je dois tout d'abord explicitement la diffusion C à la même forme que le A et le B.

Ce serait ma première tentative à la façon de le faire, mais il ne m'aime pas le mélange d'un tenseur (tf.shape(A)[2]) dans la liste de forme.

import tensorflow as tf
A = tf.random_normal([20, 100, 10])
B = tf.random_normal([20, 100, 10])
C = tf.random_normal([20, 100, 1])
C = tf.greater_equal(C, tf.zeros_like(C))

C = tf.tile(C, [1,1,tf.shape(A)[2]])
D = tf.select(C, A, B)

Quelle est la bonne approche ici?

  • Un hack qui fonctionne: je peux utiliser la radiodiffusion et la sémantique de se multiplier et de se multiplier par ceux tenseur ainsi: Expander = tf.ones_like(B), puis C = Expander*C
InformationsquelleAutor wxs | 2015-12-18