我要吹爆这本小红书,拿在手里小小一本,喜欢的不得了。
由于常年沉迷各种Internet noval,阅读速度比较快
周二下午拿到这本书,两个小时就看了三章,加上课多,看到周四上午终于看完了
所以做一下总结 (这本书真的很适合入门者,用的也是最简单的MNIST dataset
————————正文——————————
1.numpy 模块不匹配
先conda 安装了matplotlib
就用conda uninstall进行了卸载
然后pip 安装
最后发现报错:
AttributeError: module 'numpy' has no attribute '__version__'
原因:
numpy 版本太高,换为1.31.1即可解决。
2. 章节内容
第一章
主要介绍了python常用解释器(如算法计算,数据类型,变量,列表,字典,布尔型,if for语句等),并对numpy和matplotlib进行了简单介绍。Numpy是数组的天堂,matplotlib则是绘图的天堂,这两者也是这本书唯一调用的module
class 类:
class 类名:
def__init(self,parameter1,parameter2...) # create function
方法名(self, paremeter1,...) # 1st method
方法名(self, paremeter1,...) # 2nd method
调用numpy和matplotlib
import numpy as np
import matplotlib.pyplot as plt
one case:
image show:
import matplotlib.pyplot as plt
from matplotlib.image import imread
img = imread('lena.jpg')
plt.imshow(img)
plt.show()
第二章
主要围绕感知机(perception),小白熟知,可以用来做与非门、异或门等等。感知机是具有输入和输出的算法,给定一个输入后,将输出一个既定的值。感知机将权重和偏置设定为参数。单层感知机只能表示线性空间,而多层感知机可以表示非线性空间。
第三章
这章是神经网络初步,其重要性质是它可以自动地从数据中学习到合适的权重参数。介绍了sigmoid、step等非线性激活函数。首先,两者“平滑性”不同,sigmoid函数输出随着输入发生连续性变化,而阶跃函数以0为界,输出发生急剧性变化。另外,sigmoid函数可以返回连续的实数值信号,step function 只能返回二元信号。两者共同点:输入小时,输出接近0;输入大时,输出接近1,且不管输入信号的数值,输出信号都在【0,1】之间。
注意:
激活函数必须使用非线性函数!!(避免 y=c*c*c*x 与 y= ax等同,无法发挥多层网络优势)
现在常用的是ReLU函数。。。
随后还涉及到numpy的一些skills
神经网络:
W2 = np.array([0.1,0.4],[0.2,0.5],[0.3,0.6])
B2 = np.array([0.1,0.2])
A1 = np.dot(X,W1) +B1
Z1= sigmod(A1) #隐藏层的加权和(加权信号和偏置的总和)用a表示,被激活函数转化后的信号用z表示。
A2 = np.dot(Z1,W2) + B2
Z2 = sigmoid(A2)
#对于输出层,其所用的激活函数需要根据求解问题的性质决定。一般地,回归问题可以使用恒等函数,二元分类问题可以使用sigmoid函数,多元分类问题可以使用softmax函数。
#恒等函数是将输入按原样输出,对于输入的信息,不加以任何改动地直接输出。
#softmax函数输出层的各个神经元都受到所有输入信号的影响。因为神经网络输出最大值的神经元位置不会变,因此在进行分类时,输出层的softmax函数可以省略。
load_mnist(normalize=True,flatten=True,one_hot_label=False)
normalize:是否进行归一化
flatten:是否将其输入图像变为一维数组
ont_hot_label:是否将标签保存为one-hot,即仅正确解标签为1,其他皆为0
对于输出层,回归问题中一般用恒等函数,分类问题中一般用softmax函数。
x_train.shape 60000,784
t_train.shape 60000,
x_test.shape 10000,784
t_test.shape 10000,
_______________
x.shape (10000,784)
x[0].shape (784,)
w1.shape (784,50)
w2.shape (50,100)
w3.shape (100,10)
!!!—————————————————————————
1. 需要把保存为Numpy数组的图像数据转换为PIL用的数据对象,因此需要通过image.fromarray()来完成。
img = Image.fromarry(np.uint8(img))
2. 进行显示图像时,需要通过reshape()方法的参数指定期望的形状,更改Numpy数组的形状。
img=img.reshape(28,28)
3.np.argmax(x)取出数组中的最大值的索引。
p= np.argmax(x) 获取数组中最大值元素的索引
np.argmax(x,axis=1)
沿着第一维方向(以一维为轴)找到值最大的元素的索引(第0维对应第一个维度!!!对于矩阵,第0维是列方向,第1维是行方向)
4. range函数
range(start,end)会生成一个有start到end-1之间的整数构成的列表,若是像range(start,end,step),则是生成列表中的下一个元素会增加step指定的额数值。
————————————————————
小节:
1)神经网络中的激活函数使用平滑的sigmoid函数或RelU函数
2)通过巧妙地使用Numpy多维数组,可以高效地实现神经网络
3)分类问题,输出层的神经元的数量设置为要分类的类别数
4)输入数据的集合称为批,通过以批为单位进行推理处理,能够实行高速的运算。
第四章
奔入主题——神经网络
一些 points:
常用特征量包括SIFT、SURF、HOG,利用这些特征量将图像数据转换为向量,再利用SVM、KNN等分类器进行学习
(看起来是回过头来又全忘了,看书的时候得到了很多启发
mean squared error
cross entropy error
mini-batch:利用一部分样本数据来近似地计算整体。
network.numrical_gradient、network.gradient
!!!_______________
1)np.random.choice()能够从指定数字中随机选择想要的数字
2)np.log([np.arange(batch_size),t])生成一个从0到batch_size-1的数组。比方说,batch_size为5,np.arange(batch_size)可以生成一个Numpy数组[0,1,2,3,4],因为t中标签是[2,7,0,9,4]形式存储的,所以y[np.arange(batch_size),t]能抽出各个数据的正确解标签对应的神经网络的输出,即生成了Numpy数组的[y[0,2],y[1,7],y[0,2]...]
3) np.zeros_like(x)可以生成一个形状和x相同,所有元素都为0的数组。
———————————————————————
小节:
机器学习中使用的数据集分为训练数据和测试数据
利用数值微分,可以计算权重参数的梯度
第五章:误差反向传播(based computational graph
对常用加减乘数、softmax、ReLU等激活函数进行了反向
affine
!!!——————————
1)np.sum(): 对第0轴(以数据为单位的额轴,axis=0)方向上的元素进行求和。
注:正向传播时,偏置会被加到每一个数据上,因此,反向传播时,各个数据的反向传播的值需要汇总为偏置的元素,偏置的反向传播会对各个数据的导数按元素进行求和。
2)神经网络进行的处理有推理和学习两个阶段,但推理一般不适用softmax层,只需要给出一个结果。
————————————————————
总结:
1)计算图的正向传播由局部计算构成,局部计算构成全局计算。
2)计算图的正向传播进行一般的计算,通过计算图的反向传播,可以计算各个节点的导数。
3)通过将神经网络的组成元素实现为层,可以高效地计梯度
4)通过比较数值微分和误差反向传播结果,可以确认误差反向传播发的实现是否正确(梯度确认)
第六章:与学习有关的技巧
参数更新方法:SGD、momentum、AdaGrad、Adam
对初始值的讨论,为了防止"权重均一化”或权重的对称结果,必须随机生成初始值。
Batch normalization,加速学习,使得初始化变化不敏感
regularization(overfitting、权值衰减、dropout
!!!——————————————————————————
1)各层的激活值的分布都要求具有适当的广度,因为通过在各层间传递多样性的数据,神经网络可以进行高效地学习。反之,如果传递的是有所偏向的数据,就会出现梯度消失或者表现力受限的问题,导致学习可能无法顺利进行。
2)batch normalization 的优点:
a)可以使学习快速进行(可以增大学习率)
b) 不依赖初始值
c) 抑制过拟合(降低dropout等必要性)
3)regularazation
a)过拟合问题
b)权值衰减
c)dropout:在学习过程中随机删除神经元的方法,训练时,随机选出隐藏的神经元,然后将其删除。被删除的神经元不再进行信号的传递。
4)超参数
逐渐缩小“好值”存在的范围是搜索超参数的一个有效的方法
——————————————————————
第七章:卷积神经网络
CNN(convolutional neural network
与神经网络相比,多了convalution 和pooling层
convalution:涉及到 padding(向周围数据填入固定的数据)、stride(应用滤波器的位置间隔)
pooling:涉及到 max 和 average #max是从目标区域中取出最大值,average是计算目标区域的平均值。在图像识别领域,主要使用max池化
实现是通过: im2col (input_data, filter_h, filter_h, stride=1,pad=0) #把输入数据展开以适合滤波器
典型代表: LeNet(b祖)、AlexNet
1)LeNet:
进行手写数字识别的网络,具有连续的卷积层和池化层 (只抽选元素的子采样层),最后经由全连接层输出结果。
和现在的CNN相比,其采用sigmoid函数,现在主流用ReLU函数。
其使用子采样(subsampling)缩小中间数据的大小,现在主流是Max池化
2)AlexNet
叠有多个卷积层和池化层,最后经由全连接层输出结果。
和LeNet的差异
激活函数使用ReLU
使用进行局部正则化的LRN(Local response normalization)
使用Dropout
注意:
构成CNN基本模块的卷积层和池化层虽然有些复杂,但一旦理解了,之后就是如何使用它们的问题了。
在图像处理领域,几乎毫无例外会使用CNN,请扎实理解本章内容。
小结:
CNN在此前的全连接层的网络中新增了卷积层和池化层。
使用im2col函数可以简单、高效地实现卷积层和池化层。
通过CNN的可视化,可知随着层次变深,提取的信息愈加高级。
LeNet和AlexNet是CNN的代表网络
在深度学习中,大数据和GPU做出了很大贡献。
———————————————————————
第八章:深度学习
简述 ImageNet 、VGG、GoogLeNet、ResNet
!!!叠加小型滤波器来加深网络的好处是可以减少参数的数量,扩大感受野(receptive field,给神经元施加变化的某个局部空间区域)。并且通过叠加层,将ReLU等激活函数夹在卷积层中间,进一步提高了网络的表现力。这是因为向网络添加了基于激活函数的“非线性”表现力,通过非线性函数的叠加,可以表现更为复杂的东西。
ImageNet:
ImageNet是拥有超过100w张图像的数据集,并且每一张图像都关联了label。每年都会举办关于这个数量级的ILSVRC图像识别大赛。
其中一项是“classifiction"
VGG:
VGG是由卷积层和池化层构成的基础CNN,其特点是将有权重的层(卷积层或全连接层)叠加到16层(或19层),具有了深度(根据层的深度,有时也被成为VGG16 or VGG19)
需要注意,基于3×3的小型滤波器的卷积层运算是连续进行的,如“卷积层重叠2次到4次,再通过池化层将大小减半”
Googlenet:
不仅在纵向有深度,在横向上也有深度
ResNet:
具有比以前的网络更深的结构,导入了“快捷结构”调过了输入数据的卷积层,将输入x合计到输出,反向传播信号可以无衰减传递。
因为快捷结构只是原封不动地传递输入数据,所以反向传播时会将来自上游的梯度原封不动地传向下游。其重点是不对来自上游的梯度进行任何处理,因此,基于快捷结构,不用担心梯度会变小(或者变大),能够向前一层传递“有意义的深度”,通过此,之前因为加深层而导致的梯度变小的梯度消失问题就有望得到缓解。
GPU、分布式、位数精度的缩减,实现了精度学习的告诉化。
阐明方向: 物体检测、图像分割、图像标题生成
未来: 图像分割变化、图像生成、自动驾驶、强化学习(注意,这本书发表于 2016年,这些未来方向确实得到验证,而2019年过去也只有34天了。
_____________本书阅读 暂时over——————————————————
心语:经过两个月的疯狂学习,深度学习浪潮下,确实人人都能会....接下来,如何拉开差距呢?
9月: adapting enviroment and lessons (so difficult and hard to learn)
10月: mechine learning video learning+GAN paper+MICCAI+ICCV (paper month)
11月:anaconda、pycharm、cuda、cuddnn、tensorflow、pythorch setting & Fixed-point GAN 、 STARGAN train and test (pratice month)