{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"!nvidia-smi","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import tensorflow as tf\ntf.test.is_gpu_available()\ntf.config.list_physical_devices('GPU')","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"import keras\nfrom keras.models import Sequential\nfrom keras.layers import Dense\nimport matplotlib.pyplot as plt\nimport numpy as np\n%matplotlib inline","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.datasets import make_moons\nfrom sklearn.preprocessing import scale\nfrom sklearn.model_selection import train_test_split\nX, Y = make_moons(noise=0.2, random_state=0, n_samples=1000)\nX = scale(X)\nX_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=.3)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"fig, ax = plt.subplots()\nax.scatter(X[Y==0, 0], X[Y==0, 1], label='Class 0')\nax.scatter(X[Y==1, 0], X[Y==1, 1], color='r', label='Class 1')\nax.legend()\nax.set(xlabel='X', ylabel='Y', title='Toy binary classification data set');","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X.ndim, Y.ndim","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"callback = keras.callbacks.EarlyStopping(monitor='val_loss', patience=3)\n\n#Create sequential  multi-layer perceptron\n#uncomment if you want to add more layers (in the interest of time we use a shallower model)\nmodel = Sequential()\nmodel.add(Dense(32, input_dim=2, activation='relu')) #X,Y input dimensions. connecting to 32 neurons with relu activation\nmodel.add(Dense(1, activation='sigmoid')) #binary classification so one output\n\nmodel.compile(optimizer='Adam',\n              loss='binary_crossentropy',\n              metrics=['accuracy'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"?model.compile","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"seqModel = model.fit(X_train, Y_train, batch_size=32, epochs=200,\n          verbose=1, validation_data=(X_test, Y_test), callbacks=[callback])\nscore = model.evaluate(X_test, Y_test, verbose=0)\nprint('Test loss:', score[0])\nprint('Test accuracy:', score[1])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# visualizing losses and accuracy\ntrain_loss = seqModel.history['loss']\nval_loss   = seqModel.history['val_loss']\nxc         = range(len(train_loss))\n\nplt.figure()\nplt.plot(xc, train_loss)\nplt.plot(xc, val_loss)\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"grid = np.mgrid[-3:3:100j,-3:3:100j]\ngrid_2d = grid.reshape(2, -1).T\nX, Y = grid\nprediction_probs = model.predict_proba(grid_2d, batch_size=32, verbose=0)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"##plot results\nfig, ax = plt.subplots(figsize=(10, 6))\ncontour = ax.contourf(X, Y, prediction_probs.reshape(100, 100))\nax.scatter(X_test[Y_test==0, 0], X_test[Y_test==0, 1])\nax.scatter(X_test[Y_test==1, 0], X_test[Y_test==1, 1], color='r')\ncbar = plt.colorbar(contour, ax=ax)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Digit Recognizer","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"!head ../input/digit-recognizer/train.csv","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from keras.models import Sequential\nfrom keras.utils import np_utils\nfrom keras.layers.core import Dense, Activation, Dropout\n\nimport pandas as pd\nimport numpy as np\n\n# Read data\ntrain = pd.read_csv('../input/digit-recognizer/train.csv')\nlabels = train.iloc[:,0].values.astype('int32')\nX_train = (train.iloc[:,1:].values).astype('float32')\nX_test = (pd.read_csv('../input/digit-recognizer/test.csv').values).astype('float32')\n\n# convert list of labels to binary class matrix\ny_train = np_utils.to_categorical(labels) \n# for the digit 1, the above will be [ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]\n\n# pre-processing: divide by max and substract mean\nscale = np.max(X_train)\nX_train /= scale\nX_test /= scale\n\nmean = np.std(X_train)\nX_train -= mean\nX_test -= mean\n\ninput_dim = X_train.shape[1]\nnb_classes = y_train.shape[1]\n\n# Here's a Deep Dumb MLP (DDMLP)\nmodel = Sequential()\nmodel.add(Dense(128, input_dim=input_dim))\nmodel.add(Activation('relu'))\nmodel.add(Dropout(0.15))\nmodel.add(Dense(128))\nmodel.add(Activation('relu'))\nmodel.add(Dropout(0.15))\nmodel.add(Dense(nb_classes))\nmodel.add(Activation('softmax'))\n\n# we'll use categorical xent for the loss, and RMSprop as the optimizer\nmodel.compile(loss='categorical_crossentropy', optimizer='rmsprop')\n\nprint(\"Training...\")\nmodel.fit(X_train, y_train, epochs=10, batch_size=16, validation_split=0.3, verbose=2)\n\nprint(\"Generating test predictions...\")\npreds = model.predict_classes(X_test, verbose=0)\n\ndef write_preds(preds, fname):\n    pd.DataFrame({\"ImageId\": list(range(1,len(preds)+1)), \"Label\": preds}).to_csv(fname, index=False, header=True)\n\nwrite_preds(preds, \"keras-mlp.csv\")\nprint(\"Done!\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat":4,"nbformat_minor":4}