<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Einführung in Neuronale Netzwerke
Step1:  Iris mit Neuronalen Netzwerken
Das künstliche Neuron
Hands-On
Erzeuge eine Python-Implementierung eines Neurons mit zwei Eingabevariablen ohne Activation Funktion
Denke die Werte für w1, w2 und den Bias aus
Kannst du eine Skizze des Graphs der Funktion mit x1 und x2 an den Achsen erstellen?
Was ist das für eine Funktion?
Step2:  Wir probieren unser Modell mit dem Iris Dataset
Step3:  Wie sollen wir das interpretieren? Damit können wir nicht viel anfangen
Activation Functions
Step4:  Sigmoid
Step5:  Relu
Step6:  Das komplette Neuron
Step7:  Unser erste Neuronales Netz mit Keras
Step8:  
Step9:  Training
Step10:  Bewertung
Step11:  Hands-On
Vollziehe das Notebook bis hier nach und spiele mit den einigen Parametern
Variiere die Anzahl der Neuronen im Hidden Layer. Wieso geht das überhaupt mit 3 Neuronen
Ziehe eine weitere Schicht ein
Kannst du eine Skizze des Graphs der Funktion mit x1 und x2 an den Achsen erstellen?
Was ist das für eine Funktion?
Stop Here
Optionaler Teil
Model im Keras und TensorFlow Format speichern
Step12:  Export as raw tf model
https
Step13:  Dieses Tensorflow Modell kann man bei Google Cloud ML hochladen und für Berechnungen nutzen
<ASSISTANT_TASK:>
Python Code:
import warnings
warnings.filterwarnings('ignore')
%matplotlib inline
%pylab inline
import matplotlib.pylab as plt
import numpy as np
from distutils.version import StrictVersion
import sklearn
print(sklearn.__version__)
assert StrictVersion(sklearn.__version__ ) >= StrictVersion('0.18.1')
import tensorflow as tf
tf.logging.set_verbosity(tf.logging.ERROR)
print(tf.__version__)
assert StrictVersion(tf.__version__) >= StrictVersion('1.1.0')
import keras
print(keras.__version__)
assert StrictVersion(keras.__version__) >= StrictVersion('2.0.0')
Explanation: Einführung in Neuronale Netzwerke
End of explanation
%load https://djcordhose.github.io/ai/fragments/neuron.py
Explanation: Iris mit Neuronalen Netzwerken
Das künstliche Neuron
Hands-On
Erzeuge eine Python-Implementierung eines Neurons mit zwei Eingabevariablen ohne Activation Funktion
Denke die Werte für w1, w2 und den Bias aus
Kannst du eine Skizze des Graphs der Funktion mit x1 und x2 an den Achsen erstellen?
Was ist das für eine Funktion?
End of explanation
from sklearn.datasets import load_iris
iris = load_iris()
iris.data[0]
neuron_no_activation(5.1, 3.5)
Explanation: Wir probieren unser Modell mit dem Iris Dataset
End of explanation
def centerAxis(uses_negative=False):
    # http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.plot
    ax = plt.gca()
    ax.spines['left'].set_position('center')
    if uses_negative:
        ax.spines['bottom'].set_position('center')
    ax.spines['right'].set_color('none')
    ax.spines['top'].set_color('none')
    ax.xaxis.set_ticks_position('bottom')
    ax.yaxis.set_ticks_position('left')
Explanation: Wie sollen wir das interpretieren? Damit können wir nicht viel anfangen
Activation Functions
End of explanation
def np_sigmoid(X):
    return 1 / (1 + np.exp(X * -1))
x = np.arange(-10,10,0.01)
y = np_sigmoid(x)
centerAxis()
plt.plot(x,y,lw=3)
Explanation: Sigmoid
End of explanation
def np_relu(x):
    return np.maximum(0, x)
x = np.arange(-10, 10, 0.01)
y = np_relu(x)
centerAxis()
plt.plot(x,y,lw=3)
Explanation: Relu
End of explanation
w0 = 3
w1 = -4
w2 = 2
import math as math
def sigmoid(x):
    return 1 / (1 + math.exp(x * -1))
def neuron(x1, x2):
    sum = w0 + x1 * w1 + x2 * w2
    return sigmoid(sum)
