资源简介
这是用python实现的多层BP神经网络,详细简介:
1)层数、输入神经元个数、隐藏层神经元个数、输出神经元个数可定制;
2)隐藏层激励函数可选:tanh、logistic,可自行拓展到字典中;
3)内含多分类编码器,多分类数据集类标无需编码可直接输入输出;
4)输出层激励函数固定为sigmoid,在predict方法可以设置是否返回概率值。
初学机器学习,如编写有问题请不吝赐教,如果有疑问也欢迎讨论,QQ:1642990705
1)层数、输入神经元个数、隐藏层神经元个数、输出神经元个数可定制;
2)隐藏层激励函数可选:tanh、logistic,可自行拓展到字典中;
3)内含多分类编码器,多分类数据集类标无需编码可直接输入输出;
4)输出层激励函数固定为sigmoid,在predict方法可以设置是否返回概率值。
初学机器学习,如编写有问题请不吝赐教,如果有疑问也欢迎讨论,QQ:1642990705
代码片段和文件信息
import numpy as np
class BPNNClassifier:
def __init__(self feature_n hidden_n=10 deep=2 label_n=2 eta=0.1 max_iter=200 activate_func=“tanh“):
self.feature_n = feature_n
self.hidden_n = hidden_n
self.deep = deep
self.label_n = label_n
self.eta = eta
self.max_iter = max_iter
self.weights = []
self.gradients = list(range(deep)) # save the gradient of every neuron
self.values = [] # save the activated value of every neuron
activate_funcs = \
{“tanh“:(self.tanh self.dtanh) “sigmoid“:(self.sigmoid self.dsigmoid)}
self.activate_func self.dactivate_func = activate_funcs[activate_func]
for d in range(deep):
if d == 0: # input layer to hidden layer
weight = np.random.randn(hidden_n feature_n + 1)
elif d == self.deep - 1: # hidden layer to output layer
label_n = 1 if label_n == 2 else label_n
weight = np.random.randn(label_n hidden_n)
else: # the others
label_n = 1 if label_n == 2 else label_n
weight = np.random.randn(hidden_n hidden_n)
self.weights.append(weight)
def linear_input(self deep X):
weight = self.weights[deep]
return X @ weight.T
def activation(self z func):
return func(z)
def sigmoid(self z):
return 1 / (1 + np.exp(-z))
def dsigmoid(self h):
return h * (1 - h)
def tanh(self z):
return (np.exp(z) - np.exp(-z)) / (np.exp(z) + np.exp(-z))
def dtanh(self h):
return 1 - h ** 2
def preproccessing(self X=None y=None):
X_y = []
if isinstance(X np.ndarray):
X0 = np.array([[1] for i in range(X.shape[0])])
X = np.hstack([X0 X])
X_y.append(X)
if isinstance(y np.ndarray):
y = self.encoder(y)
X_y.append(y)
return tuple(X_y)
def encoder(self y):
y_new = []
if y.ndim == 1: # encode y to one hot code
if self.label_n > 2:
for yi in y:
yi_new = np.zeros(self.label_n)
yi_new[yi] = 1
y_new.append(yi_new)
y_new = np.array(y_new)
else:
y_new = y
elif y.ndim == 2: # encode y to 1D array
if self.label_n > 2:
for yi in y:
for j in range(len(yi)):
if yi[j] == 1:
y_new.append(j)
break
y_new = np.array(y_new)
else:
y_new = y.ravel()
else:
raise Exception(“argument value error: ndarray ndim should be 1 or 2“)
return y_new
def forward_propagation(self X):
self.values.clear()
value = None
for d in range(self.deep):
if d == 0: # input lay
- 上一篇:爬取b站前百视频名称和链接
- 下一篇:微信定时发送消息源码
相关资源
- 利用keras实现的cnn卷积神经网络对手写
- snn脉冲神经网络.py
- BP神经网络(马疝病数据集).zip
- 基于vggnet卷积神经网络的图像风格迁
- PSO优化的BP神经网络——python实现
- 简单三层全连接神经网络做二分类问
- 基于神经网络控制一阶倒立摆小车
- 基于sklearn模块的神经网络实现“手写
- 神经网络模型python模板
- CNN卷积神经网络TensorFlow代码
- 二项分布的代码可视化实现
- BP神经网络马疝病数据集
- 机器学习之KNN识别验证码
- Python实现循环神经网络RNN
- 随机森林做泰坦尼克号案例的Python实
- Python识别深圳信用网验证码的完整代
- C4.5决策树算法的Python代码和数据样本
- 房价预测的BP神经网络实现_python代码
- 机器学习深度学习篇系列分享_超值
- 《PyTorch生成对抗网络编程》思维导图
- Python数据分析与机器学习-Python库分析
- 决策树DecisionTree项目python代码实现
- 台大李宏毅机器学习课程Pokemon 宝可梦
- 《Python神经网络编程》源代码
- RL-Stock-master 使用强化学习完成股票预
- Python-Keras实现的DeepSpeech端到端语音识
- Python-FastFCN用于语义分割的RethinkingD
- Python-使用RNN股市预测
- Python-使用最新版本的tensorflow实现se
- 卷积神经网络(CNN)源码
评论
共有 条评论