TensorFlow初学者指南

83 阅读7分钟

机器学习和深度学习是复杂的学科,也是开发社区中的两个这样的领域,一直是一个趋势。但是,与几年前相比,今天实施这样的学习模型已经不那么令人生畏和困难了。这一切都要归功于新开发的惊人的学习框架,如谷歌的TensorFlow,它有助于缓解获取数据、训练模型、提供预测和完善其未来结果的过程。谷歌大脑团队创造了它,这是一个在人工智能和机器学习领域开发技术的核心团队。TensorFlow 是一个为利用数值计算和大规模机器学习而开发的开源库。

TensorFlow将自己与一系列机器学习和深度学习,也称为神经网络,模型和算法捆绑在一起。它使用Python语言来提供一个方便的前端API,以便用该框架来构建应用程序,同时用高性能的C++来执行这些应用程序。TensorFlow可以轻松地训练和运行深度神经网络,用于手写数字分类、图像识别、词嵌入、递归神经网络、自然语言处理和基于PDE的模拟。

最令人惊奇的是?TensorFlow支持大规模的生产预测,使用相同的模型进行训练。它被认为是目前世界上最有名的深度学习库。谷歌在几乎所有的产品中都使用了机器学习,以改善他们的搜索引擎、翻译、图像字幕,或提供更好的推荐,使谷歌用户能够体验到更快、更精细的人工智能搜索。例如,如果用户在搜索栏中输入一个关键词,谷歌会推荐可能是下一个词的内容。谷歌随时使用机器学习来分析和利用存在的大量数据集,给用户提供最佳体验。

建立Tensorflow的目的是让研究人员和开发人员共同开发更好的、适合未来的人工智能模式,因为这样的进步一旦开发出来并扩大规模,就可以让很多人使用它。该库在2015年底首次公开,而第一个稳定版本在2017年发布。它是开源的,在Apache开源许可证下开发。人们可以使用它,修改它,并有偿重新发布修改后的版本,而不需要向谷歌支付任何费用!在开发这种高级库之前,机器学习和深度学习的编码机制要复杂得多。TensorFlow库提供了一个高水平的API,准备一个神经网络、配置一个神经元或为一个神经元编程不需要复杂的编码。该库是自给自足的,可以完成所有这些任务。

TensorFlow还与Java和R集成。深度学习的应用有时可能变得非常复杂,训练过程需要大量的计算能力。由于数据量大,它可能需要很长的时间,因为它涉及几个迭代过程,数学计算,矩阵乘法等。TensorFlow提供的主要优势之一是它支持GPU,以及CPU。它的编译时间也比其他深度学习库,如Keras和Torch快得多。 TensorFlow通常用于创建具有多层的大规模神经网络。它可以被灌输给 深度学习或 机器学习 问题,如分类、感知、理解、发现、预测和创造。它还可以在开发基于文本的应用程序、图像识别、语音搜索等方面发挥作用。

TensorFlow如何工作?

具有不同维度和等级的数据阵列被称为张量,作为输入到神经网络。TensorFlow允许开发者创建数据流图,它是描述数据如何在图中移动的结构,或一系列处理节点的存在。图中的每个节点代表一个特定的数学操作,节点之间的每个连接或边缘是一个多维数据阵列或张量。TensorFlow通过Python语言为程序员提供了所有这些。Python语言易于学习和使用,并提供了方便的方法来表达生成的高级抽象如何耦合在一起。TensorFlow中的节点和张量是Python对象,而TensorFlow应用程序本身也可以称为Python应用程序。

然而,实际的数学运算并不是在Python中进行的。通过TensorFlow提供的转换库是以高性能C++二进制文件的形式编写的。Python只是引导各部分之间的交通,并提供高级编程抽象,将它们全部联系在一起。TensorFlow应用程序大多可以在任何方便的目标上运行:本地机器、云中的集群、iOS或Android设备、CPU或GPU。如果你使用谷歌的云,你可以很容易地在谷歌定制的TensorFlow处理单元(TPU)芯片上运行TensorFlow,以进一步加速。由TensorFlow创建的结果模型可以部署在几乎任何设备上,在那里它们可以被用来提供预测。

