version zur Abgabe

This commit is contained in:
Paul 2020-11-15 16:54:53 +01:00
parent c6c758207b
commit 6a5081a0c1

View File

@ -15,7 +15,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 49,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
@ -52,7 +52,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 50,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
@ -63,7 +63,10 @@
" >>> Perceptron(2, 100, 0.1)\n", " >>> Perceptron(2, 100, 0.1)\n",
" \"\"\"\n", " \"\"\"\n",
" ### Dein Code kommt hierhin:\n", " ### Dein Code kommt hierhin:\n",
" \n", " self.weights = np.zeros(number_of_inputs+1)\n",
" self.epochs = epochs\n",
" self.eta = eta\n",
" self.bias = 0\n",
" ##########################\n", " ##########################\n",
" pass\n", " pass\n",
" \n", " \n",
@ -73,13 +76,11 @@
" >>> inputs = np.array([0, 1])\n", " >>> inputs = np.array([0, 1])\n",
" >>> h = perceptron.predict(inputs) \n", " >>> h = perceptron.predict(inputs) \n",
" \"\"\"\n", " \"\"\"\n",
" \n",
" # Dein Code kommt hierhin: \n", " # Dein Code kommt hierhin: \n",
" \n", " z = self.bias * self.weights[0]\n",
" \n", " z += np.dot(inputs, self.weights[1:])\n",
" return 1/(1 + np.exp(-z))\n",
" ##########################\n", " ##########################\n",
" \n",
" \n",
" pass\n", " pass\n",
"\n", "\n",
" def fit(self, training_inputs, labels):\n", " def fit(self, training_inputs, labels):\n",
@ -87,10 +88,31 @@
" Beispiel des Funktionsaufrufs:\n", " Beispiel des Funktionsaufrufs:\n",
" >>> perceptron.fit(train_input, labels)\n", " >>> perceptron.fit(train_input, labels)\n",
" \"\"\"\n", " \"\"\"\n",
" \n",
" # Dein Code kommt hierhin:\n", " # Dein Code kommt hierhin:\n",
" \n", " for e in range(self.epochs):\n",
"\n", " L_old=0\n",
" h_old=0\n",
" z_old=-1\n",
" weights_old=-np.ones(len(self.weights))\n",
" for xi, target in zip(training_inputs, labels):\n",
" h = self.predict(xi)\n",
" h_diff = h - h_old\n",
" L = (target - h) ** 2\n",
" L_diff = L - L_old\n",
" z = self.bias * self.weights[0] + np.dot(xi, self.weights[1:])\n",
" z_diff = z - z_old\n",
" weights_diff = self.weights - weights_old\n",
" #Ableitung\n",
" deriv_z = np.where(weights_diff!=0, z_diff/weights_diff, 0)\n",
" deriv_h = h_diff/z_diff if z_diff!=0 else 0\n",
" deriv_L = L_diff/h_diff if h_diff!=0 else 0\n",
" deriv = deriv_L * deriv_h * deriv_z\n",
" delta_weights = self.eta * deriv\n",
" weights_old = self.weights\n",
" L_old = L\n",
" h_old = h\n",
" z_old = z\n",
" self.weights -= delta_weights\n",
" ##########################\n", " ##########################\n",
" pass\n", " pass\n",
" \n", " \n",
@ -110,9 +132,28 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 51,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"[3.0643397 3.0643397 3.0643397]\n"
]
},
{
"output_type": "error",
"ename": "NameError",
"evalue": "name 'train_input_AND' is not defined",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-51-fc9213e067f7>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 23\u001b[0m \u001b[0mfig\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0max\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msubplots\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 24\u001b[0;31m \u001b[0max\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mscatter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtrain_input_AND\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlabels_AND\u001b[0m\u001b[0;34m==\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m,\u001b[0m \u001b[0mtrain_input_AND\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlabels_AND\u001b[0m\u001b[0;34m==\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 25\u001b[0m \u001b[0max\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mscatter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtrain_input_AND\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlabels_AND\u001b[0m\u001b[0;34m==\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m,\u001b[0m \u001b[0mtrain_input_AND\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlabels_AND\u001b[0m\u001b[0;34m==\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 26\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx_AND\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0my_AND\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mNameError\u001b[0m: name 'train_input_AND' is not defined"
]
}
],
"source": [ "source": [
"# AND-Datensatz\n", "# AND-Datensatz\n",
"train_input = np.array([\n", "train_input = np.array([\n",
@ -123,12 +164,28 @@
" ])\n", " ])\n",
"\n", "\n",
"labels_AND = np.array([0, 0, 0, 1])\n", "labels_AND = np.array([0, 0, 0, 1])\n",
"\n" "\n",
"perceptron_AND = Perceptron(2,100,0.1)\n",
"perceptron_AND.fit(train_input,labels_AND)\n",
"\n",
"# Geradengleichung berechnen und plotten\n",
"weights = perceptron_AND.getWeights()\n",
"print(weights)\n",
"\n",
"slope = -weights[1]/weights[2]\n",
"offset = -weights[0]/weights[2]\n",
"x_AND = np.linspace(0,1)\n",
"y_AND = slope * x_AND + offset\n",
"\n",
"fig, ax = plt.subplots()\n",
"ax.scatter(train_input_AND[(labels_AND==-1),0] , train_input_AND[(labels_AND==-1),1])\n",
"ax.scatter(train_input_AND[(labels_AND==1),0] , train_input_AND[(labels_AND==1),1])\n",
"plt.plot(x_AND,y_AND)"
] ]
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 5,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
@ -138,7 +195,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 6,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
@ -187,7 +244,7 @@
"name": "python", "name": "python",
"nbconvert_exporter": "python", "nbconvert_exporter": "python",
"pygments_lexer": "ipython3", "pygments_lexer": "ipython3",
"version": "3.7.4" "version": "3.7.6-final"
} }
}, },
"nbformat": 4, "nbformat": 4,