5

Czytam Convolutional Neural Networks tutorial. Chcę wizualizować dane wyjściowe każdej warstwy po przeszkoleniu modelu. Na przykład w funkcji "assess_lenet5" chcę przekazać instancję (która jest obrazem) do sieci i zobaczyć wynik każdej warstwy i klasę, która została wyszkolona dla sieci neuronowej dla danych wejściowych. Pomyślałem, że może to być łatwe, jak robienie produktów z kropek na obrazku i wektor wagowy każdej warstwy, ale to w ogóle nie działało.Wizualizuj wynik każdej warstwy w theano Convolutional MLP

Mam przedmiotów każdej warstwy jak:

# Reshape matrix of rasterized images of shape (batch_size, 28 * 28) 
# to a 4D tensor, compatible with our LeNetConvPoolLayer 
# (28, 28) is the size of MNIST images. 
layer0_input = x.reshape((batch_size, 1, 28, 28)) 

# Construct the first convolutional pooling layer: 
# filtering reduces the image size to (28-5+1 , 28-5+1) = (24, 24) 
# maxpooling reduces this further to (24/2, 24/2) = (12, 12) 
# 4D output tensor is thus of shape (batch_size, nkerns[0], 12, 12) 
layer0 = LeNetConvPoolLayer(
    rng, 
    input=layer0_input, 
    image_shape=(batch_size, 1, 28, 28), 
    filter_shape=(nkerns[0], 1, 5, 5), 
    poolsize=(2, 2) 
) 

# Construct the second convolutional pooling layer 
# filtering reduces the image size to (12-5+1, 12-5+1) = (8, 8) 
# maxpooling reduces this further to (8/2, 8/2) = (4, 4) 
# 4D output tensor is thus of shape (batch_size, nkerns[1], 4, 4) 
layer1 = LeNetConvPoolLayer(
    rng, 
    input=layer0.output, 
    image_shape=(batch_size, nkerns[0], 12, 12), 
    filter_shape=(nkerns[1], nkerns[0], 5, 5), 
    poolsize=(2, 2) 
) 

# the HiddenLayer being fully-connected, it operates on 2D matrices of 
# shape (batch_size, num_pixels) (i.e matrix of rasterized images). 
# This will generate a matrix of shape (batch_size, nkerns[1] * 4 * 4), 
# or (500, 50 * 4 * 4) = (500, 800) with the default values. 
layer2_input = layer1.output.flatten(2) 

# construct a fully-connected sigmoidal layer 
layer2 = HiddenLayer(
    rng, 
    input=layer2_input, 
    n_in=nkerns[1] * 4 * 4, 
    n_out=500, 
    activation=T.tanh 
) 

# classify the values of the fully-connected sigmoidal layer 
layer3 = LogisticRegression(input=layer2.output, n_in=500, n_out=10) 

Więc można zaproponować sposób wizualizacji próbkę rozpatrzenie krok po kroku obrazu sieć neuronowa jest przeszkolony?

Odpowiedz

6

To nie jest takie trudne. Jeśli używasz tej samej definicji klasy LeNetConvPoolLayer z samouczka głębokiego uczenia Theano, następnie wystarczy skompilować funkcję z x jako wejście i [LayerObject].output jako wyjście (gdzie LayerObject może być dowolny obiekt warstwa jak layer0, Layer1 itd. w zależności od tego warstwa można dokonać wizualizacji.

vis_layer1 = funkcja ([x] [layer1.output])

Przekaż (lub wiele) próbkę (dokładnie w jaki sposób wprowadziłeś tensor wejściowy podczas treningu), a otrzymasz wynik tej konkretnej warstwy, dla której została skompilowana twoja funkcja.

Uwaga: W ten sposób otrzymasz wyjść w dokładnie tym samym kształcie model jest używany w obliczeniach. Można jednak przekształcić go tak, jak chcesz, zmieniając zmienną wyjściową, taką jak layer1.output.flatten(n).

Powiązane problemy