我们有一个包含所有文本的训练数据集(每一个文本都有一个标签,说明它属于哪个类别)。在机器学习中这类任务是以“监督”学习的方式进行的。 你需要将数据进行类别分类,所以它也是一个分类任务。为了创建模型,我们将使用神经网络。 神经网络 一个神经网络就是一个计算模型(使用数学语言和数学概念来描述一个系统的一种方式)。这些系统进行自学习和训练,而不是显式地编程。 神经网络受到我们中枢神经系统的启发,连接着和我们的神经元相似的节点。 一个神经网络 感知器是第一个神经网络算法。(神经网络算法简介) 为了理解神经网络是如何工作的,我们需要通过TensorFlow建立一个神经网络结构。 神经网络结构 这个神经网络将有两个隐藏层(你必须选择网络中有多少个隐藏层,这是架构设计的一部分)。每个隐藏层的工作是将输入转换为输出层可以使用的内容。 ★隐藏层1 输入层和第一层隐藏层 你还需要定义第一个隐藏层将有多少个节点。这些节点也被称为特征或神经元,在上面的图像中,它们由每个圆圈表示。 在输入层,每个节点都对应于数据集的一个词(稍后我们将看到它是如何工作的)。 正像这里解释的,每个节点(神经元)乘以一个权重,每个节点都有一个权重,并在神经网络训练阶段调整这些值以产生正确的输出(等等,我们一会儿说着重说一下这个)。 除了将每一个输入节点乘以一个权重,网络中还增加了偏差(偏差在神经网络中的作用)。 输入乘以权重后,经过加法之后输入给偏差,数据还要经过一个激活函数。这个激活函数定义了每个节点的最终输出。举个例子来说明,假设每个节点是一盏灯,激活函数将要断定这盏灯是开还是关。 激活函数的类型有很多种,你将使用修正线性单元(ReLu),这个函数是这样定义的: f(x) = max(0,x) [输出X或0(zero),较大的那一个] 例如:如果x= -1,那么f(x)=0(zero); 如果x=0.7,那么f(x)=0.7 ★隐藏层2 第二隐藏层的操作和第一隐藏层的操作是一样的,但是现在第二隐藏层的输入是第一隐藏层的输出。 第一和第二隐藏层 ★输出层 终于,我们来到了最后一层,输出层。你需要使用独热编码(One-Hot Encoding)来获得这一层的结果。在这个编码中值为以1的比特只有一个,其他的值都是0。 例如,如果我们想编码三个类别(运动、空间和计算机图形学): 所以输出节点的数量就是输入数据集的类的数量。 输出层的值也乘以权重,并且我们还添加了偏差,但现在激活函数是不同的。 你想用一个类别来标明每一个文本,这些类别是互斥的(一个文本不能同时属于两类)。考虑这一点,我们将使用Softmax函数,而不是使用ReLu激活函数(Softmax函数简介)。这个函数将每个统一的输出转换为一个范围在0和1之间的值,也确保单位的总和等于1。这种方式的输出会告诉我们每个文本为每个类别的概率。 现在你已经有了神经网络的数据流图。将我们到目前为止看到的翻译成代码,结果是(点击图片放大): (稍后我们将讨论输出层的激活函数的代码) 神经网络是如何学习的 正如我们前面看到的那样,权重值在网络训练的时候是不断更新的。现在我们将看到在TensorFlow环境中这些是如何发生的。 ★tf.Variable 权重和偏差都存储在变量(tf.Variable)中。这些变量通过调用run()来维护图的状态。在机器学习中,我们通常通过正态分布值来启动权重和偏差值。 当我们第一次运行网络(即由正态分布的定义的权重值): (责任编辑:本港台直播) |