从代码开始

在这篇文章中,我们将使用TensorFlow库提供的组件实现一个简单的人工神经网络模型,以预测准确性,并了解TensorFlow如何实现更快的处理和神经网络的开发。以下代码的部分灵感来自于TensorFlow的官方文档,可以使用这里的链接访问。

安装库

我们的第一步是安装必要的库来建立我们的ANN模型。要做到这一点,你可以使用以下几行代码。

!pip install tensorflow
导入依赖性
#importing dependencies
import pandas as pd
from sklearn.model_selection import train_test_split
处理数据

现在让我们加载我们的数据,并在加载到我们的模型之前对其进行处理:

#Loading the data
df = pd.read_csv('/content/Churn.csv')

#creating X and Y Variables
X = pd.get_dummies(df.drop(['Churn', 'Customer ID'], axis=1))
y = df['Churn'].apply(lambda x: 1 if x=='Yes' else 0)

#splitting the data into train and test
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.2)


#printing the head for train
y_train.head()


1004    0
2695    0
4202    0
340     1
2770    1
Name: Churn, dtype: int64

创建神经网络

随着我们数据的处理,我们将通过定义参数和使用TensorFlow组件来创建我们的神经网络模型。我们还将对创建的模型进行训练,以便从中得出预测和准确率分数。你可以为任何数据或数据集创建一个类似的模型。

#importing model dependencies
 
from tensorflow.keras.models import Sequential, load_model
from tensorflow.keras.layers import Dense
from sklearn.metrics import accuracy_score

现在让我们定义网络层的参数。我们在输出层中使用sigmoid函数来预测数据集的二进制输出。

#setting parameters for network layers
 
model = Sequential()
model.add(Dense(units=32, activation='relu', input_dim=len(X_train.columns)))
model.add(Dense(units=64, activation='relu'))
model.add(Dense(units=1, activation='sigmoid'))
 
#setting up the model compiler
model.compile(loss='binary_crossentropy', optimizer='sgd', metrics='accuracy')

现在让我们适应并训练我们创建的模型;我们将训练它500个epochs,以达到最佳精度。

#fitting and training our model
 
model.fit(X_train, y_train, epochs=500, batch_size=32)

输出。

……..

Epoch 497/500
177/177 [==============================] - 1s 3ms/step - loss: 0.4246 - accuracy: 0.8956
Epoch 498/500
177/177 [==============================] - 1s 3ms/step - loss: 0.4247 - accuracy: 0.9002
Epoch 494/500
177/177 [==============================] - 1s 3ms/step - loss: 0.4228 - accuracy: 0.9182
Epoch 500/500
177/177 [==============================] - 1s 3ms/step - loss: 0.4222 - accuracy: 0.9388
#predicting the outcome
 
y_hat = model.predict(X_test)
y_hat = [0 if val < 0.5 else 1 for val in y_hat]


#printing the accuracy score
 
accuracy_score(y_test, y_hat)
 
0.946330731014905

我们可以观察到,我们的模型给了我们相当好的结果,作为准确率的分数。然而,我们可以使用超参数调整的方法进一步提高这个分数。

我们还可以保存以下创建的模型,并在需要时重新加载,以便进一步使用。

#saving the model
 
model.save('tfmodel')

#reloading model
 
model = load_model('tfmodel')

结束语

在这篇文章中,我们了解了什么是TensorFlow,以及它如何能够并且目前正被用于未来的发展。我们也尝到了使用TensorFlow库建立神经网络模型的滋味,以及它的组件是如何帮助开发的。我鼓励我的读者进一步探索该库的巨大和广泛的使用情况。上述实现可以作为一个colab笔记本,通过这里的链接访问。

学习愉快!