什么是Theano?
也许已经听说过有关Theano的内容,但是究竟是什么呢?一种编程语言?编译器?Python库?好吧,实际上,这就是所有这些东西:Theano开发为以非常有效的方式编译,实现和评估数学表达式。实际上,它允许开发人员使用CPU和GPU来执行代码。现在,可能想知道使用GPU而不是CPU运行代码的优势是什么。
从计算的角度来看,当执行非常昂贵的代码时,计算机通常会遭受甚至损坏。此外有必要考虑在高分辨率的大型图像数据集上训练模型所需的时间。对于普通计算机而言,它将在计算上过于昂贵。但请放心通过使用GPU,将能够构建适用于大型数据集的模型,而无需付出高昂的计算成本。图形卡就像PC内的小型计算机。GPU的另一个优点是它们比CPU便宜。为了证明在GPU上执行Theano可能是机器学习和数据科学的未来,可以考虑由Theano开发人员进行的一项研究,在Theano在CPU上运行时检测到的速度是NumPy的1.8倍。而在GPU上运行时,Theano比NumPy快11倍。从那时起,Theano激发了数据科学家的极大兴趣,实际上,许多流行的机器学习和数据科学软件包(例如Tensorflow和Keras)都基于Theano。
而且,Theano基于NumPy,这使其适合那些已经了解NumPy的人。如果想进一步了解Theano,可以访问其网站。不幸的是,Theano现在已不再维护,但在ML和Data Science中仍然是一个很好的资源。
http://deeplearning.net/software/theano/index.html
Theano的第一步
根据所有这些理论,编写一个使用Theano的简单脚本。但在此之前,需要通过Conda安装Theano (请注意,本教程中的操作仅在使用Anaconda时有效,如果尚未使用,请在此处下载):
https://www.anaconda.com/distribution/
conda install theano
在theano代码中,可以区分三个主要步骤:
import theano
from theano import tensor as T
# Step 1: Initialize
v0 = T.scalar()
v1 = T.scalar()
v2 = T.scalar()
output = v1 * v0 + v2
# Step 2: Compile
t_funct = theano.function(inputs=[v1, v0, v2], outputs=output)
# Step 3: Execute
print(t_funct(2.0, 1.0, 0.50))
但这还不是很清楚,深入研究编写的代码:
简而言之,此脚本将2.0整数 作为v1,将1.0整数作为v0,将0.50整数作为v2。当它计算在第9行中定义的输出时:
v1·v0 + v2
直观地,TheanoFunction将执行的计算是:
2.0·1.0 + 0.5 = 2.5
通过执行此代码,将看到预期的输出2.5。
在GPU上执行Theano代码
在介绍Theano时,说它的优点之一是它可以使用计算机的GPU。在开始之前,想提到使用GPU是可选的,还可以在CPU上运行代码。无论如何,学习如何使用GPU总是很有用的。
首先,需要在Intel和NVIDIA显卡之间建立一些区别。有时不需要进行这种比较,但在大多数情况下是必须的。如果使用NVIDIA显卡,则必须使用Cuda;如果使用Intel显卡,则必须使用Open-CL。不用担心,除了Python软件包pygpu,不需要安装其他任何东西。要安装它,在终端上键入:
conda install pygpu
请记住,必须使用anaconda,并且不能通过pip使用它。现在必须修改Theano配置,以使代码在GPU上运行。
打开终端并输入:
export THEANO_FLAGS=device=opencl0:1,floatX=float32
如果有英特尔显卡:
export THEANO_FLAGS=device=cuda,floatX=float32
如果有NVIDIA显卡。
运行使用Theano的代码时,此命令将允许使用GPU。因为不使用Windows,所以不确定如何在Windows中使用GPU执行代码。但是请不要担心Microsoft用户,Theano的官方文档将解释如何做。
http://deeplearning.net/software/theano/install_windows.html
话虽如此,可以检查执行命令后代码是否在GPU上执行:
import theanoprint(theano.config.device)
通过使用以下命令从终端运行此脚本python check.py,将在输出中看到已使用的设备。作为输出,应该看不到cpu,尽管应该看到类似cuda或的东西opencl0:1。
恭喜,是第一次在GPU上运行代码!
既然已经掌握了Theano的一些基础知识,就可以做一些更困难的事情了。
Theano中的S形函数
S形函数是一个数学函数具有特性“S”形曲线或S形曲线。S型函数的一个常见示例是第一个图中显示的logistic函数,它由公式(Wikipedia)定义:
该函数通常在机器学习中进行Logistic回归,现在我们将使用Theano复制此函数:
import theano
import theano.tensor as T
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-5,5,100)
sym_x = T.dscalar('x')
sym_sigmoid = 1./(1. + T.exp(-sym_x))
th_sigmoid = theano.function(inputs=[sym_x], outputs=sym_sigmoid)
sigmoid_output = []
for element in x:
sigmoid_output.append(th_sigmoid(element))
plt.plot(x,sigmoid_output)
plt.show()
1/4行:导入所需的模块。我们将使用Theano来创建和计算S型函数。Matplotlib绘制我们函数的输出。最后,我们将使用NumPy创建输入。
第6行:使用NumPy及其子模块Linspace构建100个整数,将其作为我们的输入。为此,我们在-5到5之间取了100个数字。
第7行:定义了TensorVariable,该变量在函数的公式中将为x(f(x)):
第8行:定义表达式的输出必须如何,在这种情况下,表达式的输出为:1 /(1+(e **-x))。
第9行:编译th_sigmoid TheanoFunction来计算在上一步(第8行)中定义的输出。
第10行:定义了一个列表,其中将包含我们函数的所有输出。
第11/12行:对于在第6行定义的x数组中的每个数字,我们计算输出并将其添加到在第10行定义的列表中。
第13/14行:通过使用Matplotlib,python将显示我们的sigmoid函数计算的所有输出。
同样在这里,遵循了本文开头提到的三个主要步骤:
通过运行此代码,应该看到该脚本在计算机中打开了一个Python3窗口,其中显示以下内容:
做得好!这正是S型函数应提供的输出!实际上,这是在S型函数中发现的“ s”形曲线:
结论
在本教程中,了解了如何安装Theano以及如何构建使用它的简单代码。然后看到了如何执行使用Theano的python脚本,该脚本在计算机的GPU上执行,从而可以大大提高项目的性能。最后学习了使用Theano复制最著名的机器学习功能之一:Sigmoid函数,也称为Logistic函数。
继续学习Theano,因为在这篇文章中看到的只是它可以做的一小部分。继续学习Theano的最佳方法之一是查阅其官方文档,可以在这里找到。
http://deeplearning.net/software/theano/