2021-06-30 (一)深度学习入门笔记总结第一天!!

1.感知机

多个输入,一个输出。缺点就是形成异或门的局限性。没什么太多好说的,原理也很简单,直接上代码了。

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
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1

1.2或门的代码

import numpy as np
def OR(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])
    b = -0.2
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1

1.3与非门的代码

import numpy as np
def NAND(x1, x2):
    x = np.array([x1, x2])
    w = np.array([-0.5, -0.5])
    b = 0.7
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1

1.4异或门的代码,前面几种门结合一下就可以了。

from and_gate import AND
from or_gate import OR
from nand_gate import NAND

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

2.激活函数总结,激活函数其实就是一种判断的方式,以阈值为边界。

函数的总结

2.1 阶跃函数

def step_function(x):
    if x > 0:
        return 1
    else
        return 0

输入数据只接受实数即浮点数的类型,即只接受step_function(3.0)的类型,而不接受step_function([1.0, 2.0]),作出如下修改:

def step_function(x):
    y = x > 0
    return y.astype(np.int) #这个很重要,将其转换成int整实数类型

3. 三层神经网络的实现

这个视频讲的很详细

def init_network():      #定义了这个函数,可以用来进行权重和偏置的初始化
    network = {}         #并将下面的参数保存在字典变量network中
    network['w1'] = np.array([[0.1,0.3,0.5], [0.2,0.4,0.6]])
    network['b1'] = np.array([0.1,0.2,0.3])
    network['w2'] = np.array([[0.1,0.4], [0.2,0.5],[0.3,0.6]])
    network['b2'] = np.array([0.1,0.2])
    network['w3'] = np.array([[0.1,0.3], [0.2,0.4]])
    network['b3'] = np.array([0.1,0.2])

    return network

def forward(network, x):      #forward()函数,表示的是从输入到输出方向的传递处理。
    W1, W2, W3 = network['W1'], network['W2'], network['W3']
    b1, b2, b3 = network['b1'], network['b2'], network['b3']

    a1 = np.dot(x, W1) + b1
    z1 = sigmoid(a1)            #sigmoid()这个激活函数用来接收numpy数组并且返回元素个数相同的numpy数组 
    a2 = np.dot(z1, W2) + b2
    z2 = sigmoid(a2)
    a3 = np.dot(z2, W3) + b3
    y = identity_function(a3)    #identity_function()称为恒等函数,将其作为输出层的激活函数

    return y
#调用函数
    network = init_network()
    x = np.array([1, 0.5])
    y = forward(network, x)      #forward()函数,表示的是从输入到输出方向的传递处理。输出权重的初始值和x。
    print(y)

4. softmax函数

一般来说,回归问题用恒等函数,二分类问题用sigmoid函数,多分类问题用softmax函数。

溢出对策解释不错

import numpy as np
#softmax代码实现
a = np.array([0.3, 2.9, 4.0])
exp_a = np.exp(a) #指数函数
print(exp_a)
#结果[ 1.34985881 18.17414537 54.59815003]
sum_exp_a = np.sum(exp_a) #求他们的和
print(sum_exp_a)
#结果 74.1221542101633
y = exp_a/sum_exp_a
print(y)
#结果[0.01821127 0.24519181 0.73659691]

#整合成一个函数如下
def softmax(a):
    exp_a = np.exp(a) #指数函数
    sum_exp_a = np.sum(exp_a) #求他们的和
    y = exp_a/sum_exp_a
    return y 

5.python画图的函数Matplotlib

#Matplotlib是用于绘制图形的库!!以及数据可视化
#用matplotlib的pyplot模块绘制图形
import numpy as np
import matplotlib.pyplot as plt
#生成数据
x = np.array(0, 6, 0.1)  
y = np.sin(x)
#绘制图形
plt.plot(x, y) #将xy的数据传给plt.plot
plt.show()     #通过这个来显示图形

#pyplot的功能如下所示:
import numpy as np
import matplotlib.pyplot as plt
# 生成数据
x = np.arange(0, 6, 0.1) # 以0.1为单位,生成0到6的数据
y1 = np.sin(x)
y2 = np.cos(x)
# 绘制图形
plt.plot(x, y1, label="sin")
plt.plot(x, y2, linestyle = "--", label="cos")
plt.xlabel("x") # x轴的标签
plt.ylabel("y") # y轴的标签
plt.title('sin & cos')
plt.legend()
plt.show()
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值