吴恩达深度学习笔记(代码片段)

好奇小圈 好奇小圈     2022-12-06     787

关键词:

神经网络


文章目录


前言

学习的第二天


一、一些基础的numpy语法

import numpy as np

a=np.array([1,2,3,4])#生成数组
print(a)

import time

a=np.random.rand(1000000)#生成随机数
b=np.random.rand(1000000)

tic=time.time()#计时
c=np.dot(a,b)#点乘
toc=time.time()

print("array time is:"+str(1000*(toc-tic))+"ms")#输出+类似js的字符串合并+强制类型转换


c=0
tic=time.time()#计时
for i in range(1000000):#循环
    c+=a[i]*b[i]
toc=time.time()

print("loop time is:"+str(1000*(toc-tic))+"ms")

n=4
u=np.zeros((n,1))#生成零数组
for i in rang n:
    u[i]=math.exp(a[i])#指数函数
'''
np.log(v)
np.abs(v)
np.sum(v)
np.maxnum(v,0)找包括零的所有数中的最大数
v**2是每个数的平方
1/v就是倒数

'''

import numpy as np
a=np.array([[56,0,4.4,68],[1.2,104,52,8],[1.8,135,99,0.9]])#二维数组

print(a)
b=np.sum(a,axis=0)#列项求和
#也可以b=a.sum(axis=0)
c=100*a/b.reshape(1,4)#a点除b,reshape:让数组变成1行4列
print(c)
#assert(断言)用于判断一个表达式,在表达式条件为 false 的时候触发异常。


同时,python中初始化向量时应注明行列,否则会出现无法转置的奇怪问题。如果你不确定中间结果是不是符合预期,可以使用

assert(a.shape==(5,1))

进行判断,然后用reshape重塑

a=a.reshape((5,1))


上一节提到的logistics损失函数,主要是基于伯努利分布和极大似然的原理

二、神经网络

1、原理

已经有模式识别和数学建模基础,故此处简写

具有logistics相似的反向传播,虽然有三层,但一般称作双层神经网络,因为一般输入层不算上。

向量化:


2、代码

我这里用MATLAB实现了一个双层的

MATLAB版本:

clc;clear;
m=10;n=5;
x=[1:5]';
x=[x*ones(1,5),x*ones(1,5)*0.1];
x=x+0.2*rand(n,m)-0.1;
y=[1,1,1,1,1,0,0,0,0,0];%生成原始标签
%初始化
%第一层
node=20;%你想要的节点数量
w1=0.1*ones(node,5);%初始权重w1
b1=0.1*ones(node,1);%初始化b1
z1=rand(20,10);

%第二层
w2=ones(1,node);
b2=1;
z2=w2*z1+b2;

a=0.01;%学习率
N=1000;
z2=zeros(1,m);
dz2=zeros(1,m);
%已知训练集x(n*m),标签Y(m*1),以及初始的w(1*n)b(1*1),训练次数N,学习率a
%先反向传播第二层
for i=1:N
    z2=w2*z1+b2;
    A2=1./(1+exp(-z2));
    dz2=A2-y;
    dw2=1/m*z1*dz2';
    db2=1/m*sum(dz2);
    w2=w2-a*dw2';
    b2=b2-a*db2;
end


%后反向传播第一层
N=1000;
Y=z1;
dz1=zeros(size(z1));
%已知训练集x(n*m),标签Y(m*1),以及初始的w(1*n)b(1*1),训练次数n,学习率a
for i=1:N
    z1=w1*x+b1;
    A1=1./(1+exp(-z1));
    dz1=A1-Y;
    dw1=1/m*x*dz1';
    db1=1/m*sum(dz1);
    w1=w1-a*dw1';
    b1=b1-a*db1;
end

Z1=w1*x+b1;
Z2=w2*Z1+b2;
A=1./(1+exp(-Z2));
AA=A;
A(find(A>=0.5))=1;
A(find(A<0.5))=0;
percent=sum(sign(find(A==y)))/10
J=-1/10*sum(y.*log(AA)+(1-y).*log(1-AA))


还有

python版本:

import numpy as np
m=10
n=5
x=np.array([1,2,3,4,5])
x=x.reshape(n,1)

x1=x*np.ones((1,n))+0.5*np.random.randn(n,n)
x2=0.1*x*np.ones((1,n))+0.05*np.random.randn(n,n)
x=np.concatenate((x1,x2),axis=1)
y=np.array([[1,1,1,1,1,0,0,0,0,0]])#生成原始标签
#初始化
#第一层
node=20#你想要的节点数量
w1=0.1*np.ones((node,5))#初始权重w1
b1=0.1*np.ones((node,1))#初始化b1
z1=np.random.rand(20,10)

