{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Exercise 8.1 - Solution\n", "### Classification of magnetic phases using CNNs\n", "\n", "Imagine a 2-dimensional lattice arrangement of $n \\times n$ magnetic dipole moments (spins) that can be in one of two states ($+1$ or $−1$, Ising model).\n", "With interactions between spins being short ranged, each spin interacts only with its four neighbors.\n", "The probability to find a spin in one of the orientations is a function of temperature $T$ according to $p \\sim e^{−a/T},\\;a = \\mathrm{const.}$).\n", "\n", "At extremely low temperatures $T \\rightarrow 0$, neighboring spins have a very low probability of different orientations, so that a uniform overall state (ferromagnetic state) is adopted, characterized by $+1$ or $−1$.\n", "At very high temperatures $T \\rightarrow \\infty$, a paramagnetic phase with random spin alignment results, yielding $50\\%$ of $+1$ and $0%$ of $−1$ orientations.\n", "Below a critical temperature $0 < T < T_c$, stable ferromagnetic domains emerge, with both orientations being equally probable in the absence of an external magnetic field.\n", "The spin-spin correlation function diverges at $T_c$, whereas the correlation decays for $T > T_c$.\n", "\n", "The data for this task contain the $n \\times n$ dipole orientations on the lattice for different temperatures $T$.\n", "Classify the two magnetic phases (paramagnetic/ferromagnetic) using a convolutional neural network!" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "keras 2.4.0\n" ] } ], "source": [ "from tensorflow import keras\n", "import numpy as np\n", "callbacks = keras.callbacks\n", "layers = keras.layers\n", "\n", "print(\"keras\", keras.__version__)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Load and prepare dataset\n", "See https://doi.org/10.1038/nphys4035 for more information" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import gdown\n", "url = \"https://drive.google.com/u/0/uc?export=download&confirm=HgGH&id=1Ihxt1hb3Kyv0IrjHlsYb9x9QY7l7n2Sl\"\n", "output = 'ising_data.npz'\n", "gdown.download(url, output, quiet=True)\n", "\n", "f = np.load(output)\n", "n_train = 20000\n", "\n", "x_train, x_test = f[\"C\"][:n_train], f[\"C\"][n_train:]\n", "T_train, T_test = f[\"T\"][:n_train], f[\"T\"][n_train:]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plot data" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "