#!/usr/bin/env python
# coding: utf-8
# # Exercise 3.3 - Solution
# ## Checkerboard
#
# Open the Tensorflow Playground (www.playground.tensorflow.org) and select on the left the checkerboard pattern as the data basis.
#
# The data is taken from a two-dimensional probability distribution and is represented by the value pairs $x_1$ and $x_2$. The regions $x1$, $x_2 > 0$ and $x_1$, $x_2 < 0$ are shown by one color. For value pairs with $x_1 > 0$, $x_2 < 0$ and $x_1 < 0$, $x_2 > 0$, the regions are indicated by a different color.
#
# In features, select the two independent variables $x_1$ and $x_2$ and start the network training. The network learns that $x_1$ and $x_2$ are for these data not independent variables, but are taken from the probability distribution of the checkerboard pattern.
#
# [![Checkerboard](./images/checkerboard_tf_playground.png)](https://playground.tensorflow.org/#activation=relu&batchSize=10&dataset=xor®Dataset=reg-plane&learningRate=0.03®ularizationRate=0&noise=0&networkShape=4,2&seed=0.20784&showTestData=false&discretize=false&percTrainData=50&x=true&y=true&xTimesY=false&xSquared=false&ySquared=false&cosX=false&sinX=false&cosY=false&sinY=false&collectStats=false&problem=classification&initZero=false&hideText=false)
#
# ## Tasks
# 1. Try various settings for the number of layers and neurons using `ReLU` as activation function. What is the smallest network that gives a good fit result?
# 2. What do you observe when training networks with the same settings multiple times? Explain your observations.
# 3. Try additional input features: Which one is most helpful?
#
# ## Solutions
# Hint: click on the images to open the correct playground settings needed to solve the task, respectively.
# ### Task 1
# Try various settings for the number of layers and neurons using ReLU as activation function. What is the smallest network that gives a good fit result?
#
# [![Checkerboard](./images/checkerboard_tf_playground.png)](https://playground.tensorflow.org/#activation=relu&batchSize=10&dataset=xor®Dataset=reg-plane&learningRate=0.03®ularizationRate=0&noise=0&networkShape=3&seed=0.10528&showTestData=false&discretize=false&percTrainData=50&x=true&y=true&xTimesY=false&xSquared=false&ySquared=false&cosX=false&sinX=false&cosY=false&sinY=false&collectStats=false&problem=classification&initZero=false&hideText=false)
#
# A network with a single layer holding 3 nodes. However, this configuration is not stable.
#
# A network with a single layer, holding 4 nodes, is way more stable.
# ### Task 2
# What do you observe when training networks with the same settings multiple times? Explain your observations.
# Due to the random initialization of weights, the network training always develops a little bit differently, leading to different results.
# ### Task 3
# Try additional input features: Which one is most helpful?
# [![Checkerboard](./images/checkerboard_3_2_task_3.png)](https://playground.tensorflow.org/#activation=relu&batchSize=10&dataset=xor®Dataset=reg-plane&learningRate=0.03®ularizationRate=0&noise=0&networkShape=&seed=0.10528&showTestData=false&discretize=false&percTrainData=50&x=false&y=false&xTimesY=true&xSquared=false&ySquared=false&cosX=false&sinX=false&cosY=false&sinY=false&collectStats=false&problem=classification&initZero=false&hideText=false)
#
# Obviously, the $x_1\cdot x_2$ feature is most helpful.