Created
June 24, 2017 21:38
-
-
Save agodatt/70cb02b7172ffe2ed36020f5787daf18 to your computer and use it in GitHub Desktop.
Using visualize_activation on MNIST
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import numpy as np | |
from matplotlib import pyplot as plt | |
plt.rcParams['figure.figsize'] = (18, 6) | |
import keras | |
from vis.utils import utils | |
from vis.utils.vggnet import VGG16 | |
from vis.visualization import visualize_activation, visualize_cam | |
from __future__ import print_function | |
import keras | |
from keras.datasets import mnist | |
from keras.models import Sequential, Model | |
from keras.layers import Dense, Dropout, Flatten, Activation, Input | |
from keras.layers import Conv2D, MaxPooling2D | |
from keras import backend as K | |
batch_size = 128 | |
num_classes = 10 | |
epochs = 2 | |
# input image dimensions | |
img_rows, img_cols = 28, 28 | |
# the data, shuffled and split between train and test sets | |
(x_train, y_train), (x_test, y_test) = mnist.load_data() | |
if K.image_data_format() == 'channels_first': | |
x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols) | |
x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols) | |
input_shape = (1, img_rows, img_cols) | |
else: | |
x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1) | |
x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1) | |
input_shape = (img_rows, img_cols, 1) | |
x_train = x_train.astype('float32') | |
x_test = x_test.astype('float32') | |
x_train /= 255 | |
x_test /= 255 | |
print('x_train shape:', x_train.shape) | |
print(x_train.shape[0], 'train samples') | |
print(x_test.shape[0], 'test samples') | |
# convert class vectors to binary class matrices | |
y_train = keras.utils.to_categorical(y_train, num_classes) | |
y_test = keras.utils.to_categorical(y_test, num_classes) | |
model = Sequential() | |
model.add(Conv2D(32, kernel_size=(3, 3), | |
activation='relu', | |
input_shape=input_shape)) | |
model.add(Conv2D(64, (3, 3), activation='relu')) | |
model.add(MaxPooling2D(pool_size=(2, 2))) | |
model.add(Dropout(0.25)) | |
model.add(Flatten()) | |
model.add(Dense(128, activation='relu')) | |
model.add(Dropout(0.5)) | |
model.add(Dense(num_classes, activation='softmax')) | |
model.compile(loss=keras.losses.categorical_crossentropy, | |
optimizer=keras.optimizers.Adadelta(), | |
metrics=['accuracy']) | |
model.fit(x_train, y_train, | |
batch_size=batch_size, | |
epochs=epochs, | |
verbose=1, | |
validation_data=(x_test, y_test)) | |
score = model.evaluate(x_test, y_test, verbose=0) | |
print('Test loss:', score[0]) | |
print('Test accuracy:', score[1]) | |
model.save('mnist_model.h5') | |
model = keras.models.load_model('mnist_model.h5') | |
last_layer = model.layers[-1] | |
model.summary() | |
last_layer_weights = last_layer.get_weights() | |
model.layers.pop() | |
model.layers[-1].outbound_nodes = [] | |
model.outputs = [model.layers[-1].output] | |
model.summary() | |
model.add(Dense(num_classes, activation='linear')) | |
model.summary() | |
model.layers[-1].set_weights(last_layer_weights) | |
layer_idx = 7 | |
images = [] | |
img = visualize_activation(model, layer_idx, filter_indices=[7], max_iter=1000, tv_weight=1., lp_norm_weight=0.) | |
#images.append(img) | |
#stitched = utils.stitch_images(images) | |
#plt.axis('off') | |
#plt.figure(figsize = (16, 10)) | |
#plt.imshow(stitched) | |
plt.imshow(img[:, :, 0]) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I added notebooks for MNIST in examples/ using your network architecture. Hope that clarifies how to debug such issues.
Feel free to reopen if you have more questions.