tensorflow实战google深度学习框架_TensorFlow深度学习入门指南

使用TensorFlow起步并运行您的第一个神经网络

6276b6bfc364555d95b9c81179e543b1.png

> Photo by Mike Lewis HeadSmart Media on Unsplash

由Google大脑团队于2015年开发的Tensorflow是最受欢迎的深度学习框架。 这主要是由于它支持多种语言,Tensorflow是用C ++编写的,但您可以通过Python,Javascript,Go和R与之交互。除了其灵活的体系结构和可扩展性之外(模型可以在GPU和CPU上进行训练 并通过Web服务,桌面应用程序或在移动设备上进行部署)。

本文是此工具的完整初学者指南。 它并不意味着要进行深入的介绍,而是旨在使您起步并运行,以开发您的第一个深度学习模型。

我认为,很难找到没有太多复杂性和繁琐数学知识的深度学习教程。 我个人通过获取足够的知识来构建可以工作的模型,然后在使用该方法解决更复杂的问题时了解了更多的复杂性,从而获得了最好的学习。

本教程旨在通过一个不太简单的数据集来演示TensorFlow的基本用法(以演示实际机器学习问题中遇到的一些复杂性),并提供足够的理论以使您能够自己构建某些东西,然后发展该知识 更复杂的文章和课程。

神经网络

在我们开始使用TensorFlow构建模型之前,我将简要介绍基于神经网络的算法的概念,因为首先对这一概念有一个基本的了解是一个好主意。

TensorFlow的主要目的是开发可扩展性强的基于神经网络的模型。 神经网络通常称为人工神经网络(ANN),是基于生物信息处理和通信节点工作方式的机器学习(称为深度学习)的一个子集。

深度神经网络(DNN)是Tensorflow中使用的一种特定形式的人工神经网络,由输入(特征)和输出(目标或预测变量)之间的许多层组成。 在训练模型时,将通过每一层执行数学计算,以计算特征代表特定输出或标签的概率。

数据准备

在本文的其余部分,我们将逐步讲解使用TensorFlow进行分类任务的示例。 我们将使用来自openml.org网站的名为" credit-g"的数据集。 这包括银行公司客户的许多功能以及一个类别,该类别指示是否发现客户存在良好或不良的信用风险。

我们可以使用另一个机器学习库Scikit-learn将数据集直接导入到Python开发环境中。 我正在使用Jupyter Lab。 在下面的代码中,我们还将标记为"类"的列重命名为"目标",以与TensorFlow命名约定更加一致,并将其转换为数字数据,因为TensorFlow无法处理目标变量的字符串数据。

import pandas as pdimport numpy as npfrom sklearn.datasets import fetch_openmlimport tensorflow as tffrom tensorflow import feature_columnfrom tensorflow.keras import layersfrom sklearn.model_selection import train_test_splitX,y = fetch_openml("credit-g", version=1, as_frame=True, return_X_y=True)data = pd.concat([X,y], axis=1)data['target'] = np.where(data['class'] == 'good', 1,0)data = data.drop('class', axis=1)data.head()
eecd71b64c818a5ad7eab3e9a07d169f.png

> A sample of rows and columns from the data set

来自Openml.org的数据集倾向于将Pandas特定的数据类型" category"用于分类列。 由于TensorFlow无法识别此数据类型,因此我们需要执行另一步骤以将数据类型为"类别"的列转换为"对象"。

categorical_features = data.select_dtypes(include=['category']).drop(['class'], axis=1).columnsfor col in categorical_features:    data[col] = data[col].astype('object')

接下来,我们将数据分为训练,测试和验证集。

msk = np.random.rand(len(data)) < 0.8train = data[msk]test = data[~msk]msk_train = np.random.rand(len(train)) < 0.8validation = train[~msk_train]print("Train data size:", len(train))print("Test data size:", len(test))print("Validation data size:", len(validation))
b8c32dcff7b62a46c5ebb3b55047b2e6.png

TensorFlow无法直接获取Pandas数据帧。 相反,我们需要将数据框中的列映射到可用于训练模型的要素。 TensorFlow有一种称为tf.data的方法,用于为不同数据类型构建输入管道。

