ki-dhbw/tasks/04 - neuron.ipynb

219 lines
4.8 KiB
Text
Raw Normal View History

2025-02-06 10:19:25 +01:00
{
"cells": [
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"from math import e\n",
"from numpy.typing import NDArray as array\n",
"from numpy import float64 as float"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [],
"source": [
"def sigmoid(z):\n",
2025-02-06 10:37:40 +01:00
" return 1 / (1 + e ** (-z))\n",
"\n",
2025-02-06 10:19:25 +01:00
"\n",
"def ht(weights, x):\n",
" return g(weights.T @ x)\n",
"\n",
2025-02-06 10:37:40 +01:00
"\n",
2025-02-06 10:19:25 +01:00
"def g(x):\n",
" return sigmoid(x)"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.9999546021312976\n",
"4.539786870243442e-05\n",
"9.357622968839314e-14\n",
"4.539786870243442e-05\n"
]
}
],
"source": [
"# and gate?\n",
"weights_and = np.array([-30, 20, 20])\n",
"\n",
2025-02-06 10:37:40 +01:00
"print(ht(weights_and, np.array([1, 1, 1])))\n",
"print(ht(weights_and, np.array([1, 0, 1])))\n",
"print(ht(weights_and, np.array([1, 0, 0])))\n",
"print(ht(weights_and, np.array([1, 1, 0])))\n"
2025-02-06 10:19:25 +01:00
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"9.357622968839314e-14\n",
"4.539786870243442e-05\n",
"0.9999546021312976\n",
"4.539786870243442e-05\n"
]
}
],
"source": [
"# not x and not y gate?\n",
"weights = np.array([10, -20, -20])\n",
"\n",
2025-02-06 10:37:40 +01:00
"print(ht(weights, np.array([1, 1, 1])))\n",
"print(ht(weights, np.array([1, 0, 1])))\n",
"print(ht(weights, np.array([1, 0, 0])))\n",
"print(ht(weights, np.array([1, 1, 0])))\n"
2025-02-06 10:19:25 +01:00
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.9999999999999065\n",
"0.9999546021312976\n",
"4.539786870243442e-05\n",
"0.9999546021312976\n"
]
}
],
"source": [
"# or gate?\n",
"weights = np.array([-10, 20, 20])\n",
2025-02-06 10:37:40 +01:00
"print(ht(weights, np.array([1, 1, 1])))\n",
"print(ht(weights, np.array([1, 0, 1])))\n",
"print(ht(weights, np.array([1, 0, 0])))\n",
"print(ht(weights, np.array([1, 1, 0])))\n"
2025-02-06 10:19:25 +01:00
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {},
"outputs": [],
"source": [
"# make it more generic\n",
"def layer(a: array, w: array, debug=False) -> array:\n",
2025-02-06 10:37:40 +01:00
" a_with_one: array = np.concatenate(([1], a))\n",
2025-02-06 10:19:25 +01:00
" z = w @ a_with_one\n",
" a_next = sigmoid(z)\n",
"\n",
" return a_next"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.9999999999999656\n",
"0.999983298578152\n",
"0.0001233945759862318\n",
"0.999983298578152\n"
]
}
],
"source": [
"# or gate but cooler\n",
"weights = np.array([1, -10, 20, 20])\n",
2025-02-06 10:37:40 +01:00
"print(layer(np.array([1, 1, 1]), weights))\n",
"print(layer(np.array([1, 0, 1]), weights))\n",
"print(layer(np.array([1, 0, 0]), weights))\n",
"print(layer(np.array([1, 1, 0]), weights))\n"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.9999545869652744\n",
"4.5622486386054965e-05\n",
"4.5622486386054965e-05\n",
"0.9999545869652744\n"
]
}
],
"source": [
"# xnor gate, needs 3 layers\n",
"weights = [\n",
" np.array(\n",
" [\n",
" [1, -30, 20, 20],\n",
" [1, 10, -20, -20],\n",
" ]\n",
" ),\n",
" np.array([-10, 20, 20]),\n",
"]\n",
"\n",
"def l2(x: array, w1: array, w2: array) -> array:\n",
" z = layer(x, w1)\n",
" z2 = layer(z, w2)\n",
" return z2\n",
"\n",
"print(l2(np.array([1,0,0]), weights[0], weights[1]))\n",
"print(l2(np.array([1,1,0]), weights[0], weights[1]))\n",
"print(l2(np.array([1,0,1]), weights[0], weights[1]))\n",
"print(l2(np.array([1,1,1]), weights[0], weights[1]))"
2025-02-06 10:19:25 +01:00
]
2025-02-13 12:59:35 +01:00
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
2025-02-06 10:19:25 +01:00
}
],
"metadata": {
"kernelspec": {
"display_name": "ki",
"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.13.1"
}
},
"nbformat": 4,
"nbformat_minor": 2
}