深度学习入门项目:用keras构建CNN或LSTM对minist数据集做简单分类任务

深度学习入门项目:用keras构建CNN或LSTM或RNN对Minist数据集做简单分类任务

参考keras中文文档

——keras: 是一个高级神经网络库,用 Python 语言写成,可以运行在 TensorFlow 或者 Theano 之上(即以此为后端)。它关注快速试验和原型设计。理念是“以最短的时间将想法转换为结果是做好研究的关键”。
(1)iteration:表示1次迭代(也叫training step),每次迭代更新1次网络结构的参数;
(2)batch-size:1次迭代所使用的样本量;
(3)epoch:1个epoch表示过了1遍训练集中的所有样本。
-metrics:列表,包含评估模型在训练和测试时的网络性能的指标,典型用法是metrics=['ac curacy']
-use_bias: 布尔值,是否使用偏置项 (向量)
-validation_split 0~1之间的浮点数,用来在没有提供验证集的时候 指定训练集的一定比例数据作为验证集。验证集将不参与训练,并在每个epoch结束后测试的模型的指标,如损失函数、精确度等。注意,validation_split的划分在shuffle之前,因此如果你的数据本身是有序的,需要先手工打乱再指定validation_split,否则可能会出现验证集样本不均匀。
-alidation_data:形式为(x,y)的tuple,是指定的验证集。此参数将覆盖validation_spilt。
-shuffle:布尔值或字符串,一般为布尔值,表示是否在训练过程中随机打乱输入样本的顺序。若为字符串“batch”,则是用来处理HDF5数据的特殊情况,它将在batch内部将数据打乱。
-kwargs:使用TensorFlow作为后端请忽略该参数,若使用Theano/CNTK作为后端,kwargs的值将会传递给 K.function。如果使用TensorFlow为后端,这里的值会被传给tf.Session.run
——CNN架构:
-loss优化函数
多分类:类别交叉熵(categorical_crossentro py)
二分类:二进制交叉熵损失函数(binary cross-entropy)
其中conv2d表示执行卷积,maxpooling2d表示执行最大池化,Activation表示特定的激活函数类型,Flatten层用来将输入“压平”,用于卷积层到全连接层的过渡,Dense表示全连接层
例如在手势识别中左上角是存储在训练集X_train[0]的手写体图像‘5’,y_train[0]表示对应的标签‘5’。
-池化层: strides 没设置的话,就等于 pool_size, (2,2) 相当于图片长宽各少了一半, 这和 conv2d 是不一样的model.add(MaxPooling2D(pool_size=(2, 2)))
-to_categorical
to_categorical(y, num_classes=None)
将类别向量(从0到nb_classes的整数向量)映射为二值类别矩阵, 用于应用到以categorical_crossentropy为目标函数的模型中
-你如何知道你的模型是否欠拟合?
如果你的验证集的准确度高于训练集,那就是模型欠拟合。此外如果整个模型表现得不好,也会被称为欠拟合。例如使用线性模型进行图像识别通常会出现欠拟合的结果。
也有可能是 Dropout(Dropout)的原因导致你在深层神经网络中遇到欠拟合的情况。
Dropout在模型训练时随机将部分激活函数设置为零(让网络某些隐含层节点的权重不工作),以避免过拟合。 这种情况一般不会发生在验证/测试集的预测中,如果发生,你可以移除 Dropout来解决。如果模型现在出现大规模的过拟合,你可以开始添加小批量的 Dropout。
——RNN架构:
CNN 比较适合图片的分类任务,但是对于语言翻译,问答系统等场景不是很适用,假设有一个句子,最后一个单词为空,人是怎么填这个空的:He is american, he speak _ 。这个空的值出现是基于前面出现过的 american 来填写的,即 american -> english。因此我们需要一个模型,不仅能挖掘语料之间的关系,还能挖掘语料之中的关系,这就是 RNN 的思路,因此这个模型要从把 american -> english 作为一个 feature 从一条语料中进行挖掘。RNN 是循环神经网络,它的特点是拥有记忆能力,这个能力的实现也很简单,就是神经网络的输入不再是一整个大向量了,而是把这个大向量拆成小的向量,每个小向量喂给神经网络后返回的值 input1 和下一个小向量 input2 作为输入再喂给神经网络。
——LSTM架构:
RNN 的问题在于梯度爆炸和梯度消失,意义是这个模型对很长的句子学习效果不好,所以它又两个演化版本,LSTM (long short termmemory)和GRU()。
LSTM的记忆能力也没有很高:好像也就100来个单词的样子。LSTM的结构和
RNN 相同,只是计算返回值的方式有所不同,在中间的框内,有多种门,包括遗忘门,残差门(不计算,直接留到下一个input)等等。背后的原理就是留出很多门,供数据流动,需要的数据从残差门通过,不需要的走到遗忘门,有组合关系的还可以从其他门走。此外,LSTM 需要一个EOF标志表示输入结束,它还可以有多个输出。LSTM应用非常成功的领域是机器翻译,twitter bot 就用了这个模型来进行问答处理。
首先说明一点:LSTM输入层其数据要求必须是3D即需要先进行数据处理
常见方法引入Numpy中的数组,然后形成元组,之后进行reshape维度变换达到3D效果。
LSTM()层必须指定输入的形状。而且每个LSTM层的输入必须是三维的。
这输入的三个维度是:
样本一个序列是一个样本。批次由一个或多个样本组成。
时间步长。一个时间步代表样本中的一个观察点。
特征。一个特征是在一个时间步长的观察得到的。
这意味着输入层在拟合模型时以及在做出预测时,对数据的要求必须是3D数组,即使数组的特定维度仅包含单个值。当定义LSTM网络的输入层时,网络假设你有一个或多个样本,并会给你指定时间步长和特征数量。你可以通过修改“ input_shape ”的参数修改时间步长和特征数量。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值