深度学习-神经网络原理-39

目录

  • [1. 神经网络算法是有监督的学习算法,](#1. 神经网络算法是有监督的学习算法,)
  • [2. 分类](#2. 分类)
  • [3. 训练](#3. 训练)
  • [4. 代码](#4. 代码)

进入新的内容,深度学习啦
万事万物的产生不是一下子就变出来的,学术上也是,一点点的进步才催生出一门新的学科或者技术,神经网络用于机器学习也不例外,
前面的机器学习的内容,线性回归,逻辑回归,多分类,决策树,以及各种集成学习,再到概率图等等,其实隐约有了深度学习的影子,
只不过是只有一层输入一层输出的浅层神经网络,下面正式进入神经网络!

1. 神经网络算法是有监督的学习算法,

一个神经元 有很多树突dentrities(接收信号输入) 细胞体body经过分析综合汇总(激活函数) 通过轴突axon传递很长的距离,作为下一个神经元的输入 输出信号。

生物神经网络与人工神经元

  1. 激活函数:将神经元的净输入信号转换成单一的输出信号,以便进一步在网络中传播。(隐藏层如果没有进行非线性变换,那无非就是信号的放大与缩小,只是做"透传",不进行汇总 分析 综合,神经元的意义何在) 隐藏层激活函数必须是非线性的
  2. 网络拓扑:描述了模型中神经元的数量以及层数和它们连接的方式。
  3. 训练算法:指定如何设置连接权重,以便抑制或增加神经元在输入信号中的比重。

常见的激活函数: (本质上是为了进行非线性的变换 如果都是线性变换 那一层就能搞定 要其他的层干嘛, 这也就是与之前的线性回归的本质区别)

  1. sigmoid

    输出正例的概率 隐射到 0-1之间

  2. tanh

    hyperbolic tangent

    隐射到 -1--1 之间


  3. relu

    只有信号强到一定的程度才会输出

2. 分类

例如三分类 用ovr的方式训练三个二分类 逻辑回归

使用softmax变换

3. 训练

一次迭代:

前向传播计算一次输出loss

根据loss 以及梯度 更新w

这样来回一次 完成一次迭代

4. 代码

from sklearn.neural_network import MLPRegressor
from sklearn.neural_network import MLPClassifier

X = [[0, 0],
     [1, 2]]
y = [0,
     1]

clf = MLPClassifier(solver="sgd", alpha=0.00001, activation="relu", hidden_layer_sizes=(5, 2), max_iter=2000,
                    tol=0.00001)
clf.fit(X, y)

predict_value = clf.predict([[2, 2], [-1, -2]])
print(predict_value)

predict_prob = clf.predict_proba([[2, 2], [-1, -2]])
print(predict_prob)

print([coef.shape for coef in clf.coefs_])
print([coef for coef in clf.coefs_])