参考这篇博客 BP神经网络:计算原理详解和MATLAB实现 用Python写了一个对二维坐标点二分类的代码。gif图如下,显示对应迭代次数对坐标点的分类情况
具体实现代码如下:
# -*- coding:utf-8 -*-
import numpy as np
from math import e, pow, fabs
import matplotlib.pyplot as plt
import copy
class ANN:
def __init__(self, layer_sizes, lr=0.05, epoch=100, batch_size=8):
self.lr = lr
self.epoch = epoch
self.batch_size = batch_size
self.weights = [np.random.randn(x, y) for x, y in zip(layer_sizes[:-1], layer_sizes[1:])]
self.ys = [np.random.randn(x) for x in layer_sizes[1:]]
self.deltas = [np.random.randn(x) for x in layer_sizes[1:]]
def foreward(self):
# 计算与输入层连接的隐层
for i in range(np.shape(self.ys[0])[0]):
self.ys[0][i] = self.func(np.sum(self.weights[0][j, i] * self.inputs[j] for j in range(len(self.inputs))))
for i in range(1, len(self.ys)):
for j in range(np.shape(self.ys[i])[0]):
self.ys[i][j] = self.func(
np.sum(self.weights[i][k, j] * self.ys[i - 1][k] for k in range(np