深度学习与Keras实践|第一期:(入门) 一些简单介绍与一个简单例子

1. 我们要干什么?

不管我们普通人接触到的到底是人工智能还是人工智障,也不管市场到底是不是用脚投票,“人工智能”现在已经成了我们绕不开一个的话题。在这样的风口面前,我们即使无法参与进去,恐怕也需要踮着脚尖往里面看一看。这一系列文章的目的就是让读者能通过一些简单的概念和实际的例子,一叶知秋、管中窥豹,大致看看“人工智能”到底是个什么东西。


2. 什么是深度学习?

说起人工智能,我们稍微回忆一下,就会发现有一系列词汇被引申出来:从机器学习到深度学习、从神经网络到卷积神经网络……我们有必要对这些概念做一个简单梳理:首先,范围最大的是人工智能,这是一个大的学科,从某种带有哲学意味的角度来看它可以被分成强人工智能与弱人工智能,但这不是我们要关注的。具体一些,人工智能的实现方法包括统计学方法和深度学习方法(看,深度学习出现了!),而卷积神经网络等等一大堆神经网络则属于深度学习方法的具体实现(事实上,深度学习就是搭建人工神经网络)。正是深度学习取得的突破才将人工智能带到了我们这些普通人的生活中。

自从2006年深度学习“三巨头”发表了三篇经典论文以来,深度学习领域的研究成果不断涌现,其在计算机视觉、自然语言处理等领域也不断产生出落地的工业产品。深度学习并不是一个特定的算法,而是一类算法的统称(相信上一段文字已经让你知道了这件事情)。它通过搭建人工的神经网络去模仿人的大脑中神经元网络对信息的处理方式。具体来说,一个被输入的信号要经过许多级处理单元,而前一级处理单元的输出可以作为下一级处理单元的输入。我们把一个处理单元称为一个层,这样,我们就可以把神经网络看作许多不同的层(其实就是不同的处理单元)之间的堆叠。用一张图来表示,我们可以先简单的表示成这样一种线性的顺序模型:

输入层
处理层A
处理层B
......
输出层

在这样的处理方式下,每个层的输出都是对信息进行了更高程度的抽象,所以深度学习最后的输出往往是我们无法理解的。

这样的模型看上去很简单,但这些处理层是什么样子的?或者说,这些黑箱的内部结构是什么?这里有一个好消息(这也是为什么我能试着搭建自己的深度学习网络的原因):这些层都有人为你搭好了——你只需要拿过来用就可以,就像搭积木一样。当然,在我们搭这种积木之前,我们假设你会一点Python(不过不会也没关系,但是我建议你学习一下这种有趣的语言——就像玩乐高积木一样有趣,但比乐高要便宜的多)。下面,我们就介绍一种给你提供某些类型积木的箱子(我们把它叫做库):Keras。


3. 什么是Keras?

Keras是一个将神经网络进行高层次抽象与封装,并且提供友好的接口的深度学习库(这意味着你不需要搞清楚复杂的数学细节就能过使用它们)。它使用Python编写、用TensorFlow等库进行计算,也就是说它可以看作是对TensorFlow的进一步封装。Keras具有良好的可移植性,能让我们方便的将自己的模型转化成产品。下面,让我们看看使用它搭建像上面那张图里的那种神经网络到底有多方便。


4. 如何下载Keras?

在我们搭建自己的神经网络之前,我们首先需要下载Keras,这同样很简单。
在cmd命令窗里输入

pip install keras

然后等待成功,继续输入

pip install tensorflow

等待成功就可以了。

当然,我们可以使用国内的镜像网站来下载,或者这些过程中可能出现一些小问题,但它们都是百度一下就可以解决的,我们不进行讨论了。

到此为止,我们就可以试着搭建一个简单的网络了(当然,我的目的只是想让你看到这个过程有多简单)。


5. 如何搭建一个简单的神经网络?

通过前面的示意图,我们简单的了解了神经网络模型的基本结构。而在Keras的帮助下,我们需要做的就是决定使用什么种类的层、按照什么顺序连接。当然,为了达到我们的特定目的(比如对输入的数据进行分类),我们需要对我们的模型进行训练。所谓训练,其实就是用我们自己的输入数据和对应的输出数据来优化每个层的参数,在Keras的帮助下,这也是很简单的。

下面,我们用几行简单的代码来实现一个简单的模型,同时模拟一下如何对模型进行训练以及如何让训练好的模型进行工作。由于我们只是想通过这个简单的例子来理解Keras到底是如何简化模型的搭建,所以我们不需要过分追究将要出现的一些概念,同时我们也需要知道,由于我们没有真实的用于训练的数据,所以这个模型其实并不能工作——但这只是数据的问题而已。

下面我们来看具体的代码:

  • 由于我们想要建立一个简单的线性模型,所以我们选择Sequential这个类,它可以被翻译为时序的。将它实例化以后,我们就得到了一个线性模型。
from keras.models import Sequential
model = Sequential()
  • 在拿到一个线性模型后,我们将在这个神经网络模型上添加层。下面将要出现的概念有
    1. layers:字面意思就是层面板——包括了许多可供你选择的层。
    2. Dense:全连接层,神经网络中一种最简单的层,其中的具体参数包括units(单元)、activation(激活函数)等,我们将在后续的文章中对其进行介绍。
    3. 激活函数:relu和softmax是两个激活函数,我们现在不需要理解它们。记住我们的目的:看看如何向神经网络中堆叠层。
from keras.layers import Dense
model.add(Dense(units=4,activation='relu',input_dim=100))
model.add(Dense(units=5,activation='softmax'))
  • 在堆叠好元素后,我们的模型就搭建成功了。下面我们需要对模型进行编译,传入模型的损失函数、优化器参数等。具体来说,我们我们指定了一个用作分类的函数作为损失函数,即categorical_crossentropy,而它是系统封装好的。同时,我们选择随机梯度下降算法(SGD)作为优化器、选择预测的准确性(即accuracy)作为衡量标准。
model.compile(loss='categorical_crossentropy',
			optimizer='sgd',
			metrics=['accuracy'])
  • 到这里,我们的模型就只需要用数据集进行训练了。我们用x_train和y_train代表训练数据,用epochs和batch_size参数分别指定训练轮次和一个批量训练的样本数。
model.fit(x_train,y_train,epochs=5,batch_size=32)
  • 就这样,我们就得到了一个训练好的模型,现在我们已经可以用这个模型对数据进行预测了。
classes = model.predict(x_test,batch_size=128)

6. 我们干了什么?

我们搭建了一个简单的、只有两个全连接层的神经网络(事实上,它们分别对应了输入与输出层,这个简单的模型并没有中间的处理层)。但是这个过程能告诉我们,使用Keras搭建模型就好像搭积木一样——我们不需要关注黑箱内部的实现,而只需要设计好网络结构即可。

这样,我们对深度学习或者说神经网络就有了一个认识,虽然比较粗糙,但这只是我们的第一步。


发布了16 篇原创文章 · 获赞 0 · 访问量 667

猜你喜欢

转载自blog.csdn.net/weixin_43628432/article/details/103759866