Chcę porównać przewidywane wartości yp
z mojej sieci neuronowych w modzie parami, a więc używałem (w moim starym numpy realizacji):TensorFlow: numpy.repeat() alternatywa
idx = np.repeat(np.arange(len(yp)), len(yp))
jdx = np.tile(np.arange(len(yp)), len(yp))
s = yp[[idx]] - yp[[jdx]]
ten po prostu stwórz siatkę indeksującą, którą następnie wykorzystam. idx=[0,0,0,1,1,1,...]
podczas gdy jdx=[0,1,2,0,1,2...]
. Nie wiem, czy jest prostszy sposób robienia tego ...
W każdym razie TensorFlow ma tf.tile()
, ale wydaje się brakować tf.repeat()
.
idx = np.repeat(np.arange(n), n)
v2 = v[idx]
I pojawia się błąd:
TypeError: Bad slice index [ 0 0 0 ..., 215 215 215] of type <type 'numpy.ndarray'>
To również nie działa użyć stałej TensorFlow do indeksowania:
idx = tf.constant(np.repeat(np.arange(n), n))
v2 = v[idx]
-
TypeError: Bad slice index Tensor("Const:0", shape=TensorShape([Dimension(46656)]), dtype=int64) of type <class 'tensorflow.python.framework.ops.Tensor'>
The Pomysł polega na konwersji mojego RankNet wdrożenie do TensorFlow.
Czy w kodzie jest błąd? Pobiegłem z 'len (yp) == 4', a wyjście' idx' było '[0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3]' a nie '[0,0,0, 1,1,1, ...] ". – Clash
Dodanie wywołania 'tf.transpose' po wstawieniu kafelka otrzymuje poprawne wyjście' [0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3] '. Poprawną linią jest 'idx = tf.transpose (tf.tile (idx, [len (yp), 1]))'? – Clash
Dobry połów - odpowiedź w rzeczywistości dawała zbyt długi sposób obliczania "jdx"! Zaktualizowałem go, aby wyjaśnić, w jaki sposób można obliczyć "idx" i "jdx". – mrry