#第二层
w2=np.ones((1,node))
b2=1
z2=w2@z1+b2#python的矩阵乘法还挺麻烦

a=0.01#学习率
N=1000
z2=np.zeros((1,m))
dz2=np.zeros((1,m))


#先反向传播第二层

for i in range(N):
    z2=w2@z1+b2
    A2=1/(1+np.exp(-z2))
    dz2=A2-y
    dw2=1/m*z1@dz2.swapaxes(0,1)#转置
    db2=1/m*dz2.sum()
    w2=w2-a*dw2.swapaxes(0,1)
    b2=b2-a*db2


Y=z1
dz1=np.zeros(np.size(z1))
#已知训练集x(n*m),标签Y(m*1),以及初始的w(1*n),b(1*1),训练次数n,学习率a
for i in range(N):
    z1=w1@x+b1
    A1=1/(1+np.exp(-z1))
    dz1=A1-Y
    dw1=1/m*x@dz1.swapaxes(0,1)
    db1=1/m*sum(dz1)
    w1=w1-a*dw1.swapaxes(0,1)
    b1=b1-a*db1


Z1=w1@x+b1
Z2=w2@Z1+b2
A=1/(1+np.exp(-Z2))
temp=0


AA=np.array(A)#numpy.array的数组只能这么复制,否则复制的是指针

for i in range(10):
    if A[0,i]>=0.5:
        A[0,i]=1
    else:
        A[0,i]=0
    if A[0,i]==y[0,i]:
        temp+=1

percent=temp*10
print("正确率为"+str(percent)+"%")#必须强制类型转换
J=-1/10*np.sum(np.dot(y,np.log(AA).T)+np.dot(1-y,np.log(1-AA).T))
print("损失函数数值为"+str(J))

正确率为100%
损失函数数值为0.43208082228886674
由于二分类问题比较简单,因此正确率还是不错的,学过MATLAB,没学python,但numpy库很多只是比MATLAB多了个numpy.······但是会遇到上面提到的奇奇怪怪的bug,人性化程度不如MATLAB

3、激活函数

tanh函数


Relu函数



其原点无意义

Leaky ReLU函数(PReLU)


ELU (Exponential Linear Units) 函数



初值应尽量小


总结


部分图片公式转自:常用激活函数(激励函数)理解与总结

卷积神经网络笔记--吴恩达深度学习课程笔记(代码片段)

各个知识点详解LeNet-5网络LetNet网络的的讲解主要参考1998年计算机科学家YannLeCun发布的一篇论文《Gradientbasedlearningappliedtodocument-recognition》大家可以找到这篇论文结合学习,针对该网络,首先大家需要了解一下图像中的常... 查看详情

最为详细的卷积神经网络笔记--吴恩达深度学习课程笔记(代码片段)

各个知识点详解LeNet-5网络LetNet网络的的讲解主要参考1998年计算机科学家YannLeCun发布的一篇论文《Gradientbasedlearningappliedtodocument-recognition》大家可以找到这篇论文结合学习,针对该网络,首先大家需要了解一下图像中的常... 查看详情

吴恩达深度学习笔记(代码片段)

神经网络文章目录神经网络前言一、一些基础的numpy语法二、神经网络1、原理2、代码MATLAB版本:python版本:3、激活函数tanh函数Relu函数LeakyReLU函数(PReLU)ELU(ExponentialLinearUnits)函数总结前言学习的第二天一、一些... 查看详情

吴恩达机器学习笔记(代码片段)

文章目录ErroranalysisMethodstosolveoverfittingMethodstosolveunderfittingRecommendapproachErrormetricsforskewedclassesDataformachinelearningSupportVectorMachineK-meansPrincipleComponentAnalysisDatapreproce 查看详情

吴恩达深度学习笔记+作业

1.1.2Buildingbasicfunctionswithnumpy1.1.2.2numpy.exp,sigmoid,sigmoidgradientimportnumpyasnpdefsigmoid(x):s=1/(1+np.exp(-x))returns#设sigmoid为s,s‘=s*(1-s)defsigmoid_derivative(x):s=1/(1+np.exp(-x))ds=s* 查看详情

吴恩达机器学习笔记(代码片段)

文章目录ErroranalysisMethodstosolveoverfittingMethodstosolveunderfittingRecommendapproachErrormetricsforskewedclassesDataformachinelearningSupportVectorMachineK-meansPrincipleComponentAnalysisDatapreprocessingChoosingthenumberofprincipalcomponentsApplicationof`PCA`AnomalydetectionExample... 查看详情

