#!/usr/bin/env python
# coding: utf-8
#
# bit.ly/pybay-keras
# Who Am I?
# -----
#
# Brian Spiering
# What Do I Do?
# ------
#
# Professor @
#
#
# Keras - Neural Networks for humans
# ------
#
#
#
# A high-level, intuitive API for Deep Learning.
#
# Easy to define neural networks, then automatically handles execution.
#
# A simple, modular interface which allows focus on learning and enables fast experimentation
# Goals
# -----
#
# - General introduction to Deep Learning
# - Overview of keras library
# - An end-to-end example in keras
# Anti-Goals
# -----
#
# - Understanding of Deep Learning (there will be no equations)
# - Building neural networks from scratch
# - Complete survey of keras library
# Deep Learning 101
# -----
#
# Deep Learning (DL) are Neural networks (NN) with >1 hidden layer
# -------
#
#
# Neural Networks are Nodes & Edges
# ------
#
# Nonlinear function allows learning of nonlinear relationships
# ------
#
#
# Groups of nodes all the way down
# ------
#
#
# Deep Learning isn't magic, it is just very good at finding patterns
# ------
#
#
# Deep Learning has fewer steps than traditional Machine Learning
# ------
#
#
# If you want to follow along…
# -----
#
# GitHub repo: [bit.ly/pybay-keras](http://bit.ly/pybay-keras)
#
# If you want to type along…
# ------
#
# 1. Run a local Jupyter Notebook
# 1. [Binder](https://mybinder.org/v2/gh/brianspiering/keras-intro/master): In-Browser Jupyter Notebook
# 1. [Colaboratory](https://colab.research.google.com/): "Google Docs for Jupyter Notebooks"
# In[84]:
reset -fs
# In[85]:
import keras
# In[86]:
# What is the backend / execution engine?
# In[87]:
keras.backend.backend()
#
#
# "An open-source software library for Machine Intelligence"
#
# Numerical computation using data flow graphs.
# TensorFlow: A great backend
# ------
# A __very__ flexible architecture which allows you to do almost any numerical operation.
#
# Then deploy the computation to CPUs or GPUs (one or more) across desktop, cloud, or mobile device.
#
# MNIST handwritten digit database:
The “Hello World!” of Computer Vision
# ------
#
#
#
#
# In[88]:
# Import data
# In[89]:
from keras.datasets import mnist
# In[90]:
# Setup train and test splits
# In[91]:
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# In[92]:
from random import randint
from matplotlib import pyplot
get_ipython().run_line_magic('matplotlib', 'inline')
# In[93]:
pyplot.imshow(x_train[randint(0, x_train.shape[0])], cmap='gray_r');
# Munge data
# -----
#
#
#
# Convert image matrix into vector to feed into first layer
# In[94]:
# Munge Data
# Transform from matrix to vector, cast, and normalize
# In[95]:
image_size = 784 # 28 x 28
x_train = x_train.reshape(x_train.shape[0], image_size) # Transform from matrix to vector
x_train = x_train.astype('float32') # Cast as 32 bit integers
x_train /= 255 # Normalize inputs from 0-255 to 0.0-1.0
x_test = x_test.reshape(x_test.shape[0], image_size) # Transform from matrix to vector
x_test = x_test.astype('float32') # Cast as 32 bit integers
x_test /= 255 # Normalize inputs from 0-255 to 0.0-1.0
# In[96]:
# Convert class vectors to binary class matrices
# In[97]:
y_train = keras.utils.to_categorical(y_train, 10)
y_test = keras.utils.to_categorical(y_test, 10)
# In[98]:
# Import the most common type of neural network
# In[99]:
from keras.models import Sequential
# RTFM - https://keras.io/layers/
# In[100]:
# Define model instance
# In[101]:
model = Sequential()
# In[102]:
# Import the most common type of network layer, fully interconnected
# In[103]:
from keras.layers import Dense
#
# In[104]:
# Define input layer
# In[105]:
layer_input = Dense(units=512, # Number of nodes
activation='sigmoid', # The nonlinearity
input_shape=(image_size,))
model.add(layer_input)
# In[106]:
# Define another layer
# In[107]:
model.add(Dense(units=512, activation='sigmoid'))
# In[108]:
# Define output layers
# In[109]:
layer_output = Dense(units=10, # Number of digits (0-9)
activation='softmax') # Convert neural activation to probability of category
model.add(layer_output)
# In[110]:
# Print summary
# In[111]:
model.summary()
# In[112]:
# Yes - we compile the model to run it
# In[113]:
model.compile(loss='categorical_crossentropy',
optimizer='sgd',
metrics=['accuracy'])
# In[114]:
# Train the model
# In[115]:
training = model.fit(x_train,
y_train,
epochs=5, # Number of passes over complete dataset
verbose=True,
validation_split=0.1)
#
# In[116]:
# Let's see how well our model performs
# In[117]:
loss, accuracy = model.evaluate(x_test,
y_test,
verbose=True)
print(f"Test loss: {loss:.3}")
print(f"Test accuracy: {accuracy:.3%}")
# Keras' Other Features
# -----
#
# - Common built-in functions (e.g., activation functions and optimitizers)
# - Convolutional neural network (CNN or ConvNet)
# - Recurrent neural network (RNN) & Long-short term memory (LSTM)
# - Pre-trained models
# Summary
# -----
#
# - Keras is designed for human beings, not computers.
# - Easier to try out Deep Learning (focus on the __what__, not the __how__).
# - Simple to define neural networks.
#
# Futher Study - Keras
# --------
#
# - [Keras docs](https://keras.io/)
# - [Keras blog](https://blog.keras.io/)
# - Keras courses
# - [edX](https://www.edx.org/course/deep-learning-fundamentals-with-keras)
# - [Coursera](https://www.coursera.org/lecture/ai/keras-overview-7GfN9)
# Futher Study - Deep Learning
# --------
#
# - Prerequisites: Linear Algebra, Probability, Machine Learning
# - [fast.ai Course](http://www.fast.ai/)
# - [Deep Learning Book](http://www.deeplearningbook.org/)
#
# Bonus Material
# --------
# In[118]:
# reset -fs
# In[119]:
# from keras import *
# In[120]:
# whos
# In[121]:
# from keras.datasets import fashion_mnist
# In[122]:
# # Setup train and test splits
# (x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()
# In[123]:
# from random import randint
# from matplotlib import pyplot
# %matplotlib inline
# In[124]:
# pyplot.imshow(x_train[randint(0, x_train.shape[0])], cmap='gray_r');
# In[125]:
# # Define CNN model
# # Redefine input dimensions to make sure conv works
# img_rows, img_cols = 28, 28
# 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)
# In[126]:
# import keras
# In[127]:
# # Convert class vectors to binary class matrices
# y_train = keras.utils.to_categorical(y_train, 10)
# y_test = keras.utils.to_categorical(y_test, 10)
# In[128]:
# from keras.layers import Conv2D, Dense, Flatten, MaxPooling2D
# In[129]:
# # Define model
# model = Sequential()
# model.add(Conv2D(32,
# kernel_size=(3, 3),
# activation='sigmoid',
# input_shape=input_shape))
# model.add(Conv2D(64, (3, 3), activation='sigmoid'))
# model.add(MaxPooling2D(pool_size=(2, 2)))
# model.add(Flatten())
# model.add(Dense(128, activation='sigmoid'))
# model.add(Dense(10, activation='softmax'))
# In[130]:
# model.compile(loss='categorical_crossentropy',
# optimizer='adam',
# metrics=['accuracy'])
# In[131]:
# # Define training
# training = model.fit(x_train,
# y_train,
# epochs=5,
# verbose=True,
# validation_split=0.1)
# In[132]:
# loss, accuracy = model.evaluate(x_test,
# y_test,
# verbose=True)
# print(f"Test loss: {loss:.3}")
# print(f"Test accuracy: {accuracy:.3%}")
# What is `keras`?
# -----
#
#
#
# Keras (κέρας) means horn in Greek.
# It is a reference to a literary image from ancient Greek and Latin literature.
#
# First found in the Odyssey, where dream spirits (Oneiroi, singular Oneiros) are divided between those who deceive men with false visions, who arrive to Earth through a gate of ivory, and those who announce a future that will come to pass, who arrive through a gate of horn.
#
# It's a play on the words κέρας (horn) / κραίνω (fulfill), and ἐλέφας (ivory) / ἐλεφαίρομαι (deceive).
# [Source](https://keras.io/#why-this-name-keras)
#