神经网络基础与顺序神经网络的构建

        作为神经网络的基础,在我看来可以从感知机说起,感知机作为最简单的神经网络之一,他拥有一个输入层,一个隐藏层,一个输出层,最基本的感知机的作用是为了作为一个二类分类的线性分类模型。f(x) = sign(wx+b)作为感知机的基本公式,f(x)的取值为-1或者1适用于分类,而w与b分别为权值与偏置。

        感知机的作用本质上是通过不断调整权值与偏置,找到一条可以将实例完美分割的线。对于感知机的学习策略:

        1.首先设置一个步长与初始的权值与偏置,一般为1,0,0。

        2.然后带入实例点,由于实例点的y值为-1或1,所以可以通过y(wx+b)>0来判断,如果可以>0则说明是正确的分类,不满足则需要对w与b进行更新。

        3.由于对于f(x)来说要得到w与b的表达式,得通过求偏导的方式求出结果,w_{_{_{1}}} = w_{0}+\alpha xy,

b_{1}=b_{0}+\alpha y,此处\alpha为步长也可以称为学习率。(这里类似于线性回归的梯度下降,非常雷同)

        4.直到全部分类正确后,得到的最终值为结果。

        还有关于感知机收敛与对偶问题的证明不在此赘述。

        现在通过函数来构建一个感知机:

import numpy as np
from sklearn.datasets import load_iris
from sklearn.linear_model import Perceptron
iris =load_iris()
X  =iris.data[:,(2,3)]
y=(iris.target==0).astype(np.int)
per_clf = Perceptron()
per_clf.fit(X,y)
y_pred =per_clf.predict([[2,0.5]])
y_pred

        当然,一层感知机是不够的,这里可以建立多层的感知机(MLP),这会导致存在存在多个w与b需要更改,这里引入了反向传播算法即BP算法,在BP算法中运用了链式求导法则,当然这只是一个辅助,在反向传播算法中,首先要进行的是正向传播,只有正向传播,得到中间值,才能继续后续的反向传播,这里假设在输出之间没有激活函数(这样子会更直观)。当正向传播过去之后,会存在中间值,然后输出y后,与真实值进行比较,在损失函数计算之后,得到误差\delta,这时开始反向传播,这个误差可以有上一层的神经元来的权值与其误差的乘积来得到w\delta _{_{_{1}}},这样子以此类推,可以得到所有神经元的误差(除了输入神经元),然后就是对误差进行更新w_{1} = w_{0}+\partial \delta _{0}\frac{\partial A}{\partial e}x_{0} 这里A为正向传播的中间结果,e为输入神经元的一个神经元,\delta为那个神经元的误差,这样子就可以完成更新,这里的\frac{\partial A}{\partial e}需要使用链式求导法则。

        存在多种MLP(回归与分类),两者最大的区别为激活函数的不同(下一篇会详细讲)。

        顺序MLP的建立与神经网络的步骤。

        顺序神经网络是通过keras.models.Sequential()来建立,这是顺序连接的单层神经元连接而成。

        神经网络建立步骤:

        1.建立基本模型。

        2.进行模型编译。model.compile()

        3.对模型进行训练。model.fit()

        4.对模型进行评估。model.evaluate()

代码实例:

import tensorflow as tf
from tensorflow import keras
fashion_mnist =keras.datasets.fashion_mnist
(x_train_full,y_train_full),(x_test,y_test)=fashion_mnist.load_data()
x_val,x_train =x_train_full[:5000]/255.0,x_train_full[5000:]/255.0
y_val,y_train=y_train_full[:5000],y_train_full[5000:]
model=keras.models.Sequential([
    keras.layers.Flatten(input_shape=[28,28]),
    keras.layers.Dense(300,activation='relu'),
    keras.layers.Dense(100,activation='relu'),
    keras.layers.Dense(10,activation='softmax')
    ]
)
model.summary()
##获得权重
hidden1 =model.layers[1]
weights,biases=hidden1.get_weights()
model.compile(loss='sparse_categorical_crossentropy',
             optimizer='sgd',
             metrics=['accuracy'])
history=model.fit(x_train,y_train,epochs=30,validation_data=(x_val,y_val))
keras.utils.plot_model(model, "my_fashion_mnist_model.png", show_shapes=True)
x_test = x_test / 255.
model.evaluate(x_test,y_test)

        5.对模型进行预测

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值