吴恩达深度学习笔记(代码片段)

监督学习简介文章目录监督学习简介前言一、监督学习常见应用二、基础知识1.数据类型2.学习次序3.常用符号4.二分分类(logistics)5.梯度下降法6.导数和流程图(略)7.logistics中的梯度下降7.向量化的必要性8.向量... 查看详情

machinelearning(吴恩达<一>)(代码片段)

目录一、机器学习(ML)简介1.人工智能、机器学习、深度学习的关系2.机器学习与深度学习的比较2.1、应用场景2.2、所需数据量2.3、执行时间2.4、解决问题的方法3.监督学习(SupervisedLearning)4.无监督学习(Unsupervise... 查看详情

吴恩达deeplearning.ai课程笔记(1-3)神经网络和深度学习---浅层神经网络

以下为在Coursera上吴恩达老师的DeepLearning.ai课程项目中,第一部分《神经网络和深度学习》第二周课程部分关键点的笔记。笔记并不包含全部小视频课程的记录,如需学习笔记中舍弃的内容请至Coursera或者网易云课堂。同时在阅... 查看详情

coursera--deeplearning--吴恩达深度学习笔记2017.12.10

2017-12-10 19:27:01Broadcasting广播机制广泛用于数据处理。importnumpyasnpA=np.array([[56.0,0.0,4.4,68.0],[1.2,104.0,52.0,8.0],[1.8,135.0,99.0,0.9]])print(A)cal=A.sum(axis=0)print(cal)percentage=100*A/cal.resha 查看详情

吴恩达-深度学习-课程笔记-6:深度学习的实用层面(week1)

1训练/验证/测试集(Train/Dev/testsets)构建神经网络的时候有些参数需要选择,比如层数,单元数,学习率,激活函数。这些参数可以通过在验证集上的表现好坏来进行选择。前几年机器学习普遍的做法:把数据分成60%训练集,20%验... 查看详情

吴恩达深度学习专项课程2学习笔记/week2/optimizationalgorithms

Optimizationalgorithms优化算法以加速训练。Mini-batchgradientdescendBatchgradientdescend:每一小步梯度下降否需要计算所有的训练样本。很耗时。Mini-batchgradientdescend:将训练集分为很多小的mini-batch,每一个epoch用到一个mini-batch的训练样本,... 查看详情

吴恩达的视频课程做成了文字版~~~(代码片段)

ML机器学习课程地址:https://www.coursera.org/course/ml笔记地址:http://www.ai-start.com/ml2014/DL深度学习课程地址:https://mooc.study.163.com/university/deeplearning_ai#/c笔记地址:http://www.ai-start.com/dl2017/参考1.CSDN大神;完 查看详情

吴恩达深度学习专项课程3学习笔记/week2/erroranalysis

ErroranalysisCarryingouterroranalysisErroranalysis是手动分析算法错误的过程。通过一个例子来说明erroranalysis的过程。假设你在做猫图像识别的算法,它的错误率高达10%,你希望提高它的表现。你已经有了一些改进的想法,包括:算法把狗... 查看详情

吴恩达-深度学习-课程笔记-1introductiontodeeplearning(week1)

1什么是神经网络(Whatisaneuralnetwork)深度学习一般是指非常非常大的神经网络,那什么是神经网络呢?以房子价格预测为例,现在你有6个房子(样本数量),你知道房子的大小和对应价格,你想要建立一个函数来用房子的大小来预... 查看详情

吴恩达深度学习笔记(deeplearning.ai)之卷积神经网络

经典网络LeNet-5AlexNetVGGNg介绍了上述三个在计算机视觉中的经典网络。网络深度逐渐增加,训练的参数数量也骤增。AlexNet大约6000万参数,VGG大约上亿参数。从中我们可以学习到:随着网络深度增加,模型的效果能够提升。另外,VG... 查看详情

最为详细的卷积神经网络笔记--吴恩达深度学习课程笔记

卷积神经网络(二)二、经典神经网络的结构:LeNet-5AlexNetVGGResNet2.1LeNet-52.2AlexNet-5可以同时在两个GPU上运行2.3VGG2.4残差网络ResNet下图是一个残差块,输入a[l]会传送到l+2层的线性部分之后,这样它会直接参加... 查看详情

吴恩达-深度学习-课程笔记-14:人脸识别和风格迁移(week4)

 1什么是人脸识别(whatisfacerecognition)在相关文献中经常会提到人脸验证(verification)和人脸识别(recognition)。verification就是输入图像,名字或id,判断是不是。而人脸识别是输入图像,输出这个人的名字或id。我们先构造一个准确... 查看详情