从感知机到神经网络,讲了感知机的局限性,接着用Mnist数据集为例介绍Keras代码的实现,第一章详细给出了一步一步建立并提高网络精度的方法。
- 建立baseline
- 增加隐藏层
- 用drouput正则化方法
- 划分训练集和交叉验证集,画loss和accuracy随epoch变化图来判断epoch的最佳时刻
- 用不同的优化器方法
- 不同的隐藏层单元个数设置
- 改变 batch_size
- 控制 learning_rate
- 不同的epoch设置
- 机器学习中常用的几种正则化方法
- 利用网格搜索进行超参数调优
书籍代码github地址:https://github.com/PacktPublishing/Deep-Learning-with-Keras
第一章节的代码运行的时候在下载数据集的时候存在小问题,程序可能会错误,下面链接给出了解决方案
参考解决方案:https://blog.csdn.net/houchaoqun_xmu/article/details/78492718
感知机
感知机的所使用的函数是sign(),导致输出的结果只有0和1两种状态,它不具有连续性,如果输出的结果并不是正确的结果,那么调整权重参数来改变输出朝着正确的输出结果的过程具有跳跃性,不能little by little地来调整参数进而改变输出结果。在数学上,这就意味着我们需要一个能计算梯度的连续函数。
使用sigmoid函数,函数的范围在(0,1)之间,具有连续性,那么就能解决MayBe的问题,换言之,它对输出值的调整是逐渐的一个过程。
而RELU(max(0,x))体现了非常好的非线性特征,对于负值函数的输出结果是0,对于正值,函数的输出结果是线性的。
OHE(One-hot encoding)
参数
EPOCH
BATCH_SIZE
VERBOSE:是否把训练的过程打印输出
VALIDATION_SPLIT
loss function
-
MSE
-
Binary cross-entropy
-
Categorical cross-entropy
metrics
- Accuracy
- Precision
- Recall
history中的acc val_acc loss val_loss (分别是训练集和验证集的acc loss)
baseline: 一个dense(直接由输入1024到输出10)
add a hidden layer: 两个隐藏层128(三个dense,输入层在代码实现的过程中不算一个层)
with droput
optimizers
- SGD
- RMSprop
- Adam
Reguralization
- L1 regularization (lasso)
- L2 regularization (ridge)
- Elastic net regularization
当我们网络的性能提高到一定程度的时候,发现再提高很困难,从直觉上来看,我们将图像reshape成vector,潜在的丢失了局部空间性(local spatiality ),这是问题所在,而卷积神经网络(CNN)解决了这个问题,更符合人脑的机制,分层,注重像素之间的关系。