Keras—建立人工神经网络(ANN)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Keras—建立人工神经网络(ANN)
Keras介绍
从本质上讲,Keras更像一个高级的API函数,它可以用TensorFlow、Theano、CNTK等深度学习框架为后台,简单高效的构建神经网络模型。
keras安装
Python库安装方法: pip install 库名。
安装Numpy和Scipy;
安装HDF5和Graphviz;
推荐安装TensorFlow;
安装Keras
如果需要GPU加速,请自行安装CUDA和cuDNN。
Keras构建模型的过程
下载训练数据
定义数据是必须的步骤。实际应用过程当中,可以根据具体的需求定义数据大小。为了展示
网络的过程,我们选用IMDB数据集,来处理电影评论分类问题。IMDB数据集已经内置到Keras
中。并且已经经过预处理:评论已经被转化成整数序列。关于这部分内容,我们下面会专门说明。本质上讲,就是把文字编码成数字,因为计算机无法识别文字。
编码的一个简单示例,把一句话分词为4个字符,用4位分别表示每个字符,编码的最大特点是每个编码只有一位是1。
ONE-HOT编码实现-enumerate函数
def vectorize_sequences(sequences, dimension=10000):
results = np.zeros((len(sequences), dimension))
for i, sequence in enumerate(sequences):
results[i, sequence] = 1.
return results
vectorize_sequences函数就是实现ONE-HOT编码的方法。enumerate函数的作用是将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列。
List = ['I', 'Love', 'Beijing']
enumerate(List) #结果是[(0,'I'), (1,'Love'), (2,'Beijing')]
ONE-HOT编码实现-实现步骤
我们可以把ONE-HOT编码实现步骤整理如下:
1. 建立一个零矩阵,矩阵行数等于不重复字符个数,矩阵列数不少于不重复字符个数;
2. 循环检索索引,并给零矩阵赋值
预留训练数据集与测试数据集
训练数据集用于训练网络,而测试数据集用来验证网络模型是否存在欠拟合与过拟合的现象。这两个概念稍后介绍。
#ONE-HOT编码
x_train = vectorize_sequences(train_data)
x_test = vectorize_sequences(test_data)
#将标签向量化(将数组转化成矩阵并转化成浮点型)
y_train = np.asarray(train_labels).astype('float32')
y_test = np.asarray(test_labels).astype('float32')
#训练集与测试集
x_val = x_train[:10000] #输入测试集
partial_x_train = x_train[10000:] #输入训练集
y_val = y_train[:10000] #输出测试集
partial_y_train = y_train[10000:] #输出训练集
欠拟合与过拟合-机器学习的根本问题
机器学习的根本问题是优化和泛化之间的对立。优化是指调节模型以在训练数据上得到最佳性能;泛化是指训练好的模型,在前所未有的数据上的性能好坏。机器学习的最终目的是得到良好的泛化,但是我们无法控制未知数据的泛化,只能根据已知的训练数据来调整模型。
什么是欠拟合与过拟合
我们希望模型具有良好的泛化能力,能够表征数据的一般特性。过拟合与欠拟合都会影响泛化能力。
如何解决欠拟合与过拟合问题
1. 最优的方法是获取更多的训练数据;
2. 合理设计网络大小,包括网络层数与每层神经元个数,这一点完全依靠个人的经验;
Keras构建了一个简单的神经网络模型,通过本节:
Keras及其安装过程;
ONE-HOT编码的原理;
通过对过拟合与欠拟合的了解,掌握神经网络训练的目标和判断模型好坏的标准;掌握网络模型定义、编译与训练的过程;
了解小批量梯度下降法。本节源码下载
更多内容可访问:www.deepthink.press