【第一部分】视频学习
1. 传统机器学习 & 深度学习
- 数据依赖性
深度学习与传统的机器学习最主要的区别在于随着数据规模的增加其性能也不断增长。当数据很少时,深度学习算法的性能并不好。这是因为深度学习算法需要大量的数据来完美地理解它。另一方面,在这种情况下,传统的机器学习算法使用制定的规则,性能会比较好。 - 特征处理
在机器学习中,大多数应用的特征都需要专家确定然后编码为一种数据类型。特征可以使像素值、形状、纹理、位置和方向。大多数机器学习算法的性能依赖于所提取的特征的准确度。深度学习尝试从数据中直接获取高等级的特征,这是深度学习与传统机器学习算法的主要的不同。
2. 深度学习的能与不能
- 应用领域
计算机视觉、信息检索、市场营销、医疗诊断、自然语言处理
-
欠缺之处
- 算法输出不稳定,容易被攻击
- 模型复杂度高,难以纠错和调试
- 模型层级复合度高,参数不透明
- 端到端训练方式对数据依赖性强,模型增量性差
- 专注直观感知类问题,对开放性推理问题无能为力
- 人类知识无法有效引入进行监督,机器偏见难以避免
3. 浅层神经网络
- 生物神经元到M-P神经元
多输入单输出、正负信号以及强度的描述、阈值特性。 - 单层感知器到多层感知器
单层感知器可以实现简单的与或非,多层感知器可以实现更复杂的逻辑。 - 反向传播
左边的前向传播使用输入变量 x 和 y 将 z 计算为函数 f(x,y)。右图展示的是反向传播。接受 dL/dz,即相对于 z 的损失函数的梯度,损失函数中 x 和 y 的梯度可以通过应用链式法则进行计算。 - 梯度消失
使用ReLU函数可以有效解决梯度消失的问题。
4. 神经网络到深度学习
-
逐层预训练
先用无监督学习对每一层进行预训练,然后用经过无监督训练的权值参数作为初始参数进行有监督训练。 -
自编码器
自编码器是一种无监督学习技术,它假设输出与输入相同,是一种尽可能复现输入信号的神经网络。自编码器直接对条件概率建模,是判别式模型。最初被提出用来降维,也可以用来做图像去躁。
【第二部分】代码练习
2.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');
- 读取并改变像素值
# 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)
- 转换图像数据类型
from skimage import img_as_float, img_as_ubyte
float_cat = img_as_float(cat)
uint_cat = img_as_ubyte(float_cat)
- 图像分割
# Use colony image for segmentation
colony = io.imread(