neuron(5.1, 3.5)
Explanation: Das komplette Neuron
End of explanation
from keras.layers import Input
inputs = Input(shape=(4, ))
from keras.layers import Dense
fc = Dense(3)(inputs)
from keras.models import Model
model = Model(input=inputs, output=fc)
model.summary()
model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['accuracy'])
model.predict(np.array([[ 5.1,  3.5,  1.4,  0.2]]))
Explanation: Unser erste Neuronales Netz mit Keras
End of explanation
inputs = Input(shape=(4, ))
fc = Dense(3)(inputs)
predictions = Dense(3, activation='softmax')(fc)
model = Model(input=inputs, output=predictions)
model.summary()
model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['accuracy'])
model.predict(np.array([[ 5.1,  3.5,  1.4,  0.2]]))
Explanation: 
End of explanation
X = np.array(iris.data)
y = np.array(iris.target)
X.shape, y.shape
y[100]
# tiny little pieces of feature engeneering
from keras.utils.np_utils import to_categorical
num_categories = 3
y = to_categorical(y, num_categories)
y[100]
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=42, stratify=y)
X_train.shape, X_test.shape, y_train.shape, y_test.shape
# !rm -r tf_log
# tb_callback = keras.callbacks.TensorBoard(log_dir='./tf_log')
# https://keras.io/callbacks/#tensorboard
# To start tensorboard
# tensorboard --logdir=/mnt/c/Users/olive/Development/ml/tf_log
# open http://localhost:6006
# %time model.fit(X_train, y_train, epochs=500, validation_split=0.3, callbacks=[tb_callback])
%time model.fit(X_train, y_train, epochs=500, validation_split=0.3)
Explanation: Training
End of explanation
model.predict(np.array([[ 5.1,  3.5,  1.4,  0.2]]))
X[0], y[0]
train_loss, train_accuracy = model.evaluate(X_train, y_train)
train_loss, train_accuracy
test_loss, test_accuracy = model.evaluate(X_test, y_test)
test_loss, test_accuracy
Explanation: Bewertung
End of explanation
model.save('nn-iris.hdf5')
Explanation: Hands-On
Vollziehe das Notebook bis hier nach und spiele mit den einigen Parametern
Variiere die Anzahl der Neuronen im Hidden Layer. Wieso geht das überhaupt mit 3 Neuronen
Ziehe eine weitere Schicht ein
Kannst du eine Skizze des Graphs der Funktion mit x1 und x2 an den Achsen erstellen?
Was ist das für eine Funktion?
Stop Here
Optionaler Teil
Model im Keras und TensorFlow Format speichern
End of explanation
import os
from keras import backend as K
K.set_learning_phase(0)
sess = K.get_session()
!rm -r tf
tf.app.flags.DEFINE_integer('model_version', 1, 'version number of the model.')
tf.app.flags.DEFINE_string('work_dir', '/tmp', 'Working directory.')
FLAGS = tf.app.flags.FLAGS
export_path_base = 'tf'
export_path = os.path.join(
  tf.compat.as_bytes(export_path_base),
  tf.compat.as_bytes(str(FLAGS.model_version)))
classification_inputs = tf.saved_model.utils.build_tensor_info(model.input)
classification_outputs_scores = tf.saved_model.utils.build_tensor_info(model.output)
from tensorflow.python.saved_model.signature_def_utils_impl import build_signature_def, predict_signature_def
signature = predict_signature_def(inputs={'inputs': model.input},
                                  outputs={'scores': model.output})
builder = tf.saved_model.builder.SavedModelBuilder(export_path)
builder.add_meta_graph_and_variables(
      sess, 
     tags=[tf.saved_model.tag_constants.SERVING],
      signature_def_map={
          tf.saved_model.signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY: signature
      })
builder.save()
!ls -lhR tf
Explanation: Export as raw tf model
https://tensorflow.github.io/serving/serving_basic.html
https://github.com/tensorflow/serving/blob/master/tensorflow_serving/example/mnist_saved_model.py
End of explanation
# cd tf
# gsutil cp -R 1 gs://irisnn
# create model and version at https://console.cloud.google.com/mlengine
# gcloud ml-engine predict --model=irisnn --json-instances=./sample_iris.json
# SCORES
# [0.9954029321670532, 0.004596732556819916, 3.3544753819114703e-07]
Explanation: Dieses Tensorflow Modell kann man bei Google Cloud ML hochladen und für Berechnungen nutzen
End of explanation
<END_TASK>