目录
1. Keras 搭建简单模型
1.1 keras搭建分类模型
1.1.1 搭建一个简单的分类模型
其中涉及:
loss的选择:sparse_category_crossentropy,category_crossentropy等
激活函数的选择:relu,softmax
对数据进行归一化等
代码详见:
1.1.2 callback的使用
callbacks 中加入 Tensorboard, EarlyStopping, ModelCheckPoint
tree显示当前目录的文件夹结构
打开tensorboard: 输入tensorboard –logdir=callbacks
在浏览器中打开 localhost:6006,就可以看到tensorBoard的界面啦。
如果遇到问题,可以看我的另一篇博客:
在docker中使用tensorboard,localhost拒绝请求的解决办法_zhao_crystal的博客-CSDN博客
希望可以帮助到你。
1.2 Keras搭建回归模型
在分类问题中:label 是离散的(即预测的是类别), 模型的输出是概率分布
eg:三分类问题输出的例子:[0.2, 0.7, 0.1]
损失函数一般可以用:平方差损失和交叉熵损失(一般交叉熵损失是一个比较好的选择,因为其可以衡量两个分布的距离)
交叉熵和KL散度有什么关系吗
在回归问题中,label是连续的(预测的是一个有大小的值), 模型输出是一个实数值
eg:在这里说预测值更合适,比如房价,无人驾驶中方向盘转动的角度
损失函数一般可以用:预测值与真实值的差距,平方差损失,绝对值损失
在一些情况下,可以将连续的预测值量化,从而将回归问题转化为分类问题。
这里我们使用california_housing数据集,构建了一个三层的模型,和分类模型不同的是,最后一层的输出神经元为1,输出为一个实数。
代码详见:
2. Keras搭建深度网络
用的是fashion_mnist数据集。
2.1 搭建一个20层的深度网络
这里我们搭建一个20层的网络,要搭建20层,那岂不是要add20次。聪明的我们可以用for循环呀?
如下是loss 和 accuracy曲线
为什么在最开始的几次迭代中,loss不下降?
(1)由于参数众多,训练不充分
(2)梯度消失:对于深度神经网络来说,离目标函数比较远的底层网络的梯度比较微小的现象。主要是由于链式法则引起,因为需要对复合函数f(g(x)) 求梯度。
2.1.1实现批归一化
不知道批归一化是什么?可以看
深度学习基础知识_zhao_crystal的博客-CSDN博客
从图中可以看出,批归一化可以缓解梯度消失
代码详见:
2.1.2使用激活函数——selu
selu:自带归一化的一个激活函数
代码详见:
2.1.3 防止过拟合——dropout
Dropout
AlphaDropout:1. 均值和方差不变,2.归一化性质不变
代码详见:
3. keras 模型构建的方法——总结
3.1 先构造Sequential实例,再一层层叠加
代码详见:
3.2 在构造Sequential实例时就加入layers
代码详见:
3.3 函数式api
代码详见:
3.4 子类api
代码详见: