读书笔记04

这周学习了python的链表里的单向链表,卷积神经网络一些基础知识。

1、首先我们来介绍以下链表

链表里的每个节点都由一个数值和一个指针构成。这里面涉及了指针的知识。

链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。相比于数组,链表的一个主要优势是它的大小可以动态变化,因为节点可以在运行时添加或删除。链表可以分为单向链表、双向链表和循环链表三种类型。

单向链表中每个节点只有一个指针,指向下一个节点。从头节点开始,通过遍历指针依次访问每个节点。

双向链表中每个节点有两个指针,一个指向前一个节点,一个指向后一个节点。这使得在链表中向前或向后遍历都很容易。

循环链表与单向或双向链表的不同之处在于,最后一个节点指向第一个节点,形成一个循环。这使得在链表中进行循环遍历时非常方便。

链表的缺点是,它的访问时间比数组更慢,因为链表的节点不是连续存储的,而是分散在内存中。此外,链表的插入和删除操作相对于数组更为高效,但是在访问链表的第n个元素时需要遍历前n-1个元素,所以查找链表中某个元素的时间复杂度是O(n)。

class Node:
    def __init__(self, date):
        self.date = date
        self.next = None

class LinkedList:
    def __init__(self):
        self.head = None

    def insert_at_beginning(self, date):
        new_node = Node(date)
        new_node.next = self.head
        self.head = new_node

    def insert_at_end(self, date):
        new_node = Node(date)
        if self.head is None:
            self.head = new_node
            return
        last_node = self.head
        while last_node.next:
            last_node = last_node.next
        last_node.next = new_node

    def insert_after_node(self, prev_node, date):
        if prev_node is None:
            print("Previous node is not in the link")
            return
        new_node = Node(date)
        new_node.next = prev_node.next
        prev_node.next = new_node

    def delete_node(self, key):
        curr_node = self.head
        if curr_node and curr_node.data == key:
            self.head = curr_node.next
            curr_node = None
            return
        prev_node = None
        while curr_node and curr_node.data != key:
            prev_node = curr_node
            curr_node = curr_node.next
        if curr_node is None:
            return
        prev_node.next = curr_node.next
        curr_node = None

    def print_list(self):
        curr_node = self.head
        while curr_node:
            print(curr_node.data)
            curr_node = curr_node.next

这涉及了单向链表的定义、头部插入、尾部插入、中间插入、打印等

2、介绍一下权重、偏置项、激活函数和损失函数

1、权重(weights):权重是神经元之间的连接强度,用于控制输入信号在神经元之间的传递和转化。在神经网中,
每个神经元都有一组权重向量,用于对输入信号进行加权求和。权重是神经网络中最重要和最需要优化的参数之一,
其优化结果直接影响神经网络的性能和准确率。
2、偏置项(bias):偏置项是神经元的激活阈值,用于控制神经元的激活状态。在神经网络中,每个神经元都有一个
偏置项,用于调节神经元的输出值。偏置项通常被初始化为一个较小的常数值,以确保神经元的初始状态不会过于偏向某个方向,从而避免神经网络出现梯度消失或梯度爆炸等问题。
3、激活函数
在神经网络中,激活函数(activation function)用来处理神经元的输入信号,产生输出信号的一种数学函数。激活函数的主要作用是引入非线性因素,使得神经网络能够更好地适应复杂得输入数据。激活函数通常被应用于每个神经
元得输出值,将其转化为一个非线性得激活状态,从而使得神经网络能够更好地捕捉数据中得非线性关系。
常见得激活函数包括:
1、Sigmoid函数:Sigmoid函数是一种常用得激活函数,它将输入值映射到0到1之间的输出值,具有连续可导性和
可逆性等优点,但Sigmoid函数在输入值较大或者较小时,梯度会趋近于0,导致梯度消失问题。
2、ReLu函数:ReLU函数是一种简单而有效的激活函数,它将负数输入值直接设置为0,保持正数输入值不变。ReLu函数具有非线性特征和计算速度快等优点,但也存在输出值不可为负数的问题。
3、Tanh函数:Tanh函数是一种双曲正切函数,它将输入值映射到-1到1之间的输出值,具有Sigmoid函数的非线性特征,但对于输入值过大或过小,同样存在梯度消失问题。
4、Softmax函数:Softmax函数是一种常用的激活函数,主要用于多分类问题中,将神经元的输出值归一化到0到1之间,且所有输入值之和为1,方便进行分类任务的预测和概率计算等。

5、损失函数(loss function)是机器学习中用于衡量模型预测结果与真实结果之间差异的函数。在监督学习中,通常将损失函数定义为模型的预测结果与真实结果之间的差异(也称为误差或损失),并将其最小化。因此,损失函数是模型优化过程中的一个重要指标,优化的目标是使损失函数最小化。

常见的损失函数包括:

  1. 均方误差(Mean Squared Error,MSE):是回归问题中最常见的损失函数,它计算预测结果和真实结果之间的平均平方误差。

  2. 交叉熵(Cross Entropy):是分类问题中最常用的损失函数,它计算预测结果和真实结果之间的差异,通常用于二分类问题或多分类问题。

  3. KL散度(Kullback-Leibler Divergence):也是分类问题中的一种损失函数,它测量两个概率分布之间的差异。

  4. Hinge loss:是支持向量机(SVM)中常用的损失函数,主要用于分类问题,它将正确分类的预测结果(即预测结果和真实结果之间的差异为0)与错误分类的预测结果(即预测结果和真实结果之间的差异为正数)区分开来。

  5. 交叉熵损失(Binary Cross Entropy / Categorical Cross Entropy):是用于二分类或多分类问题的分类损失函数,通常与Sigmoid或softmax激活函数一起使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值