Skip to content

Instantly share code, notes, and snippets.

@agodatt
Created June 24, 2017 21:38
Show Gist options
  • Save agodatt/70cb02b7172ffe2ed36020f5787daf18 to your computer and use it in GitHub Desktop.
Save agodatt/70cb02b7172ffe2ed36020f5787daf18 to your computer and use it in GitHub Desktop.
Using visualize_activation on MNIST
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])
@raghakot
Copy link

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment