{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Exercise 4.3\n", "## Classification\n", "In the following tasks, we will repeatedly use some basic functions (e.g., the softmax function or the cross-entropy) of the [Keras](https://keras.io/) Library. To familiarize with them, we will implement the most important of them ourselves in this task.\n", "\n", "Suppose we want to classify some data (4 samples) into 3 distinct classes: 0, 1, and 2.\n", "We have set up a network with a pre-activation output `z` in the last layer.\n", "Applying softmax will give the final model output.\n", "\n", "input X ---> some network --> `z`
\n", "--> `y_model = softmax(z)`\n", "\n", "We quantify the agreement between truth (y) and model using categorical cross-entropy.\n", "\n", "$$J = - \\sum_i (y_i * \\log(y_\\mathrm{model}(x_i))$$\n", "\n", "In the following you are to implement softmax and categorical cross-entropy\n", "and evaluate them values given the values for `z`." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Data: 4 samples with the following class labels (input features X irrelevant here)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "y_cl = np.array([0, 0, 2, 1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### output of the last network layer before applying softmax" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "z = np.array([\n", " [4, 5, 1],\n", " [-1, -2, -3],\n", " [0.1, 0.2, 0.3],\n", " [-1, 17, 1]\n", " ]).astype(np.float32)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Task 1)\n", "Write a function that turns any class labels `y_cl` into one-hot encodings `y`.\n", "\n", "0 --> (1, 0, 0)
\n", "1 --> (0, 1, 0)
\n", "2 --> (0, 0, 1)
\n", "\n", "Make sure that `np.shape(y) = (4, 3)` for `np.shape(y_cl) = (4)`.\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Task 2)\n", "Write a function that returns the softmax of the input `z` along the last axis" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Task 3)\n", "Compute the categorical cross-entropy between data and model" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Task 4)\n", "Determine which calsses are predicted by the model (maximum prediction)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Task 5)\n", "Estimate how many samples are classified correctly (accuracy)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.9" } }, "nbformat": 4, "nbformat_minor": 4 }