{"cells":[{"metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","collapsed":true,"scrolled":true,"trusted":true},"cell_type":"code","source":"from keras.layers import Dense, Activation\nfrom keras.models import Sequential\nfrom keras.datasets import mnist\nfrom keras.utils import to_categorical\nfrom PIL import Image\nimport numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport math\nfrom sklearn.model_selection import train_test_split","execution_count":51,"outputs":[]},{"metadata":{"_cell_guid":"e50ff64a-c33a-4ea7-bff2-98dcaead3be4","_uuid":"143508e7e1c007b369cb31b0711f658ace031063","trusted":true,"collapsed":true},"cell_type":"code","source":"# Dataset preprocessing\ntrain = pd.read_csv(\"../input/train.csv\")\ntrain, valid = train_test_split(train, test_size=0.2)\nX_train = (train.iloc[:,1:].values).reshape(33600, 784).astype('float32') / 255\ny_train = train.iloc[:,0].values.astype('int32')\ny_train = to_categorical(y_train, 10)\nX_valid = (valid.iloc[:,1:].values).reshape(8400, 784).astype('float32') / 255\ny_valid = valid.iloc[:,0].values.astype('int32')\ny_valid = to_categorical(y_valid, 10)","execution_count":52,"outputs":[]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","scrolled":true,"trusted":true},"cell_type":"code","source":"model = Sequential([\n  Dense(100, input_shape=(784,)),\n  Activation('relu'),\n  Dense(50),\n  Activation('relu'),\n  Dense(10),\n  Activation('softmax')\n])\n\nmodel.compile(optimizer='rmsprop',\n              loss='categorical_crossentropy',\n              metrics=['accuracy'])\n\nmodel.fit(X_train, y_train, validation_data=[X_valid, y_valid], epochs=10)","execution_count":53,"outputs":[]},{"metadata":{"_cell_guid":"fbf5e8ee-3c4c-4f8a-b2be-c1a46071f1dc","_uuid":"eb22ba1b059decae2f50e7397d004cf4b0b257b0","trusted":true},"cell_type":"code","source":"# Get the learned weights\ndense_layers = [l for l in model.layers if l.name.startswith('dense')]\nkernels, biases = zip(*[l.get_weights() for l in dense_layers])\nprint([k.shape for k in kernels])\nprint([b.shape for b in biases])","execution_count":54,"outputs":[]},{"metadata":{"scrolled":true,"trusted":true,"_uuid":"ecb9ccee8827138587681d5cc7a6f131e7099ba5"},"cell_type":"code","source":"# Visualize the digits\n%matplotlib inline\nplt.figure(figsize=(12,5))\nx, y = 5, 2\nfor digit in range(10):\n    triggers = kernels[0].dot(kernels[1]).dot(kernels[2])[:, digit]\n    triggers = triggers.reshape(28, 28) / np.absolute(triggers).max() * 255\n    # Make the base image black\n    pixels = np.full((28, 28, 3), 0, dtype=np.uint8)\n    # Color positive values green\n    green = np.clip(triggers, a_min=0, a_max=None)\n    pixels[:, :, 1] += green.astype(np.uint8)\n    # Color negative values red\n    red = -np.clip(triggers, a_min=None, a_max=0)\n    pixels[:, :, 0] += red.astype(np.uint8)\n\n    plt.subplot(y, x, digit+1)\n    plt.imshow(pixels)\nplt.show()","execution_count":55,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"8ec300395ecabfce18bda3ce1966c9a9c3bdbd64"},"cell_type":"code","source":"# Visualize the first 20 neurons in tsecond hidden layer\n%matplotlib inline\nplt.figure(figsize=(12,10))\nx, y = 5, 4\nfor neuron in range(20):\n    triggers = kernels[0].dot(kernels[1])[:, neuron]\n    triggers = triggers.reshape(28, 28) / np.absolute(triggers).max() * 255\n    # Make the base image black\n    pixels = np.full((28, 28, 3), 0, dtype=np.uint8)\n    # Color positive values green\n    green = np.clip(triggers, a_min=0, a_max=None)\n    pixels[:, :, 1] += green.astype(np.uint8)\n    # Color negative values red\n    red = -np.clip(triggers, a_min=None, a_max=0)\n    pixels[:, :, 0] += red.astype(np.uint8)\n\n    plt.subplot(y, x, neuron+1)\n    plt.imshow(pixels)\nplt.show()","execution_count":56,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.4","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}