深度学习入门笔记3 自适应神经元

简介: 深度学习入门笔记3 自适应神经元

自适应线性神经元

概念

自适应线性神经网络(ADALINE——Adaptive Linear Neuron)是在感知器的基础上进行的一种改进。激活函数采用线性连续的函数来代替阶跃函数。

自适应神经元&感知器

  • 激活函数:自适应神经元使用线性激活函数,感知器使用阶跃函数。
  • 误差更新:自适应神经元在最终结果前进行更新,感知器在最终结果后进行更新。
  • 损失函数:自适应神经元使用SSE最为损失函数,感知器没有损失函数。
  • 应用:自适应神经元可以进行分类与回归(可以输出连续值或离散值),感知器不能进行回归。

计算公式


image.png

import numpy as np
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error
class AdaLine:
    """Python实现自适应线性神经网络。使用批量梯度下降调整权重。"""
    def __init__(self, alpha, times):
        """初始化方法。
        Parameters
        ------
        alpha : float
            学习率。
        times : int
            对数据集进行多少轮的迭代(epoch)。
        """
        self.alpha = alpha
        self.times = times
    # 批量梯度下降
    def fit(self, X, y):
        """使用指定的样本与标签进行训练。得到一个合适的权重值。
        Parameters
        -----
        X : 类数组类型。形状:(样本数量, 特征数量)
            提供训练的样本数据。
        y : 类数组类型。形状:(样本数量,)。
            样本对应的标签。
        """
        X = np.asarray(X)
        y = np.asarray(y)
        # 对权重进行初始化(初始化为0),此处将w与b分开处理(w的长度与特征的长度相同)。
        self.w_ = np.zeros(shape=(X.shape[1], 1))
        # 对偏置进行初始化。
        self.b_ = 0
        # 定义损失列表。用来保存每次数据集迭代过程中的损失值。
        self.cost_ = []
        # 进行迭代
        for _ in range(self.times):
            # 注意:感知器的时候,我们是对每一个样本进行的处理,但是,这里,我们
            # 使用批量梯度下降,是针对整个数据集计算梯度。
#             for x, target in zip(X, y):
            # 计算净输入。
            net_input = np.dot(X, self.w_) + self.b_
            # 将净输入传入激活函数。得到输出。这里的a就相当于是y_hat。
            a = self.activation(net_input)
            # 计算误差。用来反向传播,更新权重。(error是一个矢量,长度为样本的数量,
            # 保存的是每一个样本的误差值。
            error = y - a
            self.w_ += self.alpha * X.T.dot(error)
            self.b_ += self.alpha * error.sum()
            # 计算损失值。
            cost = (error ** 2).sum() / 2.0
            # 加入损失列表中
            self.cost_.append(cost)
    def activation(self, X):
        """激活函数。这里使用y=x作为激活函数。
        Parameters
        ------
        X : 数组类型
            净输入
        Returns
        -----
        r : 数组类型
            激活之后的结果。
        """
        return X
    def predict(self, X):
        """进行预测。
        Parameters
        -----
        X : 类数组类型。
            待预测的样本。
        """
        net_input = np.dot(X, self.w_) + self.b_
        return self.activation(net_input)
X, y = load_boston(return_X_y=True)
X
X, y = load_boston(return_X_y=True)
y = y.reshape(-1, 1)
train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.25, random_state=0)
# 对特征列进行标准化处理。
s = StandardScaler()
train_X = s.fit_transform(train_X)
test_X = s.transform(test_X)
s2 = StandardScaler()
train_y = s2.fit_transform(train_y)
test_y = s2.transform(test_y)
ada = AdaLine(0.0005, 20)
ada.fit(train_X, train_y)
result = ada.predict(test_X)
display(result)
display(ada.cost_)
display(mean_squared_error(test_y, result))
import matplotlib as mpl
import matplotlib.pyplot as plt
mpl.rcParams["font.family"] = "SimHei"
mpl.rcParams["axes.unicode_minus"]=False
plt.figure(figsize=(10, 10))
# 绘制预测值.
plt.plot(result, "ro-", label="预测值")
# 绘制真实值
plt.plot(test_y, "go--", label="真实值")
plt.title("自适应神经元-梯度下降")
plt.xlabel("样本序号")
plt.ylabel("房价")
plt.legend()
plt.show()
# 绘制累计误差值
plt.plot(range(1, ada.times + 1), ada.cost_, "o-")
# 因为房价分析涉及多个维度,不方便进行可视化,为了
# 实现可视化,我们只选取其中的一个维度(RM),并画出直线,
# 实现拟合。
X, y = load_boston(return_X_y=True)
X = X[:, 5]
X = X.reshape(-1, 1)
y = y.reshape(-1, 1)
train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.25, random_state=0)
ada = AdaLine(alpha=0.0005, times=100)
# 对数据进行标准化处理。
s = StandardScaler()
train_X = s.fit_transform(train_X)
test_X = s.transform(test_X)
s2 = StandardScaler()
train_y = s2.fit_transform(train_y)
test_y = s2.transform(test_y)
ada.fit(train_X, train_y)
result = ada.predict(test_X)
display(mean_squared_error(test_y, result))
plt.scatter(train_X, train_y)
# 查看方程系数
display(ada.w_, ada.b_)
# 构建方程 y = w * x + b
x = np.arange(-5, 5, 0.1)
# y = 0.69822681 * x -1.5853984791647233e-15
plt.plot(x, y, "r")
# 也可以这样来做。
plt.plot(x, ada.predict(x.reshape(-1, 1)), "r")


