深度学习之线性神经网络

一、线性神经网络介绍

1.线性神经网络和单层感知器非常类似,单层感知器的激活函数是sign函数,线性神经网络的激活函数是y=x函数,也称为线性函数。

二、任务要求

题目:假设有3个2维的数据,数据特征分别是(3,3),(4,3),(1,1),(2,1)。(3.3)和(4,3)两个数据的标签为1,(1,1),(2,1)数据标签为-1,构建线性神经网络分类。
思路:我们要分类的数据是二维数据,所以只需要2个输入节点(一般输入数据有几个特征,我们就设置几个输入神经元),我们可以把神经元的偏置值也设置成一个输入节点,因此就有三个输入节点。结构如图。在这里插入图片描述

三、模型构建

1.在pycharm中导入numpy科学计算包和matplotlib画图包。

import numpy as np
import matplotlib.pyplot as plt

2.定义输入数据,习惯一行代表一个数据,默认所有神经元输入偏置为1,因此输入数据表示如下。

#输入数据,一行代表一个数据。
X=np.array([[1,3,3],
            [1,4,3],
            [1,1,1],
            [1,2,1]])

3.定义标签,习惯一行代表一个标签,设置如下。

Y=np.array([[1],
            [1],
            [-1],
            [-1]])

4.初始化权值,输入为三个神经元,输出为一个神经元,因此是3-1结构,所以权值设置为三行一列结构,权值在0-1内随机产生,如下。

W=np.random.random([3,1])

5.设置学习率和神经网路输出,学习率不易设置太大或者太小,否则会产生梯度爆炸或者学习效率太低,一般设置为0-1之间。

lr=0.1
Y=0

6.定义更新权值函数,首先使用权值W这个全局变量,其次计算四个数据的预测值,再计算标签值与预测值的误差,表达式为E=T-Y,最后计算权值的更新,权值更新表达式为△W=lrEX得到每一次权值的改变,设置如下。

def train():
    globle W
    #计算预测值
    Y=np.dot(X,W)
    #计算误差
    E=T-Y
    #shape[0]表示X的行数,表示你有多少个数据,除后表示权值改变的平均
    delta_W=lr*(X.T.dot(E))/X.shape[0]
    #更新权值
    W=W+delta_W
    

7.设置训练次数,利用循环更新次数,如下。

for i in range(100):
    train()

8.画图,首先设置标签为1的正样本x,y的坐标,再设置负样本x,y的坐标,如图。

#正样本
x1=[3,4]
y1=[3,3]
#负样本
x2=[1,2]
y2=[1,1]

9.计算分界线的斜率和截距,神经网络的总和为x0w0+x1w1+x2w2,所以令其为0时候,因为x0永远是1,把x1和x2分别看做平面坐标系中的x和y,得到y=-w0/w2-w1x/w2,所以可得到斜率和截距。如下

k=-W[1]/W[2]
d=-W[0]/W[2]

10.设定两个点来确定直线。并画出正负样本散点图,如下

xdate=(0,5)
plt.plot(x_data,xdata*k+d,'r')
plt.scatter(x1,y1,c='b')
plt.scatter(x2,y2,c='r')
plt.show()
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一无所知的小白·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值