深度学习基础-1

什么是人工智能?

学习的能力,是智能的本质。 可以的

  • 图像分类:计算机视觉核心任务

  • 图像在计算机中长什么样呢?

    一张图片被表示成三维数组的形式,每个像素的值从0-255
    例如:3001003
    在这里插入图片描述

  • 挑战:照射角度
    在这里插入图片描述

  • 挑战:光照强度
    在这里插入图片描述

  • 挑战:形状改变
    在这里插入图片描述

  • 挑战:部分遮蔽
    在这里插入图片描述

  • 挑战:背景混入
    在这里插入图片描述

  • Viewpoint variatio(视角变化)
     发

  • Scale variation(尺度变化)
    在这里插入图片描述

  • Illumination conditions(光照条件)
    在这里插入图片描述

  • Deformation(形变)
    在这里插入图片描述

  • Occlusion
    在这里插入图片描述

  • Background clutter
    在这里插入图片描述

  • Intra-class variation
    在这里插入图片描述

常规方法:

  1. 收集数据并给定标签
  2. 训练一个分类器
  3. 测试,评估
def  train(train_images, train_lablels):
	# bulid a model for images -> labels
	return model

def predict(model, test_images):
	# predict test_labels using the model
	return	

K-近邻

在这里插入图片描述

  • 如果K=3,绿色圆点的最近的3个邻居是两个红色小三角形和1个蓝色小正方形,基于统计的方法,判断绿色的这个待分类点属于红色的三角形一类。

  • 如何K=5,绿色圆点的最近的5个邻居是2个红色三角形和3个蓝色的正方形,基于统计的方法,判定绿色的这个待分类点属于蓝色的正方形一类。

    KNN算法概述

    • KNN算法本身简单有效,它是一种lazy-learning算法
    • 分类器不需要使用训练集进行训练,训练时间复杂度为0
    • KNN分类的计算复杂度和训练集中的文档数目成正比,也就是说,如果训练集中文档总数为n,那么KNN的分类时间复杂度为O(n)
    • 该算法的三个基本要素:
    1. K值的选择
    2. 距离度量
    3. 分类决策规则
    • 问题:该算法在分类时有个主要的不足是,当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数
    • 解决:不同的样本给与不同的权重

数据库样例:CIFAR-10

  • 10类标签
  • 50000个训练数据
  • 10000个测试数据
  • 大小均为32*32
    在这里插入图片描述
  1. 如何计算呢?
    在这里插入图片描述
  2. 测试结果
    在这里插入图片描述
  3. 最近邻代码
import numpy as np

class NearestNeighbor:
	def __init__(self):
		pass
		
def train(self, X, y):
	"""X is N*D where each row is an example.Y is 1-dimension of size N"""
	# the nearest neighbor classifier simply remembers all the training data
	self.Xtr = X
	self.ytr = y

