内容:
张量,张量运算,微分,梯度下降
2.1 初识神经网络
类别(class),样本(sample),标签(label)
1.加载Keras中的MNIST数据集
from keras.datasets import mnist
(train_images,train_labels),(test_images,test_labels)=mnist.load_data()
训练集,测试集
2.网络框架
from keras import models
from keras import layers
network=models.Sequential()
network.add(layers.Dense(512,activation='relu',input_shape=(28*28,)))
network.add(layers.Dense(10,activation='softmax'))
Dense层:密集连接(全接连)
softmax层:返回概率值
3.编译步骤
network.compile(loss='categorical_crossentropy',optimizer='rmsprop',metrics=['accuracy'])
三个参数:
4.预处理
train_images=train_images.reshape((60000,28*28))
train_images=train_images.astype('float32')/255
test_images=test_images.reshape((10000,28*28))
test_images=test_images.astype('float32')/255
所有值在[0,1]区间
形状变成:样本数*特征数
5.标签处理
from keras.utils import to_categorical
train_labels=to_categorical(train_labels)
test_labels=to_categorical(test_labels)
6.拟合
network.fit(train_images,train_labels,epochs=5,batch_size=128)
batch_size指每个小批量有128样本
epochs:迭代次数,所有数据迭代一次叫做一轮(epoch)
所以梯度要更新次数=60000/128*5=469*5=2345
训练时显示:损失(loss)和精度(acc)。
2.2 神经网络的数据表示
张量(tensor):基本数据结构
张量的维度(dimension)叫做轴(axis)
2.2.1 标量(0D张量)(scalar)
标量张量,零维张量,0D张量
x.ndim#查看轴的个数,即阶(rank)
2.2.2 向量(1D张量)(vector)
x=np.array([12,3,6,7,14,7])
5D向量≠5D张量=5阶张量
维度(dimensionality):既表示沿某个轴的元素个数,也表示轴的个数。
2.2.3 矩阵(2D张量)(matrix)
轴1:行(row)
轴2:列(column)
2.2.4 3D张量与更高维张量
x=np.array([[[5,78,2,34,0],[6,2,4,5,1]],[[2,4,5,2,5],[3,4,5,,6,7]]]
2.2.5 关键属性
2.2.6 在Numpy中操作张量
张量切片(tensor slicing)
2.2.7 数据批量的概念
第一个轴:样本轴(samples axis,样本维度)
深度学习模型将数据拆分成小批量
批量轴(batch axis)或批量维度(batch dimension)
2.2.8 现实世界中的数据张量
2.2.9 向量数据
样本轴,特征轴
2.2.10 时间序列数据或序列数据
惯例:时间轴为第二个轴
2.2.11 图像数据
通道在后:(samples,height,width,channels):google
通道在前:(samples,channels,height,width):Theano
2.2.12 视频数据
压缩技术,例MPEG格式
2.3 神经网络的“齿轮”:张量运算(tensor operation)
keras.layers.Dense(512,activation='relu')
output=relu(dot(W,input)+b)
relu(x)=max(x,0)
2.3.1 逐元素运算
relu和加法是逐元素(element-wise)计算的
2.3.2 广播(broadcast)
广播轴
2.3.3 张量点积(tensor product)
np.dot(x,y)
2.3.4 张量变形
x.reshape((6,1))
np.transpose(x)#转置(transposition)
2.3.5 张量运算的几何解释
加法几何解释
旋转:与2*2矩阵R做点积,R=[u,v],u=[cos(theta),sin(theta)].T,v=[-sin(theta),cos(theta)].T
2.3.6 深度学习的几何解释
将两张纸放在一起揉成一团,后分开。
2.4 神经网络的“引擎”:基于梯度的
output=relu(dot(W,input)+b)
w,b分别是kernel和bias
随机初始化(random initialization)
循环训练(training loop)
可微(differentiable),
梯度(gradient)
2.4.1 什么是导数
2.4.2 张量运算的导数:梯度(grandien)
2.4.3 随机梯度下降
直接通过解多个求偏导=0,来求最小值,因参数较多,不具有可行性
小批量随机梯度下降(min-batch stochatic grandient descent)(小批量SGD)
低维表示中形成的直觉在实践中不一定总是准确的。
SGD变体,例带动量的SGD,Adagrad,RMSProp。
这些变体称为优化方法(optimization method)或优化器(optimizer)
2.4.4 链式求导:反向传播算法
链式法则(chain rule):(f(g(x))'=f'(g(x))*g'(x)
反向传播(backpropagation):将链式法则用于神经网络梯度值的计算。
2.5 回顾第一个例子
本章小结
学习:找到一组参数,使损失函数最小化
学习的过程:每一个批量,更新一次梯度。在乘以学习率
可微,才可使用求导的链式法则
损失:需要最小化的量
优化器:使用梯度更新的具体方式