def df_to_dataset(dataframe, shuffle=True, batch_size=32):  dataframe = dataframe.copy()  labels = dataframe.pop('target')  ds = tf.data.Dataset.from_tensor_slices((dict(dataframe), labels))  if shuffle:    ds = ds.shuffle(buffer_size=len(dataframe))  ds = ds.batch(batch_size)  return dsbatch_size = 32 train_ds = df_to_dataset(train, batch_size=batch_size)validation_ds = df_to_dataset(validation, shuffle=False, batch_size=batch_size)test_ds = df_to_dataset(test, shuffle=False, batch_size=batch_size)

创建特征层

我们正在使用的数据集包含许多不同的要素类型,这些要素类型将需要不同的转换。 例如,我们具有一些分类功能,例如" personal_status"列和一些数字列。

在TensorFlow中,我们可以应用必要的变换并将其编码为feature_columns,这些特征被馈送到特征层,该特征层将成为神经网络的第一层。 作为网络的第一步,此层会将此训练数据的每个示例转换为单个Tensor。

要将列用作Tensorflow模型中的特征,我们需要使用feature_columns方法。 有许多不同的feature_column方法将执行不同的转换并将转换后的特征馈入模型。

对于我们的数据集,我们将使用三种不同的转换。

下面的代码首先创建一个名为feature_columns的空列表,我们将在其中附加不同的要素列类型。 第一个转换通过feature_column.categorical_column_with_vocabulary_list方法使用一次热编码来转换分类特征。

然后,我们使用feature_column.bucketized_column方法将"年龄"列转换为存储分区的组。

最后,我们使用feature_column.numeric_column为其余的数值数据创建要素列。

feature_columns = []# Creating one hot encoded feature columnsfor column in categorical_features:    column = feature_column.categorical_column_with_vocabulary_list(        column, data[column].unique().tolist())    column = feature_column.indicator_column(column)    feature_columns.append(column)    # Creating age bucketsage = feature_column.numeric_column("age")age_buckets = feature_column.bucketized_column(age, boundaries=[18, 25, 30, 35, 40, 45, 50, 55, 60, 65])feature_columns.append(age_buckets)# Remaining numeric featuresremaining_numeric = train.select_dtypes(include=['int64', 'float64']).drop(['age', 'target'], axis=1).columns.tolist()#remaining_numeric_cols = []for column in remaining_numeric:    column = feature_column.numeric_column(column)    feature_columns.append(column)

现在,我们可以使用feature_columns创建要在我们的神经网络中使用的特征层。

feature_layer = tf.keras.layers.DenseFeatures(feature_columns)

训练模型

现在,我们可以构建神经网络,并使用特征层中的数据训练和评估模型。 在下面的代码中,我们正在构建一种最常见的模型类型,称为顺序模型。 这是从要素图层开始的一系列图层。

第二层和第三层称为激活层。 在基本级别上,每个激活层都从要素层获取输入,并将它们乘以每个节点中的权重。 最常用的激活函数类型是整流线性激活单元(ReLU),它在下面的代码的每个激活层中指定。

在model.compile代码中,我们将算法类型指定为" adam",其他可用的优化器也可以在此处找到。

model = tf.keras.Sequential([  feature_layer,  layers.Dense(128, activation='relu'),  layers.Dense(128, activation='relu'),  layers.Dense(1)])model.compile(optimizer='adam',              loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),              metrics=['accuracy'])model.fit(train_ds,          validation_data=validation_ds,          epochs=5)

训练后的模型的性能输出如下所示。

2e7f8872d475e6aa04826528d2173e9d.png

网络中的层数以及每层中的节点数(上述模型中两个激活层中的数目128)都会影响模型的性能。 因此,提高性能的一种方法是尝试对这些元素使用不同的数字。 此外,与其他机器学习算法一样,其他优化包括超参数调整,特征选择和增强的特征转换。

本文对使用TensorFlow解决分类任务进行了基本介绍。 如果您想探索讨论的一些概念,fastai课程针对程序员的实用深度学习课程非常好而且免费。

私信译者获得本教程的完整笔记代码。

谢谢阅读!

(本文翻译自Rebecca Vickery的文章《Beginners Guide to Deep Learning with TensorFlow》,参考:https://towardsdatascience.com/beginners-guide-to-deep-learning-with-tensorflow-ca85969b2f2)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值