本文附带的代码可以在这里下载:https://github.com/NMZivkovic/IntrouductionToTensorFlow最近,我介绍了我的副项目,一个用C#编写的简单神经网络项目。正如我在那篇文章中提到的,给出的解决方案远非最佳解决方案。如果要专业使用,此解决方案需要更多的数学和矩阵乘法。幸运的是,谷歌的一些聪明人已经创建了一个库来做这件事——TensorFlow。这是一个流行的开源库,正如您现在所知,它擅长计算数字,这对我们的神经网络计算至关重要。它为大多数主流编程语言的深度学习开发提供了应用程序编程接口。TensorFlow是如何工作的?它的整个解决方案基于张量,张量是TensorFlow的原始单位。TensorFlow使用张量数据结构来表示所有数据。在数学中,张量是描述其他几何对象之间线性关系的几何对象。在TesnsorFlow中,它们是多维数组或数据,例如矩阵。实际上它并没有那么简单,但这就是我现在要谈论的,深入到线性代数中张量的整个概念。无论如何,我们可以将张量视为n维数组,对其进行矩阵运算既简单又高效。例如,在下面的代码中,我们定义了两个常量张量并将一个的值加到另一个。这就是整个张量的概念。在线性代数中,我们都知道常数的值不会改变。而且TensorFlow有丰富的API,它的文档也很齐全,我们可以用它来定义其他类型的数据,比如变量。除了张量,TensorFlow还使用数据流图。图中的节点代表数学运算,边代表它们之间传递的张量。安装和设置TensorFlow提供了Python、C++、Java、Go、Haskell和R等各种编程语言的API(以第三方库的形式)。此外,它支持不同类型的操作系统。在本文中,我们将在Windows10上使用Python,因此会提及该平台上的安装过程。TensorFlow仅支持Python3.5和3.6,因此请确保您的系统上安装了其中一个版本。对于其他操作系统和语言,您可以查看官方安装指南。我们需要知道的另一件事是系统的硬件配置。安装TensorFlow有两种选择:仅支持CPU的TensorFlow版本。支持GPU的TensorFlow版本。如果您的系统有NVIDIAGPU,那么您可以安装支持该GPU的TensorFlow版本。当然,GPU版本更快,但CPU版本更易于安装和配置。如果您使用Anaconda安装TensorFlow,可以按如下方式完成:通过运行命令创建一个conda环境“tensorflow”。condacreate-ntensorflowpippython=3.5使用命令激活创建的环境:activatetensorflow调用此命令在您的环境中安装TensorFlow。CPU版本运行命令:pipinstall--ignore-installed--upgradetensorflowGPU版本运行命令:pipinstall--ignore-installed--upgradetensorflow-gpu当然,你也可以使用“nativepip”命令安装张量流。对于CPU版本运行:pip3install--upgradetensorflow对于GPUTensorFlow版本运行命令:pip3install--upgradetensorflow-gpu现在我们已经安装了TensorFlow。下面开始解决我们要解决的问题。鸢尾花数据集分类问题鸢尾花数据集和MNIST数据集可能是模式识别文献中最大的数据集之一。这是机器学习分类问题的“HelloWorld”示例。它最早由RonaldFisher于1936年提出。他是一位英国统计学家和植物学家,他在他的论文《使用多重测量解决生物分类问题》中使用了这个例子,至今仍经常被引用。该数据集包含3个类,每个类有50个实例。每个类别都是一种鸢尾植物:Irissetosa、Irisvirginica和Irisversicolor。***类是线性可分的,但后两者不是。每条记录有五个属性:萼片长度(cm)萼片宽度(cm)花瓣长度(cm)花瓣宽度(cm)物种。这意味着它需要创建一个模型来描述属性值和类别之间的关系。TensorFlowWorkflow大多数TensorFlow代码遵循以下工作流程:导入数据集使用附加列扩展数据集以描述数据类型选择模型开始训练评估模型的准确性使用模型预测结果如果您关注我之前的博客post,您可能会注意到,开发任何人工神经网络都离不开训练和评估过程。这些过程通常在两个数据集上完成,一个用于训练,另一个用于测试训练网络的准确性。通常,我们得到一组数据,我们需要将它们分成两个独立的数据集,并使用其中一个进行训练,另一个进行测试。这个比例通常是80%到20%。这一次,一切都为我们完成了。你可以从这里下载训练数据集,从这里下载测试数据集。或者您可以从此处下载完整的代码和数据。编码在继续之前,我需要澄清我使用的是SpyderIDE进行开发,所以我将使用这个环境来解释这个过程。我们需要做的第一件事是导入数据集并解析它。为此,我们需要使用另一个Python库——Pandas。这是另一个为Python提供易于使用的数据结构和数据分析工具的开源库。如您所见,首先我们使用readcsv函数将数据集导入局部变量,然后我们将输入(train_x,test_x)和预期输出(train_y,test_y)分开以创建四个单独的矩阵。它们看起来是这样的:我们已经准备好用于训练和测试的数据。现在,我们需要定义神经网络也需要的特征列。我们现在需要选择我们将使用的模型。在我们的问题中,我们试图根据属性数据预测鸢尾花的类型。所以我们将从TensorFlowAPI中选择一个估计器。Evaluator类的一个对象,它封装了构建TensorFlow图形和运行TensorFlow会话的逻辑。为此,我们将使用DNN分类器。我们将添加两个隐藏层,每个隐藏层有十个神经元。之后,我们将使用从训练数据集中选取的数据来训练我们的神经网络。首先,我们将定义训练函数。该函数需要通过缩放和创建多个批次从训练集中输入数据。如果训练样本是随机的,训练效果会更好。这就是调用shuffle函数的原因。综上所述,train_function使用训练好的数据集,从数据中随机挑选数据,并将数据反馈给DNN分类器的训练方法,从而产生大量数据。***,我们调用评估函数来评估我们的神经网络,给出网络的准确率。当我们运行这段代码时,我们得到以下结果:所以,我的神经网络的准确度是0.93,这是相当不错的。在此之后,我们可以用单条数据调用分类器,并对其进行预测。结论神经网络已经存在了很长时间,现在几乎所有重要的概念都可以追溯到70年代或80年代。阻碍整个领域的问题是我们当时没有强大的计算机和GPU来运行这些程序。现在,不仅我们可以做到这一点,谷歌还通过创建开源TensorFlow这个伟大的工具让神经网络流行起来。今天,我们有其他更高级别的API,可以进一步简化神经网络的实现。其中一些像Keras也运行在TensorFlow之上。在以后的文章中,我们将进一步探讨这个问题。英文原文链接:https://rubikscode.net/2018/02/05/introduction-to-tensorflow-with-python-example/
