Example from François Fleuret’s deep-learning courses at fleuret.org/dlc.
\documentclass[tikz,border=10pt]{standalone} \usetikzlibrary{arrows.meta} \usepackage{cmbright} \definecolor{green}{rgb}{0.0,0.50,0.0} \tikzset{>={Straight Barb[angle'=80, scale=1.1]}} \begin{document} \begin{tikzpicture} \draw[->] (0, 0) -- ++(0, 2); \draw[->] (0, 0) -- ++(2.5, 0.6); \draw[->] (0, 0) -- ++(3, 0) node[midway, below, yshift=-0.5em] {Original space ${\cal X}$}; \draw[fill=green!50, draw=none, shift={(0.2, 0.7)},scale=0.5] (0, 0) to[out=20, in=140] (1.5, -0.2) to [out=60, in=160] (5, 0.5) to[out=130, in=60] cycle; \shade[thin, left color=green!10, right color=green!50, draw=none, shift={(0.2, 0.7)},scale=0.5] (0, 0) to[out=10, in=140] (3.3, -0.8) to [out=60, in=190] (5, 0.5) to[out=130, in=60] cycle; \draw[->] (4.8, 0.8) -- ++(0, 2); \draw[->] (4.8, 0.8) -- ++(2, 0) node[midway, below, yshift=-0.5em] {Latent space ${\cal F}$}; \draw[thin, fill=green!30, draw=none, shift={(5.4, 1.1)}, rotate=20] (0, 0) -- (1, 0) -- (1, 1) -- (0, 1) -- cycle; \draw[thick,->,red] (1.5, 1.3) to [out=55, in=150] node[midway, above, xshift=6pt, yshift=2pt] {$f$} (5.7, 2); \draw[thick,->,blue] (1.5, 1.3) ++(4.03, 0.3) to [out=150, in=55] node[midway, below, xshift=2pt, yshift=-2pt] {$g$} ++(-3.6, -0.5); \end{tikzpicture} \end{document}