飞飞女神的CV课之打好基础(1)

众所周知,硬编码是不行的,没有普适性,没有推广性。这里我们呢采用两个函数,不仅仅是输入图片,然后识别它是一只猫,一个是训练函数(用来接受图片和标签,然后输出模型)另一个是预测函数(接收一个模型,对图片种类进行预测)
CNN——convolutional neural networks

首先来熟悉基本操作:

  • 列表:a=[1,2,3,4],查询区间左闭右开。-1代表最后一个元素,-2倒数第二
  • 生成字典:a={‘key’:value},切记用冒号,查询用a[‘key’],添加元素用a[‘new_key’]=new_value
  • 布尔型:True和False,运算有and、or、 not
  • if:判断语句不需要打括号,直接if 判断:回车即可,else:回车
  • 循环:for i in …:回车
  • 函数:def 函数名():回车,用的时候直接函数名()即可
  • 类&Numpy&画图:详见VScode 2020/6/9.py
  • 感知机实现:详见VScode 2020/6/10.py

说起来,我半年钱就接触感知机了,只不过是人工智能期末考试的最后一题,没听讲的我哪里知道什么是感知机,,然后就瞎写一通,老师可怜我才给了91辛苦分,如今,恰是搞懂它的时候。

权重和偏置:

在这里插入图片描述
w1和w2都是权重;b是偏置
请注意—— 权重和偏置的作用不一样。具体来说,w1和w2是控制输入信号重要性的参数,而偏置则是调整神经元被激活的容易程度的参数(若b=-0.1,则只需要输入信号的加权总和超过0.1,神经元就会被激活;但是如果b=-20.0,则输入信号的加权总和必须超过0.1,神经元才会被激活)

感知机的局限:

这是作为神经网络的起源算法,称为“人工神经元”或“朴素感知机”,接受多个信号,输出一个信号(只有1/0两种取值即“流/不流”)
或门:x1=0,x2=0才输出零,其他都输出1
如果用类似高中线性规划的知识很容易划分,就是——

在这里插入图片描述
圈表示0,三角表示1,这条直线正确地将圈和三角分开了。
但是
异或门:仅当x1和x2中地一方为1,才输出1,来看看怎么划分圈和三角
在这里插入图片描述
答案是——无法用直线将圈和三角划分这就是感知机的局限所在,它只能表示由一条直线分割的空间。
那么——穷则变!用曲线呗!
在这里插入图片描述
但是这样的曲线无法用感知机表示,让人深表遗憾,但是也无需悲观,感知机的绝妙之处在于“叠加层”,下面我们尝试用“叠加层”表示异或门。(上面严格来讲应该是单层感知机无法实现异或门/无法分离非线性空间)
插一句——我一定是疯了,看着深度学习复习着数电,话说,异或门怎么用基本逻辑门表示来着?咦?好像忘了~怪不好意思的
在这里插入图片描述
在这里插入图片描述

尝试用感知机表示异或门

有一丝丝小激动!真值表放这里,别整错了

在这里插入图片描述
来吧!上代码!

import numpy as np
def AND(x1,x2):#与门
    x = np.array([x1,x2])
    w = np.array([0.5,0.5])
    b = -0.7
    temp = np.sum(x*w)+b
    if temp<=0:
        return 0
    elif temp>0:
        return 1

def NAND(x1,x2):#与非门
    x = np.array([x1,x2])
    w = np.array([-0.5,-0.5])
    b = 0.7
    temp = np.sum(x*w)+b
    if temp<=0:
        return 0
    elif temp>0:
        return 1

def OR(x1,x2):
    x = np.array([x1,x2])
    w = np.array([0.5,0.5])
    b = -0.2
    temp = np.sum(x*w)+b
    if temp<=0:
        return 0
    elif temp>0:
        return 1

def XOR(x1,x2):
    s1 = NAND(x1,x2)
    s2 = OR(x1,x2)
    y = AND(s1,s2)
    return y

print(XOR(0,0),XOR(1,0),XOR(0,1),XOR(1,1))

用神经元表示,已经初现端倪了!
在这里插入图片描述
这里我暂时把它肤浅地理解为函数の嵌套。
前面的与门、或门、与非门都是单层感知机,异或门是我们接触的第一个多层感知机(其实也就2层啦!但是我觉得已经是迈出了不小的一步了)可以解释为“单层感知机无法表示的东西,增加一层就可以表示了。
实际上,感知机远不止步于此,它可以表示更加复杂的加法器、二转十编码器,呱呱呱呱呱呱呱呱呱,更让人惊讶的是,感知机居然能表示计算机!
正常人都会认为非常复杂,实际上,用与非门即可表示计算机,我们在前面的代码中给出了与非门的实现,所以——用组合感知机是可以表示计算机的!详见《计算机系统要素:从零开始构建现代计算机》,我觉得有空可以拜读一下,这大概就是不久之后要学的计组吧!
今天的内容是神经网络基础,加油!冲冲冲冲!明天继续!

猜你喜欢

转载自blog.csdn.net/weixin_43905108/article/details/106634673