Non so una funzione di supporto, ma se si desidera vedere tutti i filtri è possibile comprimerli in un'unica immagine con alcuni usi fantasiosi di tf.transpose
.
Quindi, se si dispone di un tensore che è images
x ix
x iy
x channels
>>> V = tf.Variable()
>>> print V.get_shape()
TensorShape([Dimension(-1), Dimension(256), Dimension(256), Dimension(32)])
Quindi in questo esempio ix = 256
, iy=256
, channels=32
prima fetta off 1 immagine, e rimuovere la dimensione image
V = tf.slice(V,(0,0,0,0),(1,-1,-1,-1)) #V[0,...]
V = tf.reshape(V,(iy,ix,channels))
Successivamente aggiungere un paio di pixel di padding a zero intorno all'immagine
ix += 4
iy += 4
V = tf.image.resize_image_with_crop_or_pad(image, iy, ix)
Poi rimodellare in modo che invece di 32 canali avete canali 4x8, permette di chiamarli cy=4
e cx=8
.
V = tf.reshape(V,(iy,ix,cy,cx))
Ora la parte difficile. tf
sembra restituire risultati in ordine C, impostazione predefinita di numpy.
L'ordine corrente, se appiattito, sarebbe elencare tutti i canali per il primo pixel (l'iterazione di cx
e cy
), prima di elencare i canali del secondo pixel (incrementando ix
). Attraversare le righe di pixel (ix
) prima di passare alla riga successiva (iy
).
Vogliamo l'ordine per disporre le immagini in una griglia. Quindi si attraversa una riga di un'immagine (ix
), prima di spostarsi lungo la fila di canali (cx
), quando si preme la fine della fila di canali si passa alla riga successiva nell'immagine (iy
) e quando si esaurire o righe nell'immagine si incrementa alla successiva riga di canali (cy
). così:
V = tf.transpose(V,(2,0,3,1)) #cy,iy,cx,ix
Personalmente preferisco np.einsum
per traspone fantasia, per migliorare la leggibilità, ma non è in tf
yet.
newtensor = np.einsum('yxYX->YyXx',oldtensor)
in ogni caso, ora che i pixel sono nel giusto ordine, possiamo tranquillamente appiattirla in un tensore 2d:
# image_summary needs 4d input
V = tf.reshape(V,(1,cy*iy,cx*ix,1))
provare tf.image_summary
su questo, si dovrebbe ottenere una griglia di piccole immagini.
Di seguito è riportata un'immagine di ciò che si ottiene dopo aver seguito tutti i passaggi qui.
Grazie per la tua risposta, ero bloccato sulla parte transpose. Ho finito per usare una [versione leggermente diversa] (https://gist.github.com/panmari/4622b78ce21e44e2d69c) visto che sto bene vedendo solo le prime convoluzioni (non ho bisogno di assemblarle tutte in un griglia). La griglia è piuttosto difficile da ispezionare sul tensore. – panmari
Mi sembra che l'ultima fy e fx che hai scritto siano effettivamente cy e cx – jean
Per di più puoi solo passare il tensore 4D a 'tf.image_summary' quindi dovrai rimodellare' V = tf.reshape (V, (1,4 * 256,8 * 256,1)) ' – jean