def predict(self, X):
	"""X is N*D where each row is an example we wish to predict label for"""
	num_test = X.shape[0]
	#lets make sure that the output type matches the input type
	Ypred = np.zeros(num_test, dtype = self.ytr.dtype)

	# loop over all test rows
	for i in xrange(num_test):
		# find the nearest training image to the i'th test image
		# using the L1 distance (sum of absolute value differences)
		distances = np.sum(np.abs(self.Xtr - X[i,:]), axis = 1)
		min_index = np.argmin(distances) # get the index with smallest distance
		Ypred[i] = self.ytr[min_index] # predict the label of the nearest example
		
	return Ypred
  • 超参数
  • L1(Manhattan) distance:
    在这里插入图片描述
  • L2(Euclidean) distance
    在这里插入图片描述
  1. 问题:
  • 对于距离如何设定?
  • 对于K近邻的K该如何选择?
  • 如果有的话,其它超参数该怎么设定呢?
  1. 找到最好的参数
    在这里插入图片描述
  • 多次用测试数据试验,找到最好的一组参数组合,这是错误的想法,因为测试数据只能最终用

  • 测试结果:

    使用验证集调节参数
    在这里插入图片描述

  1. 实现K-近邻算法
  • 选取超参数的正确方法是:

    原始训练集分为训练集验证集,我们在验证集上尝试不同的超参数,最后保留表现最好的那个

  • 如果数据量不够,使用交叉验证方法,他能够帮助我们在选取最优超参数的时候减少噪音

  • 一旦找到最优的超参数,就让算法以该参数在测试集跑一次,并根据测试结果评价算法

  • 最近邻分类器能够在CIF-10上得到将近40%的准确率。该算法简单易实现,但需要存储所有训练数据,并且在测试的时候过于耗费计算能力

  • 最后,我们知道了仅仅使用L1和L2范数来进行像素比较是不够的,图像更多的是按照背景和颜色来分类,而不是语义主体

  1. 数据处理
  • 预处理数据:

    对数据中的特征进行归一化(normalize),让其具有零平均值(zero mean)和单位方差(unit variance)

  • 如果数据是高维数据,考虑使用降维方法:比如PCA

  • 将数据随机分入训练集和验证集。按照一般规律,70%·90%作为训练集

  • 在验证集上调优,尝试足够多的K值,尝试L1和L2两种范数计算方式

  1. 在图像的不同变换和原图具有相同的L2距离时,K近邻不能区分两个图像——never used
    在这里插入图片描述

线性分类

在这里插入图片描述

  • 得分函数
    在这里插入图片描述

  • 实例
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 损失函数
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 损失函数对比
    在这里插入图片描述

  • 正则化(减少过拟合)
    在这里插入图片描述

  • L2正则化
    在这里插入图片描述
    在这里插入图片描述

  • softmax分类器
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 最优化
    在这里插入图片描述
    想法一:不断随机W,得到最优的Loss
    在这里插入图片描述
    在这里插入图片描述
    想法二:每次随机更新W,得到最优的Loss
    在这里插入图片描述
    在这里插入图片描述
    想法三:梯度下降(Batchsize通常为2的整数倍(32,64,128))
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 学习率
    在这里插入图片描述

  • 反向传播
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

神经网络

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 正则化在神经网络中的作用(减少过拟合)
    在这里插入图片描述
  • 越多的神经元,就越能够表达复杂的模型(过于复杂的模型,会产生过拟合问题,使得训练较好,但没有更好的泛化能力)
    在这里插入图片描述
  • 激活函数
    在这里插入图片描述
    sigmoid函数(会产生梯度消失的问题)
    在这里插入图片描述
    RULE函数
    在这里插入图片描述

BP网络的实现

  • 数据预处理
    在这里插入图片描述
  • 权重初始化
    在这里插入图片描述
  • DROP-OUT
    在这里插入图片描述

卷积神经网络

  • 应用
    在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
  • 卷积神经网络架构
    在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
  • 输入大小为: W1 * H1 * D1
  • 需要指定的超参数:filter个数(K),filter大小(F),步长(S),边界填充(P)
  • 输出:
    W2= (W1 - F + 2P)/S + 1
    H2 = (H1 - F + 2P)/S + 1
    D2 = K
  • 池化层(Pooling layer)
    在这里插入图片描述在这里插入图片描述
  • AlexNet
    在这里插入图片描述
  • VGGNet
    在这里插入图片描述在这里插入图片描述
  • Data Augmentation( need a lot of data)
    在这里插入图片描述在这里插入图片描述
    • Horizontal flips
      在这里插入图片描述
    • Random crops/scales
      在这里插入图片描述在这里插入图片描述
  • Transfer Learning
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
    Caffe ConvNet library has a “model Zoo” of pretrained models:(https://github.com/BVLC/caffe/wiki/Model-Zoo)
  • Design Conv Network

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • Caffe
    Step 1:Convert Data
    在这里插入图片描述
    Step 2:Define Net
    在这里插入图片描述在这里插入图片描述
    Step 3:Define Solver
    在这里插入图片描述在这里插入图片描述
    Step 4:Train
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值