深度学习基础

这篇博客探讨了深度学习与传统机器学习的区别,强调了数据量对深度学习性能的影响。介绍了深度学习的应用领域、挑战,以及浅层神经网络的基础,如反向传播和梯度消失问题。同时,博客提供了图像处理和PyTorch基础练习,通过实例展示了螺旋数据分类任务,揭示了不同神经网络结构对模型性能的影响。
摘要由CSDN通过智能技术生成

【第一部分】视频学习

1. 传统机器学习 & 深度学习

  • 数据依赖性
    深度学习与传统的机器学习最主要的区别在于随着数据规模的增加其性能也不断增长。当数据很少时,深度学习算法的性能并不好。这是因为深度学习算法需要大量的数据来完美地理解它。另一方面,在这种情况下,传统的机器学习算法使用制定的规则,性能会比较好。
  • 特征处理
    在机器学习中,大多数应用的特征都需要专家确定然后编码为一种数据类型。特征可以使像素值、形状、纹理、位置和方向。大多数机器学习算法的性能依赖于所提取的特征的准确度。深度学习尝试从数据中直接获取高等级的特征,这是深度学习与传统机器学习算法的主要的不同。

2. 深度学习的能与不能

  • 应用领域

计算机视觉、信息检索、市场营销、医疗诊断、自然语言处理

  • 欠缺之处

    • 算法输出不稳定,容易被攻击
    • 模型复杂度高,难以纠错和调试
    • 模型层级复合度高,参数不透明
    • 端到端训练方式对数据依赖性强,模型增量性差
    • 专注直观感知类问题,对开放性推理问题无能为力
    • 人类知识无法有效引入进行监督,机器偏见难以避免

3. 浅层神经网络

  • 生物神经元到M-P神经元
    多输入单输出、正负信号以及强度的描述、阈值特性。
  • 单层感知器到多层感知器
    单层感知器可以实现简单的与或非,多层感知器可以实现更复杂的逻辑。
  • 反向传播在这里插入图片描述
    左边的前向传播使用输入变量 x 和 y 将 z 计算为函数 f(x,y)。右图展示的是反向传播。接受 dL/dz,即相对于 z 的损失函数的梯度,损失函数中 x 和 y 的梯度可以通过应用链式法则进行计算。
  • 梯度消失
对于sigmoid函数,该导数在σ′(0)=1/4σ′(0)=1/4σ′(0)=1/4时达到最高。sigmoid中心部位和两侧的梯度差别太大,如果权重初始化得太大,激活值基本都在sigmoid两侧,两侧梯度几乎为0,采用乘积的计算形式,传播几层就没有梯度了。

使用ReLU函数可以有效解决梯度消失的问题。

4. 神经网络到深度学习

  • 逐层预训练
    先用无监督学习对每一层进行预训练,然后用经过无监督训练的权值参数作为初始参数进行有监督训练。

  • 自编码器
    自编码器是一种无监督学习技术,它假设输出与输入相同,是一种尽可能复现输入信号的神经网络。自编码器直接对条件概率建模,是判别式模型。最初被提出用来降维,也可以用来做图像去躁。

【第二部分】代码练习

2.1 图像处理基本练习

  1. 下载并显示图像
!wget https://raw.githubusercontent.com/summitgao/ImageGallery/master/yeast_colony_array.jpg
import matplotlib #matplotlib,风格类似 Matlab 的基于 Python 的图表绘图系统
import numpy as np #NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
import matplotlib.pyplot as pl
import skimage #基于python脚本语言开发的数字图片处理包
from skimage import data
from skimage import io

colony = io.imread('yeast_colony_array.jpg')
print(type(colony))
print(colony.shape)
# Plot all channels of a real image
plt.subplot(121)
plt.imshow(colony[:,:,:])
plt.title('3-channel image')
plt.axis('off')

# Plot one channel only
plt.subplot(122)
plt.imshow(colony[:,:,0])
plt.title('1-channel image')
plt.axis('off');
  1. 读取并改变像素值
# Get the pixel value at row 10, column 10 on the 10th row and 20th column
camera = data.camera()
print(camera[10, 20])

# Set a region to black
camera[30:100, 10:100] = 0
plt.subplot(131)
plt.imshow(camera, 'gray')

# Set the first ten lines to black
camera = data.camera()
camera[:10] = 0
plt.subplot(132)
plt.imshow(camera, 'gray')

# Set to "white" (255) pixels where mask is True
camera = data.camera()
mask = camera < 80
camera[mask] = 255
plt.subplot(133)
plt.imshow(camera, 'gray')
# Change the color for real images
cat = data.chelsea()
plt.subplot(131)
plt.imshow(cat)

# Set brighter pixels to red
red_cat = cat.copy()
reddish = cat[:, :, 0] > 160
red_cat[reddish] = [255, 0, 0]
plt.subplot(132)
plt.imshow(red_cat)

# Change RGB color to BGR for openCV
BGR_cat = cat[:, :, ::-1]
plt.subplot(133)
plt.imshow(BGR_cat)
  1. 转换图像数据类型
from skimage import img_as_float, img_as_ubyte
float_cat = img_as_float(cat)
uint_cat = img_as_ubyte(float_cat)
  1. 图像分割
# Use colony image for segmentation
colony = io.imread(
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值