相关文章
|
2月前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
3月前
|
机器学习/深度学习 算法 测试技术
深度学习环境搭建笔记(二):mmdetection-CPU安装和训练
本文是关于如何搭建深度学习环境,特别是使用mmdetection进行CPU安装和训练的详细指南。包括安装Anaconda、创建虚拟环境、安装PyTorch、mmcv-full和mmdetection,以及测试环境和训练目标检测模型的步骤。还提供了数据集准备、检查和网络训练的详细说明。
167 5
深度学习环境搭建笔记(二):mmdetection-CPU安装和训练
|
3月前
|
机器学习/深度学习 数据可视化 计算机视觉
目标检测笔记(五):详细介绍并实现可视化深度学习中每层特征层的网络训练情况
这篇文章详细介绍了如何通过可视化深度学习中每层特征层来理解网络的内部运作,并使用ResNet系列网络作为例子,展示了如何在训练过程中加入代码来绘制和保存特征图。
70 1
目标检测笔记(五):详细介绍并实现可视化深度学习中每层特征层的网络训练情况
|
1月前
|
机器学习/深度学习 人工智能 算法
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
82 3
|
2月前
|
机器学习/深度学习 人工智能 算法框架/工具
深度学习中的卷积神经网络(CNN)入门
【10月更文挑战第41天】在人工智能的璀璨星空下,卷积神经网络(CNN)如一颗耀眼的新星,照亮了图像处理和视觉识别的路径。本文将深入浅出地介绍CNN的基本概念、核心结构和工作原理,同时提供代码示例,带领初学者轻松步入这一神秘而又充满无限可能的领域。
|
3月前
|
机器学习/深度学习
深度学习笔记(十二):普通卷积、深度可分离卷积、空间可分离卷积代码
本文探讨了深度可分离卷积和空间可分离卷积,通过代码示例展示了它们在降低计算复杂性和提高效率方面的优势。
325 2
深度学习笔记(十二):普通卷积、深度可分离卷积、空间可分离卷积代码
|
3月前
|
机器学习/深度学习 并行计算 PyTorch
深度学习环境搭建笔记(一):detectron2安装过程
这篇博客文章详细介绍了在Windows环境下,使用CUDA 10.2配置深度学习环境,并安装detectron2库的步骤,包括安装Python、pycocotools、Torch和Torchvision、fvcore,以及对Detectron2和PyTorch代码的修改。
612 1
深度学习环境搭建笔记(一):detectron2安装过程
|
3月前
|
机器学习/深度学习 算法 PyTorch
深度学习笔记(十三):IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU、WIOU损失函数分析及Pytorch实现
这篇文章详细介绍了多种用于目标检测任务中的边界框回归损失函数,包括IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU和WIOU,并提供了它们的Pytorch实现代码。
458 1
深度学习笔记(十三):IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU、WIOU损失函数分析及Pytorch实现
|
3月前
|
机器学习/深度学习 人工智能 自动驾驶
深度学习之自适应控制器设计
人工智能基于深度学习的自适应控制器设计在自动化系统、机器人控制、工业制造、无人驾驶等领域中有着广泛应用。自适应控制器借助深度学习模型的强大特征提取和学习能力,能够在未知或动态变化的环境中对系统进行实时调节,从而提升系统的响应速度、稳定性和控制精度。
83 1
|
3月前
|
机器学习/深度学习 自然语言处理 并行计算
深度学习笔记(十四):Transormer知识总结
关于深度学习中Transformer模型的知识总结,涵盖了Self-attention机制、QKV、Multi-head attention、位置编码和并行运算等关键概念,以及如何在PyTorch中实现Self-attention。
74 1