加载CSV数据

    请注意这是R版的本教程在TensorFlow官方网站。

    本教程提供了一个如何将CSV数据从文件加载到TensorFlow数据集的示例tfdatasets

    本教程中使用的数据来自泰坦尼克号的乘客名单。该模型将根据年龄、性别、机票等级等特征,以及乘客是否独自出行,预测乘客幸存的可能性。

    设置

    图书馆(keras)图书馆(tfdatasets)

    你可以用read.csv,并将数组传递给TensorFlow。如果你需要扩展到一个大的文件集,或者需要一个与TensorFlow和tfdataset集成的加载器,那么使用make_csv_dataset功能:

    现在从文件中读取CSV数据并创建一个数据集。

    我们可以看到数据集的一个元素:

    ## $survive ## tf。张量([0 0 1 1 0)=(5)形状,dtype = int32) # # # # $ # # tf做爱。张量([b'male' b'male' b'female' b'female' b'male'], shape=(5,), dtype=string) ## ## $age ## tf.张量([20.]54.28.29.45.5),形状= (5)dtype n_siblings_spouses美元= float32) # # # # # #特遣部队。张量([0 0 1 0 0],shape=(5,), dtype=int32) ## ## $ parch# # tf。张量([0 0 0 2 0)=(5)形状,dtype = int32) # # # # $ # #特遣部队。张量([7.925 51.8625 26.]15.2458 - 28.5),形状= (5)dtype = float32) # # # # # # $类特遣部队。张量([b' third ' b' first ' b' second ' b' third ' b' first '], shape=(5,), dtype=string) ## ## $deck ## tf。张量([b'unknown' b' e ' b'unknown' b'unknown' b' c '], shape=(5,), dtype=string) ## ## $embark_town ## tf。Tensor([b'Southampton' b'Southampton' b'Southampton' b'Cherbourg' b'Southampton'], shape=(5,), dtype=string) ## ## $alone ## tf.Tensor([b'y' b'y' b'n' b'n' b'y'], shape=(5,), dtype=string)

    你们可以看到make_csv_dataset创建一个张量列表,每个张量代表一个列。这个很像Rdata.frame,最显著的区别是TensorFlow数据集是一个迭代器——这意味着每次调用iter_next它将从数据集中生成不同的一批行。

    如上所示,CSV中的列是命名的。数据集构造函数将自动选取这些名称。如果正在处理的文件不包含第一行中的列名,则将它们以字符向量的形式传递给column_names论点的make_csv_dataset函数。

    如果需要从数据集中省略一些列,则创建计划使用的列的列表,并将其传递到(可选)select_columns构造函数的参数。

    数据预处理

    CSV文件可以包含多种数据类型。通常,在将数据输入模型之前,您希望将这些混合类型转换为固定长度的向量。

    你可以使用任何你喜欢的工具(如nltk或sklearn)对数据进行预处理,并将处理后的输出传递给TensorFlow。

    TensorFlow有一个用于描述常用输入转换的内置系统:feature_column,我们将通过名为feature_spec

    在模型内部进行预处理的主要好处是,当导出模型时,它包含预处理。通过这种方式,您可以直接将原始数据传递给模型。

    首先让我们定义规范

    规范< -feature_spec(train_dataset幸存下来)。

    现在我们可以加上步骤我们的规范告诉我们如何转换数据。

    连续的数据

    对于连续数据,我们使用step_numeric_column

    添加一个步骤后,我们需要适合我们的规格:

    规范< -适合(规范)

    然后我们可以创建一个layer_dense_features它接收我们的数据集作为输入,并返回一个包含所有密集特征的数组:

    # #特遣部队。张量(# #[[48。34.375 - 1。3.) # #(40。7.225 0。0.) # #(28。8.7125 0。0. ] ## [42. 8.4042 0. 1. ] ## [33. 7.8958 0. 0. ]], shape=(5, 4), dtype=float32)

    将神经网络中的所有数字特征规范化通常是个好主意。我们可以用同样的step_numeric_column加上一个额外的参数' ':

    规范< -feature_spec(train_dataset幸存下来)。规范< -规范% > %step_numeric_columnall_numeric(),normalizer_fn =scaler_standard())

    然后我们就可以创建layer_dense_features看一下输出:

    # #特遣部队。张量(## [[-1.6755021 0.02076224 0.54201424 1.9260981]## [-0.0509259 -0.13340482 0.54201424 0.73245984]## [1.8561853 -0.3152102 -0.48006976 -0.4611784]## [1.644284 -0.38669372 -0.48006976 -0.4611784]## [-0.26282716 0.4161861 0.54201424 1.9260981]],shape=(5,4), dtype=float32)

    现在,输出被缩放了。

    分类数据

    分类数据不能直接包含在模型矩阵中——我们需要执行某种转换,以便将它们表示为数字。在实践中,将类别变量表示为一组单热编码列是非常常见的。

    方法也可以执行此转换feature_specAPI:

    我们再来定义一下规范并添加一些步骤:

    我们现在可以看到输出:

    # #特遣部队。张量(# #[[0。1.) # #(0。1.) # #(1。0.) # #(1。0.) # #(0。 1.]], shape=(5, 2), dtype=float32)

    我们可以看到这生成了两个列,分别对应列中的不同类别的数据集。

    对数据集中的所有分类特征进行这种转换很简单:

    现在让我们看看输出:

    # #特遣部队。张量(# #[[0。1.1.0.0.0.0.0.0. 1. 0. 0. 0. 0. 1. 0. 0. 1.] ## [1. 0. 0. 0. 1. 0. 0. 0. 0. 1. 0. 0. 0. 0. 1. 0. 1. 0.] ## [0. 1. 0. 0. 1. 0. 0. 0. 0. 0. 0. 1. 0. 1. 0. 0. 0. 1.] ## [0. 1. 0. 0. 1. 0. 0. 0. 0. 0. 0. 1. 0. 0. 1. 0. 0. 1.] ## [0. 1. 1. 0. 0. 0. 0. 1. 0. 0. 0. 0. 1. 0. 0. 0. 0. 1.]], shape=(5, 18), dtype=float32)

    结合所有的

    我们演示了如何使用feature_spec接口分别用于连续数据和分类数据。还可以将所有转换合并到单个转换中规范

    现在,让我们把规范看一下输出:

    # #特遣部队。张量(## [[0.93794656 0.]1.0.0.1.# # 0。0.0.0. 0. 1. ## 0. 0. 0. 1. 0. -0.5539651 ## -0.48006976 -0.4611784 0. 1. ] ## [-0.0509259 0. 1. 0. 0. 1. ## 0. 0. 0. 0. 0. 0. ## 1. 1. 0. 0. 0. -0.5659972 ## -0.48006976 -0.4611784 0. 1. ] ## [-1.9700449 1. 0. 0. 1. 0. ## 0. 0. 0. 0. 0. 0. ## 1. 0. 0. 1. 0. -0.23657836 ## 0.54201424 0.73245984 0. 1. ] ## [-0.5453621 0. 1. 0. 0. 1. ## 0. 0. 0. 0. 0. 0. ## 1. 0. 0. 1. 0. -0.5461019 ## -0.48006976 -0.4611784 0. 1. ] ## [-0.8985309 1. 0. 0. 0. 1. ## 0. 0. 0. 0. 0. 0. ## 1. 0. 0. 1. 0. 0.5683259 ## 4.63035 1.9260981 1. 0. ]], shape=(5, 22), dtype=float32)

    这就结束了我们的数据预处理步骤,现在我们可以专注于建立一个训练模型。

    建筑模型

    我们将使用Keras顺序API构建一个模型,该模型使用我们在规范

    模型< -keras_model_sequential()% > %layer_dense_featuresfeature_columns =dense_features(规范)% > %layer_dense单位=128激活=“relu”% > %layer_dense单位=128激活=“relu”% > %layer_dense单位=1激活=“乙状结肠”模型% > %编译损失=“binary_crossentropy”优化器=“亚当”指标=“准确性”

    培训、评估和预测

    现在可以实例化和训练模型了。

    # #时代1/20 # # 53/53 - 1 s -损失:0.5752 -准确性:0.7197 - val_loss: 0.0000 e + 00 - val_accuracy: 0.0000 e + 00 # #时代# # 53/53——2/20 0 -损失:0.4546 -准确性:0.8144 - val_loss: 0.4310 - val_accuracy: 0.8068 # #时代# # 53/53——3/20 0 -损失:0.4273 -准确性:0.8068 - val_loss: 0.4009 - val_accuracy: 0.8371 # #时代# # 53/53——4/20 0 -损失:0.4070 -准确性:0.8333 - val_loss: 0.3742 - val_accuracy: 0.8598 # #时代# # 53/53——5/20 0 -损失:0.3938 -准确性:0.8561 - val_loss:0.3579 - 0.8523 val_accuracy: # #时代# # 53/53——6/20 0 -损失:0.3824 -准确性:0.8333 - val_loss: 0.3593 - val_accuracy: 0.8598 # #时代# # 53/53——7/20 0 -损失:0.3675 -准确性:0.8182 - val_loss: 0.3362 - val_accuracy: 0.8750 # #时代# # 53/53——8/20 0 -损失:0.3647 -准确性:0.8598 - val_loss: 0.3340 - val_accuracy: 0.8598 # #时代# # 53/53——9/20 0 -损失:0.3317 -准确性:0.8788 - val_loss: 0.3158 - val_accuracy: 0.8902 # #时代# # 53/53——10/20 0 -损失:0.3411 - 0.8750精度:- val_loss: 0.3180 - val_accuracy: 0.8864 # #时代# # 53/53——11/20 0 -损失:0.3312 -准确性:0.8826 - val_loss: 0.3023 - val_accuracy: 0.8826 # #时代# # 53/53——12/20 0 -损失:0.3209 -准确性:0.8598 - val_loss: 0.3082 - val_accuracy: 0.8826 # #时代# # 53/53——13/20 0 -损失:0.3173 -准确性:0.8712 - val_loss: 0.2955 - val_accuracy: 0.8864 # #时代# # 53/53——14/20 0 -损失:0.3176 -准确性:0.8788 - val_loss: 0.2820 - val_accuracy:0.8902 # #时代# # 53/53——15/20 0 -损失:0.3172 -准确性:0.8561 - val_loss: 0.2811 - val_accuracy: 0.8977 # #时代# # 53/53——16/20 0 -损失:0.3068 -准确性:0.8902 - val_loss: 0.2851 - val_accuracy: 0.8939 # #时代# # 53/53——17/20 0 -损失:0.2970 -准确性:0.8750 - val_loss: 0.2674 - val_accuracy: 0.9053 # #时代# # 53/53——18/20 0 -损失:0.2874 -准确性:0.8826 - val_loss: 0.2665 - val_accuracy: 0.8977 # #时代# # 53/53——19/20 0 -损失:0.2823 -精度:0.8977 - val_loss: 0.2544 - val_accuracy: 0.9091 ##纪元20/20 ## 53/53 - 0s -损耗:0.2818 -精度:0.8826 - val_loss: 0.2601 - val_accuracy: 0.9091

    一旦训练好模型,就可以在test_data集上检查它的准确性。

    模型% > %评估(test_dataset% > %dataset_use_spec(规范),verbose =0
    # # # #[1]美元损失精度0.2602749 # # # # # # 0.9090909 [1]

    你也可以用预测推断一个批或批数据集上的标签:

    (1) # # # # # # 0.01933812 [1] [2] 0.17113033 # # # # 0.07307167 [3] [4] 0.98227388 # # 0.98028392 [5]